bool Expression::lessThan()

in src/qmf/Expression.cpp [198:256]


bool Expression::lessThan(const Variant& left, const Variant& right) const
{
    switch (left.getType()) {
    case VAR_UINT8: case VAR_UINT16: case VAR_UINT32: case VAR_UINT64:
    case VAR_INT8:  case VAR_INT16:  case VAR_INT32:  case VAR_INT64:
        switch (right.getType()) {
        case VAR_UINT8: case VAR_UINT16: case VAR_UINT32: case VAR_UINT64:
        case VAR_INT8:  case VAR_INT16:  case VAR_INT32:  case VAR_INT64:
            return left.asInt64() < right.asInt64();
        case VAR_STRING:
            try {
                return left.asInt64() < right.asInt64();
            } catch (std::exception&) {}
            break;
        default:
            break;
        }
        break;

    case VAR_FLOAT: case VAR_DOUBLE:
        switch (right.getType()) {
        case VAR_FLOAT: case VAR_DOUBLE:
            return left.asDouble() < right.asDouble();
        case VAR_STRING:
            try {
                return left.asDouble() < right.asDouble();
            } catch (std::exception&) {}
            break;
        default:
            break;
        }
        break;

    case VAR_STRING:
        switch (right.getType()) {
        case VAR_UINT8: case VAR_UINT16: case VAR_UINT32: case VAR_UINT64:
        case VAR_INT8:  case VAR_INT16:  case VAR_INT32:  case VAR_INT64:
            try {
                return left.asInt64() < right.asInt64();
            } catch (std::exception&) {}
            break;

        case VAR_FLOAT: case VAR_DOUBLE:
            try {
                return left.asDouble() < right.asDouble();
            } catch (std::exception&) {}
            break;

        case VAR_STRING:
            return left.asString() < right.asString();
        default:
            break;
        }
    default:
        break;
    }

    return false;
}