1#ifndef OPAL_ADeferred_HH
2#define OPAL_ADeferred_HH
52 explicit ADeferred(
const std::vector<T>& val);
72 virtual void print(std::ostream&)
const;
107 itsLaw(rhs.itsLaw->clone()),
108 itsOverrides(rhs.itsOverrides.size()),
109 in_evaluation(false) {
117 :
AValue<
T>(val), itsLaw(0), itsOverrides(0), in_evaluation(false) {}
121 :
AValue<
T>(), itsLaw(expr), itsOverrides(), in_evaluation(false) {}
125 :
AValue<
T>(), itsLaw(), itsOverrides(expr), in_evaluation(false) {}
138 throw LogicalError(
"ADeferred::evaluate()",
"Recursive expression definitions found.");
140 in_evaluation =
true;
143 if (itsLaw.isValid()) this->value = itsLaw->evaluate();
144 in_evaluation =
false;
145 if (this->value.size() < itsOverrides.size()) {
146 this->value.resize(itsOverrides.size());
150 if (itsOverrides[i].isValid()) {
151 this->value[i] = itsOverrides[i]->evaluate();
155 in_evaluation =
false;
158 "Evaluating expression \"" + this->getImage() +
"\": " + ex.
what());
159 }
catch (std::exception& ex) {
160 in_evaluation =
false;
162 "ADeferred::evaluate()",
"Standard C++ exception while evaluating \""
163 + this->getImage() +
"\": " + ex.
what());
165 in_evaluation =
false;
167 "ADeferred::evaluate()",
168 "Unknown exception while evaluating \"" + this->getImage() +
"\": ");
177 return itsLaw.isValid() || (!itsOverrides.empty());
183 if (itsLaw.isValid()) itsLaw->print(os, 0);
186 if (!itsOverrides.empty()) {
187 os <<
"; overrides: {";
190 while (i != itsOverrides.end()) {
191 if (i->isValid()) (*i)->print(os);
192 if (++i == itsOverrides.end())
break;
204 while (
int(itsOverrides.size()) < index) {
208 itsOverrides[index - 1] = expr;
Object attribute with a `‘deferred’' array value.
void operator=(const ADeferred< T > &)
ArrayOfPtrs< T > itsOverrides
Overrides for single components.
virtual void print(std::ostream &) const
Print the attribute value.
virtual std::vector< T > evaluate()
Evaluate.
virtual bool isExpression() const
Get expression flag.
ADeferred()
Default constructor.
PtrToArray< T > itsLaw
The generating law for the array expression.
virtual ADeferred< T > * clone() const
Make clone.
void setComponent(int i, const PtrToScalar< T > expr)
Set a component of the value.
Object attribute with a constant array value.
An array of pointers to scalar expressions.
A pointer to an array expression.
A pointer to a scalar expression.
virtual const std::string & what() const
Return the message string for the exception.
virtual const std::string & where() const
Return the name of the method or function which detected the exception.
Representation objects and parsers for attribute expressions.