dap4/d4core/src/main/java/dap4/core/ce/CEConstraint.java
protected Object
    eval(DapVariable var, DapSequence seq, DataCursor record, CEAST expr)
            throws DapException
    {
        switch (expr.sort) {

        case CONSTANT:
            return expr.value;

        case SEGMENT:
            return fieldValue(var, seq, record, expr.name);

        case EXPR:
            Object lhs = eval(var, seq, record, expr.lhs);
            Object rhs = (expr.rhs == null ? null : eval(var, seq, record, expr.rhs));
            if(rhs != null)
                switch (expr.op) {
                case LT:
                    return compare(lhs, rhs) < 0;
                case LE:
                    return compare(lhs, rhs) <= 0;
                case GT:
                    return compare(lhs, rhs) > 0;
                case GE:
                    return compare(lhs, rhs) >= 0;
                case EQ:
                    return lhs.equals(rhs);
                case NEQ:
                    return !lhs.equals(rhs);
                case REQ:
                    return lhs.toString().matches(rhs.toString());
                case AND:
                    return ((Boolean) lhs) && ((Boolean) rhs);
                }
            else switch (expr.op) {
            case NOT:
                return !((Boolean) lhs);
            }
        }
        throw new DapException("Malformed Filter");
    }
protected Object
    eval(DapVariable var, DapSequence seq, DataCursor record, CEAST expr)
            throws DapException
    {
        switch (expr.sort) {

        case CONSTANT:
            return expr.value;

        case SEGMENT:
            return fieldValue(var, seq, record, expr.name);

        case EXPR:
            Object lhs = eval(var, seq, record, expr.lhs);
            Object rhs = (expr.rhs == null ? null : eval(var, seq, record, expr.rhs));
            if(rhs != null)
                switch (expr.op) {
                case LT:
                    return compare(lhs, rhs) < 0;
                case LE:
                    return compare(lhs, rhs) <= 0;
                case GT:
                    return compare(lhs, rhs) > 0;
                case GE:
                    return compare(lhs, rhs) >= 0;
                case EQ:
                    return lhs.equals(rhs);
                case NEQ:
                    return !lhs.equals(rhs);
                case REQ:
                    return lhs.toString().matches(rhs.toString());
                case AND:
                    return ((Boolean) lhs) && ((Boolean) rhs);
                }
            else switch (expr.op) {
            case NOT:
                return !((Boolean) lhs);
            }
        }
        throw new DapException("Malformed Filter");
    }
protected Object eval ( DapVariable var , DapSequence seq , DataCursor record , CEAST expr ) throws DapException { switch ( expr . sort ) { case CONSTANT : return expr . value ; case SEGMENT : return fieldValue ( var , seq , record , expr . name ) ; case EXPR : Object lhs = eval ( var , seq , record , expr . lhs ) ; Object rhs = ( expr . rhs == null ? null : eval ( var , seq , record , expr . rhs ) ) ; if ( rhs != null ) switch ( expr . op ) { case LT : return compare ( lhs , rhs ) < 0 ; case LE : return compare ( lhs , rhs ) <= 0 ; case GT : return compare ( lhs , rhs ) > 0 ; case GE : return compare ( lhs , rhs ) >= 0 ; case EQ : return lhs . equals ( rhs ) ; case NEQ : return ! lhs . equals ( rhs ) ; case REQ : return lhs . toString ( ) . matches ( rhs . toString ( ) ) ; case AND : return ( ( Boolean ) lhs ) && ( ( Boolean ) rhs ) ; } else switch ( expr . op ) { case NOT : return ! ( ( Boolean ) lhs ) ; } } throw new DapException ( "Malformed Filter" ) ; }
Evaluate a filter with respect to a Sequence record.
Assumes the filter has been canonicalized so that
the lhs is a variable.

@param seq    the template
@param record the record to evaluate
@param expr   the filter
@throws DapException
@returns the value of the expression (usually a Boolean)
Evaluate a filter with respect to a Sequence record . Assumes the filter has been canonicalized so that the lhs is a variable .