/// <summary> /// /// </summary> /// <param name="vn"></param> /// <returns></returns> public override double evalNumber(VTDNav vn) { double d = Double.NaN; int a = 0x7fffffff, k = -1; vn.push2(); int size = vn.contextStack2.size; try { while ((k = evalNodeSet(vn)) != -1) { //a = evalNodeSet(vn); if (k < a) a = k; } if (a == 0x7fffffff) a = -1; if (a != -1) { int t = vn.getTokenType(a); if (t == VTDNav.TOKEN_ATTR_NAME) { d = vn.parseDouble(a + 1); } else if (t == VTDNav.TOKEN_STARTING_TAG || t == VTDNav.TOKEN_DOCUMENT) { d = vn.XPathStringVal2Double(a);//Double.parseDouble(s); } else if (t == VTDNav.TOKEN_PI_NAME) { if (a + 1 < vn.vtdSize || vn.getTokenType(a + 1) == VTDNav.TOKEN_PI_VAL) //s = vn.toString(a+1); d = vn.parseDouble(a + 1); else d = Double.NaN; } else d = vn.parseDouble(a); } } catch (Exception e) { } vn.contextStack2.size = size; reset(vn); vn.pop2(); //return s; return d; }
private bool compareVNumber2(int k, VTDNav vn, double d, int op) { double d1; int t = vn.getTokenType(k); if (t == VTDNav.TOKEN_STARTING_TAG || t == VTDNav.TOKEN_DOCUMENT) { d1 = vn.XPathStringVal2Double(k); } else { k = getStringVal(vn, k); d1 = vn.parseDouble(k); } switch (op) { case EQ: return d1 == d; case NE: return d1 != d; case GE: return d1 >= d; case LE: return d1 <= d; case GT: return d1 > d; default: return d1 < d; } }