Merge branch 'sgen-disable-gc'
[mono.git] / mcs / class / System.XML / Mono.Xml.Schema / XsdKeyTable.cs
index bcc39191d92f2272c4aa18b83a6fc5205db88dcd..0c3a2a3a0cc3539d743f960cc374c5013a49f655 100644 (file)
 // OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
 // WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
 //
-using System;\r
-using System.Collections;\r
-using System.Collections.Specialized;\r
-using System.Xml;\r
-using System.Xml.Schema;\r
-\r
-namespace Mono.Xml.Schema\r
-{\r
-       internal class XsdKeyEntryCollection : CollectionBase\r
-       {\r
-               public void Add (XsdKeyEntry entry)\r
-               {\r
-                       List.Add (entry);\r
-               }\r
-\r
-               public XsdKeyEntry this [int i] {\r
-                       get { return (XsdKeyEntry) List [i]; }\r
-                       set { List [i] = value; }\r
-               }\r
-       }\r
-\r
-       // Created per constraining element.\r
-       internal class XsdKeyTable\r
-       {\r
-               // FIXME: no need after #70419\r
-               public readonly bool alwaysTrue = true;\r
-\r
-               private XsdIdentitySelector selector;\r
-               private XmlSchemaIdentityConstraint source;\r
-               private XmlQualifiedName qname;\r
-               private XmlQualifiedName refKeyName;\r
-\r
-               public XsdKeyEntryCollection Entries =\r
-                       new XsdKeyEntryCollection ();\r
-               public XsdKeyEntryCollection FinishedEntries =\r
-                       new XsdKeyEntryCollection ();\r
-\r
-               public int StartDepth;\r
-               public XsdKeyTable ReferencedKey;\r
-\r
-               public XsdKeyTable (XmlSchemaIdentityConstraint source, XmlReader reader)\r
-               {\r
-                       Reset (source, reader);\r
-               }\r
-\r
-               public XmlQualifiedName QualifiedName {\r
-                       get { return qname; }\r
-               }\r
-\r
-               public XmlQualifiedName RefKeyName {\r
-                       get { return refKeyName; }\r
-               }\r
-\r
-               public XmlSchemaIdentityConstraint SourceSchemaIdentity {\r
-                       get { return source; }\r
-               }\r
-\r
-               public XsdIdentitySelector Selector {\r
-                       get { return selector; }\r
-               }\r
-\r
-               public void Reset (XmlSchemaIdentityConstraint source, XmlReader reader)\r
-               {\r
-                       this.source = source;\r
-                       this.selector = source.CompiledSelector;\r
-                       this.qname = source.QualifiedName;\r
-                       XmlSchemaKeyref kr = source as XmlSchemaKeyref;\r
-                       if (kr != null)\r
-                               this.refKeyName = kr.Refer;\r
-                       StartDepth = 0;\r
-               }\r
-\r
-               // In this method, attributes are ignored.\r
-               public XsdIdentityPath SelectorMatches (ArrayList qnameStack, XmlReader reader)\r
-               {\r
-                       for (int i = 0; i < Selector.Paths.Length; i++) {\r
-                               XsdIdentityPath path = Selector.Paths [i];\r
-                               // Only "." hits.\r
-                               if (reader.Depth == this.StartDepth) {\r
-                                       if (path.OrderedSteps.Length == 0)\r
-                                               return path;\r
-                                       else\r
-                                               continue;\r
-                               }\r
-                               // It does not hit as yet (too shallow to hit).\r
-                               if (reader.Depth - this.StartDepth < path.OrderedSteps.Length - 1)\r
-                                       continue;\r
-\r
-                               int iter = path.OrderedSteps.Length;\r
-                               if (path.OrderedSteps [iter-1].IsAttribute)\r
-                                       iter--;\r
-\r
-                               if (path.Descendants && reader.Depth < this.StartDepth + iter)\r
-                                       continue;\r
-                               else if (!path.Descendants && reader.Depth != this.StartDepth + iter)\r
-                                       continue;\r
-\r
-                               iter--;\r
-\r
-                               XsdIdentityStep step;\r
-                               for (int x = 0; 0 <= iter; x++, iter--) {\r
-                                       step = path.OrderedSteps [iter];\r
-                                       if (step.IsAnyName)\r
-                                               continue;\r
-                                       XmlQualifiedName qname = (XmlQualifiedName) qnameStack [qnameStack.Count - x - 1];\r
-                                       if (step.NsName != null && qname.Namespace == step.NsName)\r
-                                               continue;\r
-                                       if (step.Name == qname.Name && step.Namespace == qname.Namespace)\r
-                                               continue;\r
-                                       if (alwaysTrue)\r
-                                               break;\r
-                               }\r
-                               if (iter >= 0)  // i.e. did not match against the path.\r
-                                       continue;\r
-                               return path;\r
-                       }\r
-                       return null;\r
-               }\r
-       }\r
-}\r
+using System;
+using System.Collections;
+using System.Collections.Specialized;
+using System.Xml;
+using System.Xml.Schema;
+
+namespace Mono.Xml.Schema
+{
+       internal class XsdKeyEntryCollection : CollectionBase
+       {
+               public void Add (XsdKeyEntry entry)
+               {
+                       List.Add (entry);
+               }
+
+               public XsdKeyEntry this [int i] {
+                       get { return (XsdKeyEntry) List [i]; }
+                       set { List [i] = value; }
+               }
+       }
+
+       // Created per constraining element.
+       internal class XsdKeyTable
+       {
+               // FIXME: no need after #70419
+               public readonly bool alwaysTrue = true;
+
+               private XsdIdentitySelector selector;
+               private XmlSchemaIdentityConstraint source;
+               private XmlQualifiedName qname;
+               private XmlQualifiedName refKeyName;
+
+               public XsdKeyEntryCollection Entries =
+                       new XsdKeyEntryCollection ();
+               public XsdKeyEntryCollection FinishedEntries =
+                       new XsdKeyEntryCollection ();
+
+               public int StartDepth;
+               public XsdKeyTable ReferencedKey;
+
+               public XsdKeyTable (XmlSchemaIdentityConstraint source)
+               {
+                       Reset (source);
+               }
+
+               public XmlQualifiedName QualifiedName {
+                       get { return qname; }
+               }
+
+               public XmlQualifiedName RefKeyName {
+                       get { return refKeyName; }
+               }
+
+               public XmlSchemaIdentityConstraint SourceSchemaIdentity {
+                       get { return source; }
+               }
+
+               public XsdIdentitySelector Selector {
+                       get { return selector; }
+               }
+
+               public void Reset (XmlSchemaIdentityConstraint source)
+               {
+                       this.source = source;
+                       this.selector = source.CompiledSelector;
+                       this.qname = source.QualifiedName;
+                       XmlSchemaKeyref kr = source as XmlSchemaKeyref;
+                       if (kr != null)
+                               this.refKeyName = kr.Refer;
+                       StartDepth = 0;
+               }
+
+               // In this method, attributes are ignored.
+               public XsdIdentityPath SelectorMatches (ArrayList qnameStack, int depth)
+               {
+                       for (int i = 0; i < Selector.Paths.Length; i++) {
+                               XsdIdentityPath path = Selector.Paths [i];
+                               // Only "." hits.
+                               if (depth == this.StartDepth) {
+                                       if (path.OrderedSteps.Length == 0)
+                                               return path;
+                                       else
+                                               continue;
+                               }
+                               // It does not hit as yet (too shallow to hit).
+                               if (depth - this.StartDepth < path.OrderedSteps.Length - 1)
+                                       continue;
+
+                               int iter = path.OrderedSteps.Length;
+                               if (path.OrderedSteps [iter-1].IsAttribute)
+                                       iter--;
+
+                               if (path.Descendants && depth < this.StartDepth + iter)
+                                       continue;
+                               else if (!path.Descendants && depth != this.StartDepth + iter)
+                                       continue;
+
+                               iter--;
+
+                               XsdIdentityStep step;
+                               for (int x = 0; 0 <= iter; x++, iter--) {
+                                       step = path.OrderedSteps [iter];
+                                       if (step.IsAnyName)
+                                               continue;
+                                       XmlQualifiedName qname = (XmlQualifiedName) qnameStack [qnameStack.Count - x - 1];
+                                       if (step.NsName != null && qname.Namespace == step.NsName)
+                                               continue;
+                                       if (step.Name == qname.Name && step.Namespace == qname.Namespace)
+                                               continue;
+                                       if (alwaysTrue)
+                                               break;
+                               }
+                               if (iter >= 0)  // i.e. did not match against the path.
+                                       continue;
+                               return path;
+                       }
+                       return null;
+               }
+       }
+}