private int JjMoveNfa_2()

in src/Lucene.Net.QueryParser/Classic/QueryParserTokenManager.cs [110:722]


        private int JjMoveNfa_2(int startState, int curPos)
        {
            int startsAt = 0;
            jjnewStateCnt = 49;
            int i = 1;
            jjstateSet[0] = startState;
            int kind = 0x7fffffff;
            for (; ; )
            {
                if (++jjround == 0x7fffffff)
                    ReInitRounds();
                if (m_curChar < 64)
                {
                    ulong l = (ulong) (1L << (int) m_curChar);
                    do
                    {
                        switch (jjstateSet[--i])
                        {

                            case 49:
                            case 33:
                                if ((0xfbff7cf8ffffd9ffL & l) == (ulong)0L)
                                    break;
                                if (kind > 23)
                                    kind = 23;
                                JjCheckNAddTwoStates(33, 34);
                                break;

                            case 0:
                                if ((0xfbff54f8ffffd9ffL & l) != (ulong)0L)
                                {
                                    if (kind > 23)
                                        kind = 23;
                                    JjCheckNAddTwoStates(33, 34);
                                }
                                else if ((0x100002600L & l) != 0L)
                                {
                                    if (kind > 7)
                                        kind = 7;
                                }
                                else if ((0x280200000000L & l) != 0L)
                                    jjstateSet[jjnewStateCnt++] = 15;
                                else if (m_curChar == 47)
                                    JjCheckNAddStates(0, 2);
                                else if (m_curChar == 34)
                                    JjCheckNAddStates(3, 5);
                                if ((0x7bff50f8ffffd9ffL & l) != 0L)
                                {
                                    if (kind > 20)
                                        kind = 20;
                                    JjCheckNAddStates(6, 10);
                                }
                                else if (m_curChar == 42)
                                {
                                    if (kind > 22)
                                        kind = 22;
                                }
                                else if (m_curChar == 33)
                                {
                                    if (kind > 10)
                                        kind = 10;
                                }
                                if (m_curChar == 38)
                                    jjstateSet[jjnewStateCnt++] = 4;
                                break;

                            case 4:
                                if (m_curChar == 38 && kind > 8)
                                    kind = 8;
                                break;

                            case 5:
                                if (m_curChar == 38)
                                    jjstateSet[jjnewStateCnt++] = 4;
                                break;

                            case 13:
                                if (m_curChar == 33 && kind > 10)
                                    kind = 10;
                                break;

                            case 14:
                                if ((0x280200000000L & l) != 0L)
                                    jjstateSet[jjnewStateCnt++] = 15;
                                break;
                            case 15:
                                if ((0x100002600L & l) != 0L && kind > 13)
                                    kind = 13;
                                break;
                            case 16:
                                if (m_curChar == 34)
                                    JjCheckNAddStates(3, 5);
                                break;
                            case 17:
                                if ((0xfffffffbffffffffL & l) != (ulong) 0L)
                                    JjCheckNAddStates(3, 5);
                                break;

                            case 19:
                                JjCheckNAddStates(3, 5);
                                break;

                            case 20:
                                if (m_curChar == 34 && kind > 19)
                                    kind = 19;
                                break;

                            case 22:
                                if ((0x3ff000000000000L & l) == 0L)
                                    break;
                                if (kind > 21)
                                    kind = 21;
                                JjCheckNAddStates(11, 14);
                                break;

                            case 23:
                                if (m_curChar == 46)
                                    JjCheckNAdd(24);
                                break;

                            case 24:
                                if ((0x3ff000000000000L & l) == 0L)
                                    break;
                                if (kind > 21)
                                    kind = 21;
                                JjCheckNAddStates(15, 17);
                                break;

                            case 25:
                                if ((0x7bff78f8ffffd9ffL & l) == (ulong)0L)
                                    break;
                                if (kind > 21)
                                    kind = 21;
                                JjCheckNAddTwoStates(25, 26);
                                break;

                            case 27:
                                if (kind > 21)
                                    kind = 21;
                                JjCheckNAddTwoStates(25, 26);
                                break;

                            case 28:
                                if ((0x7bff78f8ffffd9ffL & l) == 0L)
                                    break;
                                if (kind > 21)
                                    kind = 21;
                                JjCheckNAddTwoStates(28, 29);
                                break;

                            case 30:
                                if (kind > 21)
                                    kind = 21;
                                JjCheckNAddTwoStates(28, 29);
                                break;

                            case 31:
                                if (m_curChar == 42 && kind > 22)
                                    kind = 22;
                                break;

                            case 32:
                                if ((0xfbff54f8ffffd9ffL & l) == (ulong)0L)
                                    break;
                                if (kind > 23)
                                    kind = 23;
                                JjCheckNAddTwoStates(33, 34);
                                break;
                            case 35:
                                if (kind > 23)
                                    kind = 23;
                                JjCheckNAddTwoStates(33, 34);
                                break;
                            case 36:
                            case 38:
                                if (m_curChar == 47)
                                    JjCheckNAddStates(0, 2);
                                break;
                            case 37:
                                if ((0xffff7fffffffffffL & l) != (ulong)0L)
                                    JjCheckNAddStates(0, 2);
                                break;
                            case 40:
                                if (m_curChar == 47 && kind > 24)
                                    kind = 24;
                                break;
                            case 41:
                                if ((0x7bff50f8ffffd9ffL & l) == 0L)
                                    break;
                                if (kind > 20)
                                    kind = 20;
                                JjCheckNAddStates(6, 10);
                                break;
                            case 42:
                                if ((0x7bff78f8ffffd9ffL & l) == 0L)
                                    break;
                                if (kind > 20)
                                    kind = 20;
                                JjCheckNAddTwoStates(42, 43);
                                break;
                            case 44:
                                if (kind > 20)
                                    kind = 20;
                                JjCheckNAddTwoStates(42, 43);
                                break;
                            case 45:
                                if ((0x7bff78f8ffffd9ffL & l) != 0L)
                                    JjCheckNAddStates(18, 20);
                                break;
                            case 47:
                                JjCheckNAddStates(18, 20);
                                break;

                            default:  break;

                        }
                    }
                    while (i != startsAt);
                }
                else if (m_curChar < 128)
                {
                    // NOTE: This didn't change in Java from 3.0.1 to 4.8.0, but it is different in .NET.
                    // But changing it back made more tests pass, so I am working under the assumption 63
                    // is the correct value.
                    //ulong l = (ulong)(1L << (curChar & 077));
                    ulong l = (ulong) (1L << (m_curChar & 63));
                    do
                    {
                        switch (jjstateSet[--i])
                        {

                            case 49:
                                if ((0x97ffffff87ffffffL & l) != (ulong) 0L)
                                {
                                    if (kind > 23)
                                        kind = 23;
                                    JjCheckNAddTwoStates(33, 34);
                                }
                                else if (m_curChar == 92)
                                    JjCheckNAddTwoStates(35, 35);
                                break;

                            case 0:
                                if ((0x97ffffff87ffffffL & l) != (ulong) 0L)
                                {
                                    if (kind > 20)
                                        kind = 20;
                                    JjCheckNAddStates(6, 10);
                                }
                                else if (m_curChar == 92)
                                    JjCheckNAddStates(21, 23);
                                else if (m_curChar == 126)
                                {
                                    if (kind > 21)
                                        kind = 21;
                                    JjCheckNAddStates(24, 26);
                                }
                                if ((0x97ffffff87ffffffL & l) != (ulong) 0L)
                                {
                                    if (kind > 23)
                                        kind = 23;
                                    JjCheckNAddTwoStates(33, 34);
                                }
                                if (m_curChar == 78)
                                    jjstateSet[jjnewStateCnt++] = 11;
                                else if (m_curChar == 124)
                                    jjstateSet[jjnewStateCnt++] = 8;
                                else if (m_curChar == 79)
                                    jjstateSet[jjnewStateCnt++] = 6;
                                else if (m_curChar == 65)
                                    jjstateSet[jjnewStateCnt++] = 2;
                                break;

                            case 1:
                                if (m_curChar == 68 && kind > 8)
                                    kind = 8;
                                break;

                            case 2:
                                if (m_curChar == 78)
                                    jjstateSet[jjnewStateCnt++] = 1;
                                break;

                            case 3:
                                if (m_curChar == 65)
                                    jjstateSet[jjnewStateCnt++] = 2;
                                break;

                            case 6:
                                if (m_curChar == 82 && kind > 9)
                                    kind = 9;
                                break;

                            case 7:
                                if (m_curChar == 79)
                                    jjstateSet[jjnewStateCnt++] = 6;
                                break;

                            case 8:
                                if (m_curChar == 124 && kind > 9)
                                    kind = 9;
                                break;

                            case 9:
                                if (m_curChar == 124)
                                    jjstateSet[jjnewStateCnt++] = 8;
                                break;

                            case 10:
                                if (m_curChar == 84 && kind > 10)
                                    kind = 10;
                                break;

                            case 11:
                                if (m_curChar == 79)
                                    jjstateSet[jjnewStateCnt++] = 10;
                                break;

                            case 12:
                                if (m_curChar == 78)
                                    jjstateSet[jjnewStateCnt++] = 11;
                                break;

                            case 17:
                                if ((0xffffffffefffffffL & l) != (ulong) 0L)
                                    JjCheckNAddStates(3, 5);
                                break;

                            case 18:
                                if (m_curChar == 92)
                                    jjstateSet[jjnewStateCnt++] = 19;
                                break;

                            case 19:
                                JjCheckNAddStates(3, 5);
                                break;

                            case 21:
                                if (m_curChar != 126)
                                    break;
                                if (kind > 21)
                                    kind = 21;
                                JjCheckNAddStates(24, 26);
                                break;

                            case 25:
                                if ((0x97ffffff87ffffffL & l) == (ulong) 0L)
                                    break;
                                if (kind > 21)
                                    kind = 21;
                                JjCheckNAddTwoStates(25, 26);
                                break;

                            case 26:
                                if (m_curChar == 92)
                                    JjAddStates(27, 28);
                                break;

                            case 27:
                                if (kind > 21)
                                    kind = 21;
                                JjCheckNAddTwoStates(25, 26);
                                break;

                            case 28:
                                if ((0x97ffffff87ffffffL & l) == (ulong) 0L)
                                    break;
                                if (kind > 21)
                                    kind = 21;
                                JjCheckNAddTwoStates(28, 29);
                                break;

                            case 29:
                                if (m_curChar == 92)
                                    JjAddStates(29, 30);
                                break;
                            case 30:
                                if (kind > 21)
                                    kind = 21;
                                JjCheckNAddTwoStates(28, 29);
                                break;
                            case 32:
                                if ((0x97ffffff87ffffffL & l) == (ulong)0L)
                                    break;
                                if (kind > 23)
                                    kind = 23;
                                JjCheckNAddTwoStates(33, 34);
                                break;
                            case 33:
                                if ((0x97ffffff87ffffffL & l) == (ulong)0L)
                                    break;
                                if (kind > 23)
                                    kind = 23;
                                JjCheckNAddTwoStates(33, 34);
                                break;
                            case 34:
                                if (m_curChar == 92)
                                    JjCheckNAddTwoStates(35, 35);
                                break;
                            case 35:
                                if (kind > 23)
                                    kind = 23;
                                JjCheckNAddTwoStates(33, 34);
                                break;
                            case 37:
                                JjAddStates(0, 2);
                                break;
                            case 39:
                                if (m_curChar == 92)
                                    jjstateSet[jjnewStateCnt++] = 38;
                                break;
                            case 41:
                                if ((0x97ffffff87ffffffL & l) == (ulong)0L)
                                    break;
                                if (kind > 20)
                                    kind = 20;
                                JjCheckNAddStates(6, 10);
                                break;
                            case 42:
                                if ((0x97ffffff87ffffffL & l) == (ulong)0L)
                                    break;
                                if (kind > 20)
                                    kind = 20;
                                JjCheckNAddTwoStates(42, 43);
                                break;
                            case 43:
                                if (m_curChar == 92)
                                    JjCheckNAddTwoStates(44, 44);
                                break;
                            case 44:
                                if (kind > 20)
                                    kind = 20;
                                JjCheckNAddTwoStates(42, 43);
                                break;
                            case 45:
                                if ((0x97ffffff87ffffffL & l) != (ulong)0L)
                                    JjCheckNAddStates(18, 20);
                                break;
                            case 46:
                                if (m_curChar == 92)
                                    JjCheckNAddTwoStates(47, 47);
                                break;
                            case 47:
                                JjCheckNAddStates(18, 20);
                                break;
                            case 48:
                                if (m_curChar == 92)
                                    JjCheckNAddStates(21, 23);
                                break;

                            default: break;

                        }
                    }
                    while (i != startsAt);
                }
                else
                {
                    int hiByte = (int) (m_curChar >> 8);
                    int i1 = hiByte >> 6;
                    ulong l1 = (ulong) (1L << (hiByte & 63));
                    int i2 = (m_curChar & 0xff) >> 6;
                    ulong l2 = (ulong) (1L << (m_curChar & 63));
                    do
                    {
                        switch (jjstateSet[--i])
                        {

                            case 49:
                            case 33:
                                if (!JjCanMove_2(hiByte, i1, i2, l1, l2))
                                    break;
                                if (kind > 23)
                                    kind = 23;
                                JjCheckNAddTwoStates(33, 34);
                                break;

                            case 0:
                                if (JjCanMove_0(hiByte, i1, i2, l1, l2))
                                {
                                    if (kind > 7)
                                        kind = 7;
                                }
                                if (JjCanMove_2(hiByte, i1, i2, l1, l2))
                                {
                                    if (kind > 23)
                                        kind = 23;
                                    JjCheckNAddTwoStates(33, 34);
                                }
                                if (JjCanMove_2(hiByte, i1, i2, l1, l2))
                                {
                                    if (kind > 20)
                                        kind = 20;
                                    JjCheckNAddStates(6, 10);
                                }
                                break;

                            case 15:
                                if (JjCanMove_0(hiByte, i1, i2, l1, l2) && kind > 13)
                                    kind = 13;
                                break;
                            case 17:
                            case 19:
                                if (JjCanMove_1(hiByte, i1, i2, l1, l2))
                                    JjCheckNAddStates(3, 5);
                                break;

                            case 25:
                                if (!JjCanMove_2(hiByte, i1, i2, l1, l2))
                                    break;
                                if (kind > 21)
                                    kind = 21;
                                JjCheckNAddTwoStates(25, 26);
                                break;

                            case 27:
                                if (!JjCanMove_1(hiByte, i1, i2, l1, l2))
                                    break;
                                if (kind > 21)
                                    kind = 21;
                                JjCheckNAddTwoStates(25, 26);
                                break;

                            case 28:
                                if (!JjCanMove_2(hiByte, i1, i2, l1, l2))
                                    break;
                                if (kind > 21)
                                    kind = 21;
                                JjCheckNAddTwoStates(28, 29);
                                break;
                            case 30:
                                if (!JjCanMove_1(hiByte, i1, i2, l1, l2))
                                    break;
                                if (kind > 21)
                                    kind = 21;
                                JjCheckNAddTwoStates(28, 29);
                                break;
                            case 32:
                                if (!JjCanMove_2(hiByte, i1, i2, l1, l2))
                                    break;
                                if (kind > 23)
                                    kind = 23;
                                JjCheckNAddTwoStates(33, 34);
                                break;

                            case 35:
                                if (!JjCanMove_1(hiByte, i1, i2, l1, l2))
                                    break;
                                if (kind > 23)
                                    kind = 23;
                                JjCheckNAddTwoStates(33, 34);
                                break;

                            case 37:
                                if (JjCanMove_1(hiByte, i1, i2, l1, l2))
                                    JjAddStates(0, 2);
                                break;
                            case 41:
                                if (!JjCanMove_2(hiByte, i1, i2, l1, l2))
                                    break;
                                if (kind > 20)
                                    kind = 20;
                                JjCheckNAddStates(6, 10);
                                break;
                            case 42:
                                if (!JjCanMove_2(hiByte, i1, i2, l1, l2))
                                    break;
                                if (kind > 20)
                                    kind = 20;
                                JjCheckNAddTwoStates(42, 43);
                                break;
                            case 44:
                                if (!JjCanMove_1(hiByte, i1, i2, l1, l2))
                                    break;
                                if (kind > 20)
                                    kind = 20;
                                JjCheckNAddTwoStates(42, 43);
                                break;
                            case 45:
                                if (JjCanMove_2(hiByte, i1, i2, l1, l2))
                                    JjCheckNAddStates(18, 20);
                                break;

                            case 47:
                                if (JjCanMove_1(hiByte, i1, i2, l1, l2))
                                    JjCheckNAddStates(18, 20);
                                break;

                            default:  break;

                        }
                    }
                    while (i != startsAt);
                }
                if (kind != 0x7fffffff)
                {
                    jjmatchedKind = kind;
                    jjmatchedPos = curPos;
                    kind = 0x7fffffff;
                }
                ++curPos;
                if ((i = jjnewStateCnt) == (startsAt = 49 - (jjnewStateCnt = startsAt)))
                    return curPos;
                try
                {
                    m_curChar = m_input_stream.ReadChar();
                }
                catch (Exception e) when (e.IsIOException())
                {
                    return curPos;
                }
            }
        }