bool Expression::boolEval()

in src/qmf/Expression.cpp [162:196]


bool Expression::boolEval(const Variant::Map& data) const
{
    Variant val[2];
    bool exists[2];

    for (int idx = 0; idx < operandCount; idx++) {
        if (quoted[idx]) {
            exists[idx] = true;
            val[idx] = operands[idx];
        } else {
            Variant::Map::const_iterator mIter(data.find(operands[idx].asString()));
            if (mIter == data.end()) {
                exists[idx] = false;
            } else {
                exists[idx] = true;
                val[idx] = mIter->second;
            }
        }
    }

    switch (boolOp) {
    case BOOL_EQ:       return (exists[0] && exists[1] && (val[0].asString() == val[1].asString()));
    case BOOL_NE:       return (exists[0] && exists[1] && (val[0].asString() != val[1].asString()));
    case BOOL_LT:       return (exists[0] && exists[1] && lessThan(val[0], val[1]));
    case BOOL_LE:       return (exists[0] && exists[1] && lessEqual(val[0], val[1]));
    case BOOL_GT:       return (exists[0] && exists[1] && greaterThan(val[0], val[1]));
    case BOOL_GE:       return (exists[0] && exists[1] && greaterEqual(val[0], val[1]));
    case BOOL_RE_MATCH: return false; // TODO
    case BOOL_EXISTS:   return exists[0];
    case BOOL_TRUE:     return true;
    case BOOL_FALSE:    return false;
    }

    return false;
}