src/main/java/com/basistech/tclre/Runtime.java
boolean exec(HsrePattern re, CharSequence data, EnumSet<ExecFlags> execFlags) throws RegexException {
    /* sanity checks */
    /* setup */


        if (0 != (re.guts.info & Flags.REG_UIMPOSSIBLE)) {
            throw new RegexException("Regex marked impossible");
        }

        eflags = 0;
        for (ExecFlags ef : execFlags) {
            switch (ef) {
            case NOTBOL:
                eflags |= Flags.REG_NOTBOL;
                break;
            case NOTEOL:
                eflags |= Flags.REG_NOTEOL;
                break;
            case LOOKING_AT:
                eflags |= Flags.REG_LOOKING_AT;
                break;
            default:
                throw new RuntimeException("impossible exec flag");
            }
        }

        this.re = re;
        this.g = re.guts;
        this.data = data;
        this.dataLength = this.data.length();
        if (this.match != null) {
            this.match.clear();
        } else {
            this.match = Lists.newArrayList();
        }
        match.add(null); // make room for 1.
        if (0 != (g.info & Flags.REG_UBACKREF)) {
            while (match.size() < g.nsub + 1) {
                match.add(null);
            }
        }
        if (mem != null && mem.length >= g.ntree) {
            Arrays.fill(mem, 0);
        } else {
            mem = new int[g.ntree];
        }
       
    /* do it */
        assert g.tree != null;

        if (0 != (g.info & Flags.REG_UBACKREF)) {
            return cfind(g.tree.machine);
        } else {
            return find(g.tree.machine);
        }
    }
boolean exec(HsrePattern re, CharSequence data, EnumSet<ExecFlags> execFlags) throws RegexException {
    /* sanity checks */
    /* setup */


        if (0 != (re.guts.info & Flags.REG_UIMPOSSIBLE)) {
            throw new RegexException("Regex marked impossible");
        }

        eflags = 0;
        for (ExecFlags ef : execFlags) {
            switch (ef) {
            case NOTBOL:
                eflags |= Flags.REG_NOTBOL;
                break;
            case NOTEOL:
                eflags |= Flags.REG_NOTEOL;
                break;
            case LOOKING_AT:
                eflags |= Flags.REG_LOOKING_AT;
                break;
            default:
                throw new RuntimeException("impossible exec flag");
            }
        }

        this.re = re;
        this.g = re.guts;
        this.data = data;
        this.dataLength = this.data.length();
        if (this.match != null) {
            this.match.clear();
        } else {
            this.match = Lists.newArrayList();
        }
        match.add(null); // make room for 1.
        if (0 != (g.info & Flags.REG_UBACKREF)) {
            while (match.size() < g.nsub + 1) {
                match.add(null);
            }
        }
        if (mem != null && mem.length >= g.ntree) {
            Arrays.fill(mem, 0);
        } else {
            mem = new int[g.ntree];
        }
       
    /* do it */
        assert g.tree != null;

        if (0 != (g.info & Flags.REG_UBACKREF)) {
            return cfind(g.tree.machine);
        } else {
            return find(g.tree.machine);
        }
    }
boolean exec ( HsrePattern re , CharSequence data , EnumSet < ExecFlags > execFlags ) throws RegexException { /* sanity checks */ /* setup */ if ( 0 != ( re . guts . info & Flags . REG_UIMPOSSIBLE ) ) { throw new RegexException ( "Regex marked impossible" ) ; } eflags = 0 ; for ( ExecFlags ef : execFlags ) { switch ( ef ) { case NOTBOL : eflags |= Flags . REG_NOTBOL ; break ; case NOTEOL : eflags |= Flags . REG_NOTEOL ; break ; case LOOKING_AT : eflags |= Flags . REG_LOOKING_AT ; break ; default : throw new RuntimeException ( "impossible exec flag" ) ; } } this . re = re ; this . g = re . guts ; this . data = data ; this . dataLength = this . data . length ( ) ; if ( this . match != null ) { this . match . clear ( ) ; } else { this . match = Lists . newArrayList ( ) ; } match . add ( null ) ; // make room for 1. if ( 0 != ( g . info & Flags . REG_UBACKREF ) ) { while ( match . size ( ) < g . nsub + 1 ) { match . add ( null ) ; } } if ( mem != null && mem . length >= g . ntree ) { Arrays . fill ( mem , 0 ) ; } else { mem = new int [ g . ntree ] ; } /* do it */ assert g . tree != null ; if ( 0 != ( g . info & Flags . REG_UBACKREF ) ) { return cfind ( g . tree . machine ) ; } else { return find ( g . tree . machine ) ; } }
exec - match regular expression
exec - match regular expression