src/main/java/com/basistech/tclre/Dfa.java
StateSet miss(StateSet css, short co, int cp) {
        if (css.outs[co] != null) {
            return css.outs[co];
        }

         /* first, what set of states would we end up in? */
        BitSet work = new BitSet(nstates);
        boolean ispost = false;
        boolean noprogress = true;
        boolean gotstate = false;

        for (int i = 0; i < nstates; i++) {
            if (css.states.get(i)) {
                long ca;
                int ax;
                short caco;
                int catarget;
                for (ax = cnfa.states[i] + 1,
                        ca = cnfa.arcs[ax],
                        caco = Cnfa.carcColor(ca),
                        catarget = Cnfa.carcTarget(ca);
                     caco != Constants.COLORLESS;
                     ax++, ca = cnfa.arcs[ax], caco = Cnfa.carcColor(ca), catarget = Cnfa.carcTarget(ca)) {

                    if (caco == co) {
                        work.set(catarget);
                        gotstate = true;
                        if (catarget == cnfa.post) {
                            ispost = true;
                        }
                        // get target state, index arcs, get color, compare to 0.
                        if (0 == Cnfa.carcColor(cnfa.arcs[cnfa.states[catarget]])) {
                            noprogress = false;
                        }
                    }
                }
            }
        }
        boolean dolacons = gotstate && cnfa.hasLacons;
        boolean sawlacons = false;
        while (dolacons) { /* transitive closure */
            dolacons = false;
            for (int i = 0; i < nstates; i++) {
                if (work.get(i)) {
                    long ca;
                    int ax;
                    short caco;
                    int catarget;
                    for (ax = cnfa.states[i] + 1, ca = cnfa.arcs[ax], caco = Cnfa.carcColor(ca), catarget = Cnfa.carcTarget(ca);
                            caco != Constants.COLORLESS;
                            ax++, ca = cnfa.arcs[ax], caco = Cnfa.carcColor(ca), catarget = Cnfa.carcTarget(ca)) {
                        if (caco <= ncolors) {
                            continue; /* NOTE CONTINUE */
                        }
                        sawlacons = true;
                        if (work.get(catarget)) {
                            continue; /* NOTE CONTINUE */
                        }
                        if (!lacon(cp, caco)) {
                            continue; /* NOTE CONTINUE */
                        }
                        work.set(catarget);
                        dolacons = true;
                        if (catarget == cnfa.post) {
                            ispost = true;
                        }
                        if (0 == Cnfa.carcColor(cnfa.arcs[cnfa.states[catarget]])) {
                            noprogress = false;
                        }
                    }
                }
            }
        }

        if (!gotstate) {
            return null;
        }

        StateSet stateSet = stateSets.get(work);
        if (stateSet == null) {
            stateSet = new StateSet(work, ncolors);
            stateSet.ins = new Arcp(null, Constants.WHITE);
            stateSet.poststate = ispost;
            stateSet.noprogress |= noprogress;
            /* lastseen to be dealt with by caller */
            stateSets.put(work, stateSet);
        }
        if (!sawlacons) {
            css.outs[co] = stateSet;
            css.inchain[co] = stateSet.ins;
            stateSet.ins = new Arcp(css, co);
        }

        return stateSet;
    }
StateSet miss(StateSet css, short co, int cp) {
        if (css.outs[co] != null) {
            return css.outs[co];
        }

         /* first, what set of states would we end up in? */
        BitSet work = new BitSet(nstates);
        boolean ispost = false;
        boolean noprogress = true;
        boolean gotstate = false;

        for (int i = 0; i < nstates; i++) {
            if (css.states.get(i)) {
                long ca;
                int ax;
                short caco;
                int catarget;
                for (ax = cnfa.states[i] + 1,
                        ca = cnfa.arcs[ax],
                        caco = Cnfa.carcColor(ca),
                        catarget = Cnfa.carcTarget(ca);
                     caco != Constants.COLORLESS;
                     ax++, ca = cnfa.arcs[ax], caco = Cnfa.carcColor(ca), catarget = Cnfa.carcTarget(ca)) {

                    if (caco == co) {
                        work.set(catarget);
                        gotstate = true;
                        if (catarget == cnfa.post) {
                            ispost = true;
                        }
                        // get target state, index arcs, get color, compare to 0.
                        if (0 == Cnfa.carcColor(cnfa.arcs[cnfa.states[catarget]])) {
                            noprogress = false;
                        }
                    }
                }
            }
        }
        boolean dolacons = gotstate && cnfa.hasLacons;
        boolean sawlacons = false;
        while (dolacons) { /* transitive closure */
            dolacons = false;
            for (int i = 0; i < nstates; i++) {
                if (work.get(i)) {
                    long ca;
                    int ax;
                    short caco;
                    int catarget;
                    for (ax = cnfa.states[i] + 1, ca = cnfa.arcs[ax], caco = Cnfa.carcColor(ca), catarget = Cnfa.carcTarget(ca);
                            caco != Constants.COLORLESS;
                            ax++, ca = cnfa.arcs[ax], caco = Cnfa.carcColor(ca), catarget = Cnfa.carcTarget(ca)) {
                        if (caco <= ncolors) {
                            continue; /* NOTE CONTINUE */
                        }
                        sawlacons = true;
                        if (work.get(catarget)) {
                            continue; /* NOTE CONTINUE */
                        }
                        if (!lacon(cp, caco)) {
                            continue; /* NOTE CONTINUE */
                        }
                        work.set(catarget);
                        dolacons = true;
                        if (catarget == cnfa.post) {
                            ispost = true;
                        }
                        if (0 == Cnfa.carcColor(cnfa.arcs[cnfa.states[catarget]])) {
                            noprogress = false;
                        }
                    }
                }
            }
        }

        if (!gotstate) {
            return null;
        }

        StateSet stateSet = stateSets.get(work);
        if (stateSet == null) {
            stateSet = new StateSet(work, ncolors);
            stateSet.ins = new Arcp(null, Constants.WHITE);
            stateSet.poststate = ispost;
            stateSet.noprogress |= noprogress;
            /* lastseen to be dealt with by caller */
            stateSets.put(work, stateSet);
        }
        if (!sawlacons) {
            css.outs[co] = stateSet;
            css.inchain[co] = stateSet.ins;
            stateSet.ins = new Arcp(css, co);
        }

        return stateSet;
    }
StateSet miss ( StateSet css , short co , int cp ) { if ( css . outs [ co ] != null ) { return css . outs [ co ] ; } /* first, what set of states would we end up in? */ BitSet work = new BitSet ( nstates ) ; boolean ispost = false ; boolean noprogress = true ; boolean gotstate = false ; for ( int i = 0 ; i < nstates ; i ++ ) { if ( css . states . get ( i ) ) { long ca ; int ax ; short caco ; int catarget ; for ( ax = cnfa . states [ i ] + 1 , ca = cnfa . arcs [ ax ] , caco = Cnfa . carcColor ( ca ) , catarget = Cnfa . carcTarget ( ca ) ; caco != Constants . COLORLESS ; ax ++ , ca = cnfa . arcs [ ax ] , caco = Cnfa . carcColor ( ca ) , catarget = Cnfa . carcTarget ( ca ) ) { if ( caco == co ) { work . set ( catarget ) ; gotstate = true ; if ( catarget == cnfa . post ) { ispost = true ; } // get target state, index arcs, get color, compare to 0. if ( 0 == Cnfa . carcColor ( cnfa . arcs [ cnfa . states [ catarget ] ] ) ) { noprogress = false ; } } } } } boolean dolacons = gotstate && cnfa . hasLacons ; boolean sawlacons = false ; while ( dolacons ) { /* transitive closure */ dolacons = false ; for ( int i = 0 ; i < nstates ; i ++ ) { if ( work . get ( i ) ) { long ca ; int ax ; short caco ; int catarget ; for ( ax = cnfa . states [ i ] + 1 , ca = cnfa . arcs [ ax ] , caco = Cnfa . carcColor ( ca ) , catarget = Cnfa . carcTarget ( ca ) ; caco != Constants . COLORLESS ; ax ++ , ca = cnfa . arcs [ ax ] , caco = Cnfa . carcColor ( ca ) , catarget = Cnfa . carcTarget ( ca ) ) { if ( caco <= ncolors ) { continue ; /* NOTE CONTINUE */ } sawlacons = true ; if ( work . get ( catarget ) ) { continue ; /* NOTE CONTINUE */ } if ( ! lacon ( cp , caco ) ) { continue ; /* NOTE CONTINUE */ } work . set ( catarget ) ; dolacons = true ; if ( catarget == cnfa . post ) { ispost = true ; } if ( 0 == Cnfa . carcColor ( cnfa . arcs [ cnfa . states [ catarget ] ] ) ) { noprogress = false ; } } } } } if ( ! gotstate ) { return null ; } StateSet stateSet = stateSets . get ( work ) ; if ( stateSet == null ) { stateSet = new StateSet ( work , ncolors ) ; stateSet . ins = new Arcp ( null , Constants . WHITE ) ; stateSet . poststate = ispost ; stateSet . noprogress |= noprogress ; /* lastseen to be dealt with by caller */ stateSets . put ( work , stateSet ) ; } if ( ! sawlacons ) { css . outs [ co ] = stateSet ; css . inchain [ co ] = stateSet . ins ; stateSet . ins = new Arcp ( css , co ) ; } return stateSet ; }
'miss' -- the state set was not found in the stateSets.

@param co
@param cp
@return
miss -- the state set was not found in the stateSets .