// 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); }
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); }
// 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); }
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()); }
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()); }
protected ResetableIterator(ResetableIterator other) { base.count = other.count; }
protected XmlIteratorQuery(XmlIteratorQuery other) : base(other) { this.it = (ResetableIterator)other.it.Clone(); }
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()); }