/// <summary> /// Add a node indexed by the specified key value. /// </summary> public void Add(string key, XPathNavigator navigator) { XmlQueryNodeSequence seq = (XmlQueryNodeSequence)this.table[key]; if (seq == null) { // Create a new sequence and add it to the index seq = new XmlQueryNodeSequence(); seq.AddClone(navigator); this.table.Add(key, seq); } else { // Add node to existing sequence; don't add if it already there for (int i = 0; i < seq.Count; i++) { if (navigator.IsSamePosition(seq[i])) { return; } } seq.AddClone(navigator); } }
/// <summary> /// Add a node indexed by the specified key value. /// </summary> public void Add(string key, XPathNavigator navigator) { XmlQueryNodeSequence seq; if (!this.table.TryGetValue(key, out seq)) { // Create a new sequence and add it to the index seq = new XmlQueryNodeSequence(); seq.AddClone(navigator); this.table.Add(key, seq); } else { // The nodes are guaranteed to be added in document order with possible duplicates. // Add node to the existing sequence if it differs from the last one. Debug.Assert(navigator.ComparePosition(seq[seq.Count - 1]) >= 0, "Index nodes must be added in document order"); if (!navigator.IsSamePosition(seq[seq.Count - 1])) { seq.AddClone(navigator); } } }