37 template <
class T,
class U>
60 virtual void print(std::ostream&,
int precedence = 99)
const;
77 template <
class T,
class U>
79 :
Scalar<
T>(rhs), fun(rhs.fun), opr(rhs.opr->clone()) {}
81 template <
class T,
class U>
83 : fun(function), opr(oper) {}
85 template <
class T,
class U>
88 template <
class T,
class U>
93 template <
class T,
class U>
96 U arg = opr->evaluate();
97 T result = (*fun.function)(arg);
106 if (result ==
T(0))
return result;
115 template <
class T,
class U>
119 bool isConst = operand->isConstant();
126 double value = result->evaluate();
135 template <
class T,
class U>
137 if (fun.precedence >= 0) {
138 if (fun.precedence <= precedence) os <<
"(";
140 opr->print(os, fun.precedence);
141 if (fun.precedence <= precedence) os <<
")";
143 os << fun.name <<
"(";
A pointer to a scalar expression.
A scalar constant expression.
A scalar expression with one scalar operand.
virtual Scalar< T > * clone() const
Make clone.
virtual T evaluate() const
Evaluate.
void operator=(const SUnary &)
const TFunction1< T, U > & fun
virtual void print(std::ostream &, int precedence=99) const
Print expression.
static Scalar< T > * make(const TFunction1< T, U > &function, PtrToScalar< U > operand)
Make a new expression.
Representation objects and parsers for attribute expressions.
A function of one U, returning a T.
int precedence
The operator precedence.