/// <summary> This method returns the next node in the nodeset /// it returns -1 if there is no more node /// Afer finishing evaluating, don't forget to <em> reset the xpath </em> /// </summary> /// <returns> int corresponding to the VTD index /// </returns> public int evalXPath() { if (xpe != null) { if (ft == true) { if (vn != null) { stackSize = vn.contextStack2.size; } ft = false; xpe.adjust(vn.getTokenCount()); } return(xpe.evalNodeSet(vn)); } throw new PilotException(" Null XPath expression "); }
public override int evalNodeSet(VTDNav vn) { // TODO Auto-generated method stub int i = -1; if (cached) { if (count < ens.size_Renamed_Field) { i = ens.intAt(count); vn.recoverNode(i); count++; return(i); } else { return(-1); } } else { cached = true; if (ens == null) { ens = new FastIntBuffer(8);//page size 64 } //record node set while ((i = e.evalNodeSet(vn)) != -1) { ens.append(i); } e.reset(vn); if (ens.size_Renamed_Field > 0) { i = ens.intAt(count);//count should be zero vn.recoverNode(i); count++; return(i); } else { return(-1); } } }
/* * (non-Javadoc) * * @see com.ximpleware.xpath.Expr#evalNodeSet(com.ximpleware.VTDNav) */ public override int evalNodeSet(VTDNav vn) { int a; if (this.next == null) { return(e.evalNodeSet(vn)); } else { while (true) { switch (state) { case 0: if (ih == null) { ih = new intHash(); } if (current != null) { vn.push2(); while ((a = current.e.evalNodeSet(vn)) != -1) { if (isUnique(a)) { state = 1; return(a); } } state = 2; vn.pop2(); break; } else { state = 3; } break; case 1: while ((a = current.e.evalNodeSet(vn)) != -1) { if (isUnique(a)) { state = 1; return(a); } } state = 2; vn.pop2(); break; case 2: current = current.next; if (current != null) { vn.push2(); while ((a = current.e.evalNodeSet(vn)) != -1) { if (isUnique(a)) { state = 1; return(a); } } vn.pop2(); break; } else { state = 3; } break; case 3: return(-1); default: throw new XPathEvalException("Invalid state evaluating PathExpr"); } } } /* * default: throw new XPathEvalException( "Invalid state evaluating * PathExpr"); */ }