MS.Internal.Xml.XPath.Query.Insert C# (CSharp) Method

Insert() public method

public Insert ( List buffer, XPathNavigator nav ) : bool
buffer List
nav System.Xml.XPath.XPathNavigator
return bool
        public bool Insert(List<XPathNavigator> buffer, XPathNavigator nav) {
            int l = 0;
            int r = buffer.Count;

            // In most cases nodes are already sorted. 
            // This means that nav often will be equal or after then last item in the buffer
            // So let's check this first.
            if (r != 0) {
                switch (CompareNodes(buffer[r - 1], nav)) {
                case XmlNodeOrder.Same:
                    return false;
                case XmlNodeOrder.Before:
                    buffer.Add(nav.Clone());
                    return true;
                default:
                    r --;
                    break;
                }
            }

            while (l < r) {
                int m = GetMedian(l, r);
                switch (CompareNodes(buffer[m], nav)) {
                case XmlNodeOrder.Same:
                    return false;
                case XmlNodeOrder.Before: 
                    l = m + 1;
                    break;
                default:
                    r = m;
                    break;
                }
            }
            AssertDOD(buffer, nav, l);
            buffer.Insert(l, nav.Clone());
            return true;
        }