src/main/java/com/basistech/tclre/Nfa.java
int combine(Arc con, Arc a) throws RegexException {
        //# define  CA(ct,at)   (((ct)<<CHAR_BIT) | (at))

        //CA(con->type, a->type)) {
        switch ((con.type << 8) | a.type) {


        case '^' << 8 | Compiler.PLAIN:     /* newlines are handled separately */
        case '$' << 8 | Compiler.PLAIN:
            return INCOMPATIBLE;

        case Compiler.AHEAD << 8 | Compiler.PLAIN:      /* color constraints meet colors */
        case Compiler.BEHIND << 8 | Compiler.PLAIN:
            if (con.co == a.co) {
                return SATISFIED;
            }
            return INCOMPATIBLE;

        case '^' << 8 | '^':        /* collision, similar constraints */
        case '$' << 8 | '$':
        case Compiler.AHEAD << 8 | Compiler.AHEAD:
        case Compiler.BEHIND << 8 | Compiler.BEHIND:
            if (con.co == a.co) {       /* true duplication */
                return SATISFIED;
            }
            return INCOMPATIBLE;

        case '^' << 8 | Compiler.BEHIND:        /* collision, dissimilar constraints */
        case Compiler.BEHIND << 8 | '^':
        case '$' << 8 | Compiler.AHEAD:
        case Compiler.AHEAD << 8 | '$':
            return INCOMPATIBLE;

        case '^' << 8 | Compiler.AHEAD:
        case Compiler.BEHIND << 8 | '$':
        case Compiler.BEHIND << 8 | Compiler.AHEAD:
        case '$' << 8 | '^':
        case '$' << 8 | Compiler.BEHIND:
        case Compiler.AHEAD << 8 | '^':
        case Compiler.AHEAD << 8 | Compiler.BEHIND:
        case '^' << 8 | Compiler.LACON:
        case Compiler.BEHIND << 8 | Compiler.LACON:
        case '$' << 8 | Compiler.LACON:
        case Compiler.AHEAD << 8 | Compiler.LACON:
            return COMPATIBLE;
        default:
            throw new RuntimeException("Impossible arc");

        }
    }
int combine(Arc con, Arc a) throws RegexException {
        //# define  CA(ct,at)   (((ct)<<CHAR_BIT) | (at))

        //CA(con->type, a->type)) {
        switch ((con.type << 8) | a.type) {


        case '^' << 8 | Compiler.PLAIN:     /* newlines are handled separately */
        case '$' << 8 | Compiler.PLAIN:
            return INCOMPATIBLE;

        case Compiler.AHEAD << 8 | Compiler.PLAIN:      /* color constraints meet colors */
        case Compiler.BEHIND << 8 | Compiler.PLAIN:
            if (con.co == a.co) {
                return SATISFIED;
            }
            return INCOMPATIBLE;

        case '^' << 8 | '^':        /* collision, similar constraints */
        case '$' << 8 | '$':
        case Compiler.AHEAD << 8 | Compiler.AHEAD:
        case Compiler.BEHIND << 8 | Compiler.BEHIND:
            if (con.co == a.co) {       /* true duplication */
                return SATISFIED;
            }
            return INCOMPATIBLE;

        case '^' << 8 | Compiler.BEHIND:        /* collision, dissimilar constraints */
        case Compiler.BEHIND << 8 | '^':
        case '$' << 8 | Compiler.AHEAD:
        case Compiler.AHEAD << 8 | '$':
            return INCOMPATIBLE;

        case '^' << 8 | Compiler.AHEAD:
        case Compiler.BEHIND << 8 | '$':
        case Compiler.BEHIND << 8 | Compiler.AHEAD:
        case '$' << 8 | '^':
        case '$' << 8 | Compiler.BEHIND:
        case Compiler.AHEAD << 8 | '^':
        case Compiler.AHEAD << 8 | Compiler.BEHIND:
        case '^' << 8 | Compiler.LACON:
        case Compiler.BEHIND << 8 | Compiler.LACON:
        case '$' << 8 | Compiler.LACON:
        case Compiler.AHEAD << 8 | Compiler.LACON:
            return COMPATIBLE;
        default:
            throw new RuntimeException("Impossible arc");

        }
    }
int combine ( Arc con , Arc a ) throws RegexException { //# define  CA(ct,at)   (((ct)<<CHAR_BIT) | (at)) //CA(con->type, a->type)) { switch ( ( con . type << 8 ) | a . type ) { case ' ' << 8 | Compiler . PLAIN : /* newlines are handled separately */ case ' ' << 8 | Compiler . PLAIN : return INCOMPATIBLE ; case Compiler . AHEAD << 8 | Compiler . PLAIN : /* color constraints meet colors */ case Compiler . BEHIND << 8 | Compiler . PLAIN : if ( con . co == a . co ) { return SATISFIED ; } return INCOMPATIBLE ; case ' ' << 8 | ' ' : /* collision, similar constraints */ case ' ' << 8 | ' ' : case Compiler . AHEAD << 8 | Compiler . AHEAD : case Compiler . BEHIND << 8 | Compiler . BEHIND : if ( con . co == a . co ) { /* true duplication */ return SATISFIED ; } return INCOMPATIBLE ; case ' ' << 8 | Compiler . BEHIND : /* collision, dissimilar constraints */ case Compiler . BEHIND << 8 | ' ' : case ' ' << 8 | Compiler . AHEAD : case Compiler . AHEAD << 8 | ' ' : return INCOMPATIBLE ; case ' ' << 8 | Compiler . AHEAD : case Compiler . BEHIND << 8 | ' ' : case Compiler . BEHIND << 8 | Compiler . AHEAD : case ' ' << 8 | ' ' : case ' ' << 8 | Compiler . BEHIND : case Compiler . AHEAD << 8 | ' ' : case Compiler . AHEAD << 8 | Compiler . BEHIND : case ' ' << 8 | Compiler . LACON : case Compiler . BEHIND << 8 | Compiler . LACON : case ' ' << 8 | Compiler . LACON : case Compiler . AHEAD << 8 | Compiler . LACON : return COMPATIBLE ; default : throw new RuntimeException ( "Impossible arc" ) ; } }
combine - constraint lands on an arc, what happens?

@return result
combine - constraint lands on an arc what happens?