Example #1
0
        private bool compNodeSetNodeSet(Expr left, Expr right, VTDNav vn, int op)
        {
            int i, i1 = 0, stackSize, s1;

            try
            {
                if (fib1 == null)
                {
                    fib1 = new FastIntBuffer(BUF_SZ_EXP);
                }
                vn.push2();
                stackSize = vn.contextStack2.size;
                while ((i = left.evalNodeSet(vn)) != -1)
                {
                    i1 = getStringVal(vn, i);
                    if (i1 != -1)
                    {
                        fib1.append(i1);
                    }
                }
                left.reset(vn);
                vn.contextStack2.size = stackSize;
                vn.pop2();
                vn.push2();
                stackSize = vn.contextStack2.size;
                while ((i = right.evalNodeSet(vn)) != -1)
                {
                    i1 = getStringVal(vn, i);
                    if (i1 != -1)
                    {
                        s1 = fib1.size();
                        for (int k = 0; k < s1; k++)
                        {
                            bool b = compareVV(fib1.intAt(k), vn, i1, op);
                            if (b)
                            {
                                fib1.clear();
                                vn.contextStack2.size = stackSize;
                                vn.pop2();
                                right.reset(vn);
                                return(true);
                            }
                        }
                    }
                }
                vn.contextStack2.size = stackSize;
                vn.pop2();
                right.reset(vn);
                fib1.clear();
                return(false);
            }
            catch (Exception e)
            {
                fib1.clear();
                throw new System.SystemException("Undefined behavior");
            }
        }
Example #2
0
        /// <summary>
        ///
        ///  This method set the cursor in VTDNav to the nodes as recorded
        ///  in NodeRecorder, and return the output of "getCurrentIndex()"
        ///  It is important to notice that you can only go forward, not
        ///  backward
        ///
        /// </summary>
        /// <returns> @return int</returns>
        public int iterate()
        {
            int j, i;

            if (count < fib.size())
            {
                i = fib.intAt(count);
                bool b = (i >= 0);
                if (b == false)
                {
                    i = i & 0x7fffffff;
                }
                switch (i)
                {
                case 0xff:
                    vn.context[0] = -1;
                    vn.atTerminal = false;
                    count++;
                    break;

                case 0:
                    vn.context[0] = 0;
                    if (b == false)
                    {
                        vn.atTerminal = true;
                        vn.LN         = fib.intAt(count + 1);
                        count        += 2;
                    }
                    else
                    {
                        vn.atTerminal = false;
                        count++;
                    }

                    break;

                case 1:
                    vn.context[0] = 1;
                    vn.context[1] = fib.intAt(count + 1);
                    vn.l1index    = fib.intAt(count + 2);
                    if (b == false)
                    {
                        vn.atTerminal = true;
                        vn.LN         = fib.intAt(count + 3);
                        count        += 4;
                    }
                    else
                    {
                        vn.atTerminal = false;
                        count        += 3;
                    }

                    break;

                case 2:
                    vn.context[0] = 2;
                    vn.context[1] = fib.intAt(count + 1);
                    vn.context[2] = fib.intAt(count + 2);
                    vn.l1index    = fib.intAt(count + 3);
                    vn.l2lower    = fib.intAt(count + 4);
                    vn.l2upper    = fib.intAt(count + 5);
                    vn.l2index    = fib.intAt(count + 6);
                    if (b == false)
                    {
                        vn.atTerminal = true;
                        vn.LN         = fib.intAt(count + 7);
                        count        += 8;
                    }
                    else
                    {
                        vn.atTerminal = false;
                        count        += 7;
                    }

                    break;

                case 3:
                    vn.context[0] = 3;
                    vn.context[1] = fib.intAt(count + 1);
                    vn.context[2] = fib.intAt(count + 2);
                    vn.context[3] = fib.intAt(count + 3);
                    vn.l1index    = fib.intAt(count + 4);
                    vn.l2lower    = fib.intAt(count + 5);
                    vn.l2upper    = fib.intAt(count + 6);
                    vn.l2index    = fib.intAt(count + 7);
                    vn.l3lower    = fib.intAt(count + 8);
                    vn.l3upper    = fib.intAt(count + 9);
                    vn.l3index    = fib.intAt(count + 10);
                    if (b == false)
                    {
                        vn.atTerminal = true;
                        vn.LN         = fib.intAt(count + 11);
                        count        += 12;
                    }
                    else
                    {
                        vn.atTerminal = false;
                        count        += 11;
                    }

                    break;

                default:
                    vn.context[0] = i;
                    for (j = 1; j < i; j++)
                    {
                        vn.context[j] = fib.intAt(count + j);
                    }
                    vn.l1index = fib.intAt(count + i);
                    vn.l2lower = fib.intAt(count + i + 1);
                    vn.l2upper = fib.intAt(count + i + 2);
                    vn.l2index = fib.intAt(count + i + 3);
                    vn.l3lower = fib.intAt(count + i + 4);
                    vn.l3upper = fib.intAt(count + i + 5);
                    vn.l3index = fib.intAt(count + i + 6);
                    if (b == false)
                    {
                        vn.atTerminal = true;
                        vn.LN         = fib.intAt(count + 11);
                        count        += i + 8;
                    }
                    else
                    {
                        vn.atTerminal = false;
                        count        += i + 7;
                    }
                    break;
                }
                position++;
                return(vn.getCurrentIndex());
            }
            return(-1);
        }