本文整理汇总了C++中Environment::GetOperator方法的典型用法代码示例。如果您正苦于以下问题:C++ Environment::GetOperator方法的具体用法?C++ Environment::GetOperator怎么用?C++ Environment::GetOperator使用的例子?那么, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类Environment
的用法示例。
在下文中一共展示了Environment::GetOperator方法的3个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C++代码示例。
示例1: Prod
Value Iterator::Prod(Environment &env)
{
Signal &sig = env.GetSignal();
Value value;
if (!Next(env, value)) return Value::Nil;
if (!value.Is_number()) {
const Operator *pOperatorMul = env.GetOperator(OPTYPE_Mul);
Value valResult(value);
while (Next(env, value)) {
valResult = pOperatorMul->EvalBinary(env, valResult, value, FLAG_None);
if (sig.IsSignalled()) return Value::Nil;
}
return valResult;
}
Number result = value.GetNumber();
while (Next(env, value)) {
if (value.Is_number()) {
if (result == 0) break;
result *= value.GetNumber();
} else {
const Operator *pOperatorMul = env.GetOperator(OPTYPE_Mul);
Value valResult(result);
do {
valResult = pOperatorMul->EvalBinary(env, valResult, value, FLAG_None);
if (sig.IsSignalled()) return Value::Nil;
} while (Next(env, value));
return valResult;
}
}
return Value(result);
}
示例2: Sum
Value Iterator::Sum(Environment &env, size_t &cnt)
{
Signal &sig = env.GetSignal();
cnt = 0;
Value value;
if (!Next(env, value)) return Value::Nil;
if (!value.Is_number()) {
const Operator *pOperatorAdd = env.GetOperator(OPTYPE_Add);
Value valResult(value);
cnt = 1;
while (Next(env, value)) {
valResult = pOperatorAdd->EvalBinary(env, valResult, value, FLAG_None);
cnt++;
if (sig.IsSignalled()) return Value::Nil;
}
return valResult;
}
Number result = value.GetNumber();
cnt = 1;
while (Next(env, value)) {
if (value.Is_number()) {
result += value.GetNumber();
cnt++;
} else {
const Operator *pOperatorAdd = env.GetOperator(OPTYPE_Add);
Value valResult(result);
do {
valResult = pOperatorAdd->EvalBinary(env, valResult, value, FLAG_None);
cnt++;
if (sig.IsSignalled()) return Value::Nil;
} while (Next(env, value));
return valResult;
}
}
return Value(result);
}
示例3: Average
Value Iterator::Average(Environment &env, size_t &cnt)
{
Signal &sig = env.GetSignal();
if (IsInfinite()) {
SetError_InfiniteNotAllowed(sig);
return Value::Nil;
}
Value valueSum = Clone()->Sum(env, cnt);
if (valueSum.IsInvalid()) {
return Value::Nil;
} else if (valueSum.Is_number()) {
return Value(valueSum.GetNumber() / static_cast<Number>(cnt));
} else if (valueSum.Is_complex()) {
return Value(valueSum.GetComplex() / static_cast<Number>(cnt));
} else {
const Operator *pOperatorDiv = env.GetOperator(OPTYPE_Div);
return pOperatorDiv->EvalBinary(env, valueSum, Value(cnt), FLAG_None);
}
}