Item::Iterator::Ptr AxisStep::evaluateSequence(const DynamicContext::Ptr &context) const { /* If we don't have a focus, it's either a bug or our parent isn't a Path * that have advanced the focus iterator. Hence, attempt to advance the focus on our own. */ if(!context->contextItem()) context->focusIterator()->next(); Q_ASSERT(context->contextItem()); const QXmlNodeModelIndex::Iterator::Ptr source(context->contextItem().asNode().iterate(m_axis)); return makeItemMappingIterator<Item>(ConstPtr(this), source, context); }
Item AxisStep::evaluateSingleton(const DynamicContext::Ptr &context) const { /* If we don't have a focus, it's either a bug or our parent isn't a Path * that have advanced the focus iterator. Hence, attempt to advance the focus on our own. */ if(!context->contextItem()) context->focusIterator()->next(); Q_ASSERT(context->contextItem()); const QXmlNodeModelIndex::Iterator::Ptr it(context->contextItem().asNode().iterate(m_axis)); QXmlNodeModelIndex next(it->next()); while(!next.isNull()) { const Item candidate(mapToItem(next, context)); if(candidate) return candidate; else next = it->next(); }; return Item(); }