Example #1
0
        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);
                }
            }
        }
Example #2
0
        /**
         * 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);
            }
        }
Example #3
0
        /// <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);
        }
Example #4
0
        /// <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);
            }
        }
Example #5
0
        /// <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;
            }
        }
Example #6
0
        /// <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);
            }
        }
Example #7
0
        /// <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;
            }
        }