Inheritance: System.Xml.XPath.XPathNodeIterator
Example #1
0
        // Invariant: a[i] < a[i+1] for i > item
        // returns flase is head of the list was moved & as a result consistancy of list depends on head consistancy.
        bool SiftItem(int item)
        {
            Debug.Assert(firstNotEmpty <= item && item < arr.Length);
            ResetableIterator it = arr[item];

            while (item + 1 < arr.Length)
            {
                XmlNodeOrder order = Query.CompareNodes(it.Current, arr[item + 1].Current);
                if (order == XmlNodeOrder.Before)
                {
                    break;
                }
                if (order == XmlNodeOrder.After)
                {
                    arr[item] = arr[item + 1];
                    //arr[item + 1] = it;
                    item++;
                }
                else     // Same
                {
                    arr[item] = it;
                    if (!Advance(item))
                    {
                        return(false);
                    }
                    it = arr[item];
                }
            }
            arr[item] = it;
            return(true);
        }
        private bool SiftItem(int item)
        {
            ResetableIterator iterator = this.arr[item];

            while ((item + 1) < this.arr.Length)
            {
                XmlNodeOrder order = Query.CompareNodes(iterator.Current, this.arr[item + 1].Current);
                if (order == XmlNodeOrder.Before)
                {
                    break;
                }
                if (order == XmlNodeOrder.After)
                {
                    this.arr[item] = this.arr[item + 1];
                    item++;
                }
                else
                {
                    this.arr[item] = iterator;
                    if (!this.Advance(item))
                    {
                        return(false);
                    }
                    iterator = this.arr[item];
                }
            }
            this.arr[item] = iterator;
            return(true);
        }
 protected ExtensionQuery(ExtensionQuery other) : base(other)
 {
     this.prefix        = other.prefix;
     this.name          = other.name;
     this.xsltContext   = other.xsltContext;
     this.queryIterator = (ResetableIterator)Query.Clone(other.queryIterator);
 }
Example #4
0
 public XmlIteratorQuery(XPathNodeIterator it)
 {
     this.it = it as ResetableIterator;
     if (this.it == null)
     {
         this.it = new XPathArrayIterator(it);
     }
 }
 private bool Advance(int pos)
 {
     if (this.arr[pos].MoveNext())
     {
         return(true);
     }
     if (this.firstNotEmpty != pos)
     {
         ResetableIterator iterator = this.arr[pos];
         Array.Copy(this.arr, this.firstNotEmpty, this.arr, this.firstNotEmpty + 1, pos - this.firstNotEmpty);
         this.arr[this.firstNotEmpty] = iterator;
     }
     this.firstNotEmpty++;
     return(false);
 }
Example #6
0
 // returns false is iterator at pos reached it's end & as a result head of the array may be moved
 bool Advance(int pos)
 {
     if (!arr[pos].MoveNext())
     {
         if (firstNotEmpty != pos)
         {
             ResetableIterator empty = arr[pos];
             Array.Copy(arr, firstNotEmpty, arr, firstNotEmpty + 1, pos - firstNotEmpty);
             arr[firstNotEmpty] = empty;
         }
         firstNotEmpty++;
         return(false);
     }
     return(true);
 }
Example #7
0
 string Dump(ResetableIterator it)
 {
     it = (ResetableIterator)it.Clone();
     System.Text.StringBuilder sb = new System.Text.StringBuilder();
     sb.Append('(');
     do
     {
         XPathNavigator nav = it.Current.Clone();
         nav.MoveToAttribute("id1", "");
         sb.Append(nav.Value);
         sb.Append(", ");
     } while (it.MoveNext());
     sb.Length = sb.Length - 2;
     sb.Append(')');
     return(sb.ToString());
 }
        protected object ProcessResult(object value)
        {
            if (value is string)
            {
                return(value);
            }
            if (value is double)
            {
                return(value);
            }
            if (value is bool)
            {
                return(value);
            }
            if (value is XPathNavigator)
            {
                return(value);
            }
            if (value is int)
            {
                return((double)((int)value));
            }
            if (value == null)
            {
                this.queryIterator = XPathEmptyIterator.Instance;
                return(this);
            }
            ResetableIterator iterator = value as ResetableIterator;

            if (iterator != null)
            {
                this.queryIterator = (ResetableIterator)iterator.Clone();
                return(this);
            }
            XPathNodeIterator nodeIterator = value as XPathNodeIterator;

            if (nodeIterator != null)
            {
                this.queryIterator = new XPathArrayIterator(nodeIterator);
                return(this);
            }
            IXPathNavigable navigable = value as IXPathNavigable;

            if (navigable != null)
            {
                return(navigable.CreateNavigator());
            }
            if (value is short)
            {
                return((double)((short)value));
            }
            if (value is long)
            {
                return((double)((long)value));
            }
            if (value is uint)
            {
                return((double)((uint)value));
            }
            if (value is ushort)
            {
                return((double)((ushort)value));
            }
            if (value is ulong)
            {
                return((double)((ulong)value));
            }
            if (value is float)
            {
                return((double)((float)value));
            }
            if (value is decimal)
            {
                return((double)((decimal)value));
            }
            return(value.ToString());
        }
Example #9
0
        protected object ProcessResult(object value)
        {
            if (value is string)
            {
                return(value);
            }
            if (value is double)
            {
                return(value);
            }
            if (value is bool)
            {
                return(value);
            }
            if (value is XPathNavigator)
            {
                return(value);
            }
            if (value is Int32)
            {
                return((double)(Int32)value);
            }

            if (value == null)
            {
                queryIterator = XPathEmptyIterator.Instance;
                return(this); // We map null to NodeSet to let $null/foo work well.
            }

            ResetableIterator resetable = value as ResetableIterator;

            if (resetable != null)
            {
                // We need Clone() value because variable may be used several times
                // and they shouldn't
                queryIterator = (ResetableIterator)resetable.Clone();
                return(this);
            }
            XPathNodeIterator nodeIterator = value as XPathNodeIterator;

            if (nodeIterator != null)
            {
                queryIterator = new XPathArrayIterator(nodeIterator);
                return(this);
            }
            IXPathNavigable navigable = value as IXPathNavigable;

            if (navigable != null)
            {
                return(navigable.CreateNavigator());
            }

            if (value is Int16)
            {
                return((double)(Int16)value);
            }
            if (value is Int64)
            {
                return((double)(Int64)value);
            }
            if (value is UInt32)
            {
                return((double)(UInt32)value);
            }
            if (value is UInt16)
            {
                return((double)(UInt16)value);
            }
            if (value is UInt64)
            {
                return((double)(UInt64)value);
            }
            if (value is Single)
            {
                return((double)(Single)value);
            }
            if (value is Decimal)
            {
                return((double)(Decimal)value);
            }
            return(value.ToString());
        }
Example #10
0
 protected ResetableIterator(ResetableIterator other)
 {
     base.count = other.count;
 }
Example #11
0
 protected XmlIteratorQuery(XmlIteratorQuery other) : base(other)
 {
     this.it = (ResetableIterator)other.it.Clone();
 }
Example #12
0
        protected object ProcessResult(object value)
        {
            if (value is string)
            {
                return(value);
            }
            if (value is double)
            {
                return(value);
            }
            if (value is bool)
            {
                return(value);
            }
            if (value is XPathNavigator)
            {
                return(value);
            }
            if (value is int)
            {
                return((double)(int)value);
            }

            if (value == null)
            {
                _queryIterator = XPathEmptyIterator.Instance;
                return(this); // We map null to NodeSet to let $null/foo work well.
            }

            ResetableIterator resetable = value as ResetableIterator;

            if (resetable != null)
            {
                // We need Clone() value because variable may be used several times
                // and they shouldn't
                _queryIterator = (ResetableIterator)resetable.Clone();
                return(this);
            }
            XPathNodeIterator nodeIterator = value as XPathNodeIterator;

            if (nodeIterator != null)
            {
                _queryIterator = new XPathArrayIterator(nodeIterator);
                return(this);
            }
            IXPathNavigable navigable = value as IXPathNavigable;

            if (navigable != null)
            {
                return(navigable.CreateNavigator());
            }

            if (value is short)
            {
                return((double)(short)value);
            }
            if (value is long)
            {
                return((double)(long)value);
            }
            if (value is uint)
            {
                return((double)(uint)value);
            }
            if (value is ushort)
            {
                return((double)(ushort)value);
            }
            if (value is ulong)
            {
                return((double)(ulong)value);
            }
            if (value is float)
            {
                return((double)(float)value);
            }
            if (value is decimal)
            {
                return((double)(decimal)value);
            }
            return(value.ToString());
        }