public override object Execute(IContextProvider provider, object[] dataPool) { bool orderedSet = _isOrderedSet; bool special = provider != null && provider.Context.GetType().Name == "XPathDocumentNavigator"; XPath2NodeIterator tail; if (_path[0].type == XPath2ExprType.Expr) { tail = XPath2NodeIterator.Create(_path[0].node.Execute(provider, dataPool)); if (!(_path[0].node is OrderedBinaryOperatorNode)) { orderedSet = orderedSet & tail.IsSingleIterator; } } else { tail = _path[0].Create(Context, dataPool, XPath2NodeIterator.Create(CoreFuncs.ContextNode(provider)), special); } for (int k = 1; k < _path.Length; k++) { tail = _path[k].Create(Context, dataPool, tail, special); } if (!orderedSet) { return(new DocumentOrderNodeIterator(tail)); } return(tail); }
public override object Execute(IContextProvider provider, object[] dataPool) { XPath2NodeIterator iter = XPath2NodeIterator.Create(this[0].Execute(provider, dataPool)); for (int k = 1; k < Count; k++) { iter = new NodeIterator(CreateEnumerator(dataPool, this[k], iter)); } return(iter); }
protected override XPathItem NextItem() { while (true) { if (iter == null) { if (!baseIter.MoveNext()) { return(null); } sequentialPosition = 0; iter = XPath2NodeIterator.Create(node.Execute(new NodeProvider(baseIter.Current), dataPool)); } if (iter.MoveNext()) { sequentialPosition++; return(iter.Current); } iter = null; } }
public override object Execute(IContextProvider provider, object[] dataPool) { return(new ForIterator(this, provider, dataPool, XPath2NodeIterator.Create(this[0].Execute(provider, dataPool)))); }