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); } } }
/** * This is for debugging purpose * * @param fib */ public override void sampleState(FastIntBuffer fib) { // for(int i=0;i<context.) // context[i] = -1; // fib.append(context); if (context[0] >= 1) fib.append(l1index); else return; if (context[0] >= 2) { fib.append(l2index); fib.append(l2lower); fib.append(l2upper); } else return; if (context[0] >= 3) { fib.append(l3index); fib.append(l3lower); fib.append(l3upper); } else return; if (context[0] >= 4) { fib.append(l4index); fib.append(l4lower); fib.append(l4upper); } else return; if (context[0] >= 5) { fib.append(l5index); fib.append(l5lower); fib.append(l5upper); } }
/// <summary> /// /// </summary> /// <returns></returns> public ElementFragmentNs getElementFragmentNs() { if (this.ns == false) throw new NavException("getElementFragmentNS can only be called "); FastIntBuffer fib = new FastIntBuffer(3); // init size 8 //fill the fib with integer // first get the list of name space nodes int[] ia = context; int d = ia[0]; // -1 for document node, 0 for root element; int c = getCurrentIndex2(); int len = (c == 0 || c == rootIndex) ? 0 : (getTokenLength(c) & 0xffff); // get the length of qualified node // put the neighboring ATTR_NS nodes into the array // and record the total # of them int i = 0; int count = 0; if (d > 0) { // depth > 0 every node except document and root element int k = getCurrentIndex2() + 1; if (k < this.vtdSize) { while (k < this.vtdSize) { int type = this.getTokenType(k); if (type == VTDNav.TOKEN_ATTR_NAME || type == VTDNav.TOKEN_ATTR_NS) { if (type == VTDNav.TOKEN_ATTR_NS) { fib.append(k); //System.out.println(" ns name ==>" + toString(k)); } k += 2; } else break; //type = this.getTokenType(k); } } count = fib.size_Renamed_Field; d--; while (d >= 0) { // then search for ns node in the vinicity of the ancestor nodes if (d > 0) { // starting point k = ia[d] + 1; } else { // starting point k = this.rootIndex + 1; } if (k < this.vtdSize) { while (k < this.vtdSize) { int type = this.getTokenType(k); if (type == VTDNav.TOKEN_ATTR_NAME || type == VTDNav.TOKEN_ATTR_NS) { bool unique = true; if (type == VTDNav.TOKEN_ATTR_NS) { for (int z = 0; z < fib.size_Renamed_Field; z++) { //System.out.println("fib size ==> "+fib.size_Renamed_Field); //if (fib.size_Renamed_Field == 4) ; if (matchTokens(fib.intAt(z), this, k)) { unique = false; break; } } if (unique) fib.append(k); } } k += 2; //type = this.getTokenType(k); } } d--; } // System.out.println("count ===> "+count); // then restore the name space node by shifting the array int newSz = fib.size_Renamed_Field - count; for (i = 0; i < newSz; i++) { fib.modifyEntry(i, fib.intAt(i + count)); } fib.size_Renamed_Field = newSz; } long l = getElementFragment(); return new ElementFragmentNs(this, l, fib, len); }
/// <summary> This is for debugging purpose</summary> /// <param name="fib"> /// </param> public virtual void sampleState(FastIntBuffer fib) { // for(int i=0;i<context.) // context[i] = -1; // fib.append(context); for (int i = 0; i <= context[0]; i++) fib.append(context[i]); if (atTerminal) fib.append(LN); if (context[0] >= 1) fib.append(l1index); if (context[0] >= 2) { fib.append(l2index); fib.append(l2lower); fib.append(l2upper); } if (context[0] >= 3) { fib.append(l3index); fib.append(l3lower); fib.append(l3upper); } }
/// <summary> /// This function records the position of VN into an internal buffer /// </summary> public void record() { //add the context and int i; switch (vn.context[0]) { case -1: unchecked { fib.append((int)(0xff | 0x80000000)); } size++; position++; count++; break; case 0: if (vn.atTerminal == false) { fib.append(0); count++; } else { unchecked { fib.append((int)0x80000000); } count += 2; } size++; position++; if (vn.atTerminal == true) { fib.append(vn.LN); } break; case 1: if (vn.atTerminal == false) { fib.append(1); fib.append(vn.context[1]); fib.append(vn.l1index); size++; position++; count += 3; } else { unchecked { fib.append((int)0x80000001); } fib.append(vn.context[1]); fib.append(vn.l1index); fib.append(vn.LN); size++; position++; count += 4; } break; case 2: if (vn.atTerminal == false) { fib.append(2); count += 7; } else { unchecked { fib.append((int)0x80000002); } count += 8; } fib.append(vn.context[1]); fib.append(vn.context[2]); fib.append(vn.l1index); fib.append(vn.l2lower); fib.append(vn.l2upper); fib.append(vn.l2index); size++; position++; if (vn.atTerminal == true) { fib.append(vn.LN); } break; case 3: if (vn.atTerminal == false) { fib.append(3); count += 11; } else { unchecked { fib.append((int)0x80000003); } count += 12; } fib.append(vn.context[1]); fib.append(vn.context[2]); fib.append(vn.context[3]); fib.append(vn.l1index); fib.append(vn.l2lower); fib.append(vn.l2upper); fib.append(vn.l2index); fib.append(vn.l3lower); fib.append(vn.l3upper); fib.append(vn.l3index); size++; position++; if (vn.atTerminal == true) { fib.append(vn.LN); } break; default: if (vn.shallowDepth) { if (vn.atTerminal == false) { i = vn.context[0]; fib.append(i); count += i + 8; } else { i = vn.context[0]; unchecked { fib.append((int)(i | 0x80000000)); } count += i + 9; } for (int k = 1; k <= i; k++) { fib.append(vn.context[k]); } fib.append(vn.l1index); fib.append(vn.l2lower); fib.append(vn.l2upper); fib.append(vn.l2index); fib.append(vn.l3lower); fib.append(vn.l3upper); fib.append(vn.l3index); size++; position++; if (vn.atTerminal) { fib.append(vn.LN); } } else { VTDNav_L5 vnl = (VTDNav_L5)vn; switch (vn.context[0]) { case 4: if (vn.atTerminal == false) { fib.append(4); count += 15; } else { unchecked { fib.append((int)0x80000004); } count += 16; } fib.append(vn.context[1]); fib.append(vn.context[2]); fib.append(vn.context[3]); fib.append(vn.context[4]); fib.append(vn.l1index); fib.append(vn.l2lower); fib.append(vn.l2upper); fib.append(vn.l2index); fib.append(vn.l3lower); fib.append(vn.l3upper); fib.append(vn.l3index); fib.append(vnl.l4lower); fib.append(vnl.l4upper); fib.append(vnl.l4index); size++; position++; if (vn.atTerminal == true) { fib.append(vn.LN); } break; case 5: if (vn.atTerminal == false) { fib.append(5); count += 19; } else { unchecked { fib.append((int)0x80000005); } count += 20; } fib.append(vn.context[1]); fib.append(vn.context[2]); fib.append(vn.context[3]); fib.append(vn.context[4]); fib.append(vn.context[5]); fib.append(vn.l1index); fib.append(vn.l2lower); fib.append(vn.l2upper); fib.append(vn.l2index); fib.append(vn.l3lower); fib.append(vn.l3upper); fib.append(vn.l3index); fib.append(vnl.l4lower); fib.append(vnl.l4upper); fib.append(vnl.l4index); fib.append(vnl.l5lower); fib.append(vnl.l5upper); fib.append(vnl.l5index); size++; position++; if (vn.atTerminal == true) { fib.append(vn.LN); } break; default: if (vn.atTerminal == false) { i = vn.context[0]; fib.append(i); count += i + 14; } else { i = vn.context[0]; fib.append((int)(i | 0x80000000)); count += i + 15; } for (int k = 1; k <= i; k++) { fib.append(vn.context[k]); } fib.append(vn.l1index); fib.append(vn.l2lower); fib.append(vn.l2upper); fib.append(vn.l2index); fib.append(vn.l3lower); fib.append(vn.l3upper); fib.append(vn.l3index); fib.append(vnl.l4lower); fib.append(vnl.l4upper); fib.append(vnl.l4index); fib.append(vnl.l5lower); fib.append(vnl.l5upper); fib.append(vnl.l5index); size++; position++; if (vn.atTerminal) { fib.append(vn.LN); } break; } } break; } }
/// <summary> This is for debugging purpose</summary> /// <param name="fib"> /// </param> public void sampleState(FastIntBuffer fib) { // for(int i=0;i<context.) // context[i] = -1; // fib.append(context); if (context[0] >= 1) fib.append(l1index); if (context[0] >= 2) { fib.append(l2index); fib.append(l2lower); fib.append(l2upper); } if (context[0] >= 3) { fib.append(l3index); fib.append(l3lower); fib.append(l3upper); } }
/// <summary> /// This function records the position of VN into an internal buffer /// </summary> public void record() { //add the context and int i; switch (vn.context[0]) { case -1: unchecked { fib.append((int)(0xff | 0x80000000)); } size++; position++; count++; break; case 0: if (vn.atTerminal == false) { fib.append(0); count++; } else { unchecked { fib.append((int)0x80000000); } count += 2; } size++; position++; if (vn.atTerminal == true) { fib.append(vn.LN); } break; case 1: if (vn.atTerminal == false) { fib.append(1); fib.append(vn.context[1]); fib.append(vn.l1index); size++; position++; count += 3; } else { unchecked { fib.append((int)(0x80000001)); } fib.append(vn.context[1]); fib.append(vn.l1index); fib.append(vn.LN); size++; position++; count += 4; } break; case 2: if (vn.atTerminal == false) { fib.append(2); count += 7; } else { unchecked { fib.append((int)0x80000002); } count += 8; } fib.append(vn.context[1]); fib.append(vn.context[2]); fib.append(vn.l1index); fib.append(vn.l2lower); fib.append(vn.l2upper); fib.append(vn.l2index); size++; position++; if (vn.atTerminal == true) { fib.append(vn.LN); } break; case 3: if (vn.atTerminal == false) { fib.append(3); count += 11; } else { unchecked { fib.append((int)(0x80000003)); } count += 12; } fib.append(vn.context[1]); fib.append(vn.context[2]); fib.append(vn.context[3]); fib.append(vn.l1index); fib.append(vn.l2lower); fib.append(vn.l2upper); fib.append(vn.l2index); fib.append(vn.l3lower); fib.append(vn.l3upper); fib.append(vn.l3index); size++; position++; if (vn.atTerminal == true) { fib.append(vn.LN); } break; default: if (vn.atTerminal == false) { i = vn.context[0]; fib.append(i); count += i + 8; } else { i = vn.context[0]; unchecked { fib.append((int)(i | 0x80000000)); } count += i + 9; } for (int k = 1; k <= i; k++) { fib.append(vn.context[k]); } fib.append(vn.l1index); fib.append(vn.l2lower); fib.append(vn.l2upper); fib.append(vn.l2index); fib.append(vn.l3lower); fib.append(vn.l3upper); fib.append(vn.l3index); size++; position++; if (vn.atTerminal) { fib.append(vn.LN); } break; } }