Esempio n. 1
0
Value* NumberValue::operation(Value& v, Expression::Operator_e e)
{
    NumberValue* num = dynamic_cast<NumberValue*>(&v);
    if(num) {
        if(isComparison(e)) {
            bool result=basicOperation<bool,double>(this->number,e,num->number);
            return new BooleanValue(result);
        } else {
            double result=basicOperation<double,double>(this->number,e,num->number);
            return new NumberValue(result);
        }
    }
    VectorValue* vec = dynamic_cast<VectorValue*>(&v);
    if(vec) {
        if(e==Expression::Concatenate) {
            QList<Value*> r=vec->getChildren();
            r.prepend(this);
            return new VectorValue(r);
        } else {
            //operations between scalars and vectors are commutative e.g.
            // [1,2,3]-1  is the same as 1 - [1,2,3]
            return Value::operation(vec,e,this);
        }
    }

    return Value::operation(v,e);
}