Example #1
0
        /// <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);
            }
        }
Example #2
0
        /// <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);
                }
            }
        }