public static SchemaNamespaceList Intersection(SchemaNamespaceList o1, SchemaNamespaceList o2) { // This method is only used to figure out if we need to call Union, so // we can safely ignore the types ArrayList. SchemaNamespaceList nslist = null; if (o1.type == ListType.Any) { if (o2.type == ListType.Any) return null; // result in wildcard nslist = o2.Clone(); } else if (o2.type == ListType.Any) { nslist = o1.Clone(); } else if (o1.type == ListType.Other && o2.type == ListType.Other) { if (o1.targetNamespace == o2.targetNamespace) { nslist = o1.Clone(); } } else if (o1.type == ListType.Set && o2.type == ListType.Set) { nslist = o1.Clone(); nslist = new SchemaNamespaceList(); 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.Set && o2.type == ListType.Other) { nslist = o1.Clone(); if (nslist.set[o2.targetNamespace] != null) { nslist.set.Remove(o2.targetNamespace); } } else if (o2.type == ListType.Set && o1.type == ListType.Other) { nslist = o2.Clone(); if (nslist.set[o1.targetNamespace] != null) { nslist.set.Remove(o1.targetNamespace); } } return nslist; }
public static SchemaNamespaceList Union(SchemaNamespaceList o1, SchemaNamespaceList o2) { SchemaNamespaceList nslist = null; if (o1.type == ListType.Any) { nslist = new SchemaNamespaceList(); } else if (o2.type == ListType.Any) { nslist = new SchemaNamespaceList(); } else if (o1.type == ListType.Other && o2.type == ListType.Other) { if (o1.targetNamespace == o2.targetNamespace) { nslist = o1.Clone(); } } else if (o1.type == ListType.Set && o2.type == ListType.Set) { nslist = o1.Clone(); foreach (string ns in o2.set.Keys) { nslist.set[ns] = ns; } } else if (o1.type == ListType.Set && o2.type == ListType.Other) { if (o1.set.Contains(o2.targetNamespace)) { nslist = new SchemaNamespaceList(); } } else if (o2.type == ListType.Set && o1.type == ListType.Other) { if (o2.set.Contains(o2.targetNamespace)) { nslist = new SchemaNamespaceList(); } else { nslist = o1.Clone(); } } if (o1.types != null) { foreach (TypeNode t in o1.types) { nslist.AddType(t); } } if (o2.types != null) { foreach (TypeNode t in o2.types) { nslist.AddType(t); } } return nslist; }