public static XObjectsNamespaceList Intersection(XObjectsNamespaceList o1, XObjectsNamespaceList o2, bool v1Compat)
        {
            XObjectsNamespaceList xObjectsNamespaceList;
            XObjectsNamespaceList nslist = null;

            Debug.Assert(o1 != o2);
            if (o1.type == XObjectsNamespaceList.ListType.Any)
            {
                nslist = o2.Clone();
            }
            else if (o2.type == XObjectsNamespaceList.ListType.Any)
            {
                nslist = o1.Clone();
            }
            else if (!(o1.type != XObjectsNamespaceList.ListType.Set ? true : o2.type != XObjectsNamespaceList.ListType.Other))
            {
                nslist = o1.Clone();
                nslist.RemoveNamespace(o2.targetNamespace);
                if (!v1Compat)
                {
                    nslist.RemoveNamespace(string.Empty);
                }
            }
            else if (!(o1.type != XObjectsNamespaceList.ListType.Other ? true : o2.type != XObjectsNamespaceList.ListType.Set))
            {
                nslist = o2.Clone();
                nslist.RemoveNamespace(o1.targetNamespace);
                if (!v1Compat)
                {
                    nslist.RemoveNamespace(string.Empty);
                }
            }
            else if (!(o1.type != XObjectsNamespaceList.ListType.Set ? true : o2.type != XObjectsNamespaceList.ListType.Set))
            {
                nslist = o1.Clone();
                nslist = new XObjectsNamespaceList()
                {
                    type = XObjectsNamespaceList.ListType.Set,
                    @set = new Hashtable()
                };
                foreach (string ns in [email protected])
                {
                    if ([email protected](ns))
                    {
                        [email protected](ns, ns);
                    }
                }
            }
            else if ((o1.type != XObjectsNamespaceList.ListType.Other ? false : o2.type == XObjectsNamespaceList.ListType.Other))
            {
                if (o1.targetNamespace == o2.targetNamespace)
                {
                    nslist = o1.Clone();
                    xObjectsNamespaceList = nslist;
                    return(xObjectsNamespaceList);
                }
                if (!v1Compat)
                {
                    if (o1.targetNamespace == string.Empty)
                    {
                        nslist = o2.Clone();
                    }
                    else if (o2.targetNamespace == string.Empty)
                    {
                        nslist = o1.Clone();
                    }
                }
            }
            xObjectsNamespaceList = nslist;
            return(xObjectsNamespaceList);
        }
Esempio n. 2
0
        public static XObjectsNamespaceList Intersection(XObjectsNamespaceList o1, XObjectsNamespaceList o2,
                                                         bool v1Compat)
        {
            XObjectsNamespaceList nslist = null;

            Debug.Assert(o1 != o2); //clause 1
            if (o1.type == ListType.Any)
            {
                //clause 2 - o1 is any
                nslist = o2.Clone();
            }
            else if (o2.type == ListType.Any)
            {
                //clause 2 - o2 is any
                nslist = o1.Clone();
            }
            else if (o1.type == ListType.Set && o2.type == ListType.Other)
            {
                //Clause 3 o2 is other
                nslist = o1.Clone();
                nslist.RemoveNamespace(o2.targetNamespace);
                if (!v1Compat)
                {
                    nslist.RemoveNamespace(string.Empty); //remove ##local
                }
            }
            else if (o1.type == ListType.Other && o2.type == ListType.Set)
            {
                //Clause 3 o1 is other
                nslist = o2.Clone();
                nslist.RemoveNamespace(o1.targetNamespace);
                if (!v1Compat)
                {
                    nslist.RemoveNamespace(string.Empty); //remove ##local
                }
            }
            else if (o1.type == ListType.Set && o2.type == ListType.Set)
            {
                //clause 4
                nslist      = o1.Clone();
                nslist      = new XObjectsNamespaceList();
                nslist.type = ListType.Set;
                nslist.set  = new Hashtable();
                foreach (string ns in o1.set.Keys)
                {
                    if (o2.set.Contains(ns))
                    {
                        nslist.set.Add(ns, ns);
                    }
                }
            }
            else if (o1.type == ListType.Other && o2.type == ListType.Other)
            {
                if (o1.targetNamespace == o2.targetNamespace)
                {
                    //negation of same namespace name
                    nslist = o1.Clone();
                    return(nslist);
                }

                if (!v1Compat)
                {
                    if (o1.targetNamespace == string.Empty)
                    {
                        // clause 6 - o1 is negation of absent
                        nslist = o2.Clone();
                    }
                    else if (o2.targetNamespace == string.Empty)
                    {
                        //clause 6 - o1 is negation of absent
                        nslist = o1.Clone();
                    }
                }

                //if it comes here, its not expressible //clause 5
            }

            return(nslist);
        }