BPMN-OS
BPMN for optimization and simulation
Loading...
Searching...
No Matches
Operator.cpp
Go to the documentation of this file.
1#include "Operator.h"
2
3using namespace BPMNOS::Model;
4
5Operator::Operator(XML::bpmnos::tOperator* operator_, const AttributeRegistry& attributeRegistry)
6 : element(operator_)
7 , id(operator_->id.value.value)
8 , expression(Expression(operator_->expression.value.value,attributeRegistry))
9 , attributeRegistry(attributeRegistry)
10 , attribute(getAttribute())
11{
12 attribute->isImmutable = false;
13}
14
15template <typename DataType>
16void Operator::apply(BPMNOS::Values& status, DataType& data, BPMNOS::Values& globals) const {
17 attributeRegistry.setValue( attribute, status, data, globals, expression.execute(status,data,globals) );
18}
19
20template void Operator::apply<BPMNOS::Values>(BPMNOS::Values& status, BPMNOS::Values& data, BPMNOS::Values& globals) const;
21template void Operator::apply<BPMNOS::SharedValues>(BPMNOS::Values& status, BPMNOS::SharedValues& data, BPMNOS::Values& globals) const;
22
23Attribute* Operator::getAttribute() const {
24 if ( auto& name = expression.compiled.getTarget(); name.has_value() ) {
25 return attributeRegistry[ name.value() ];
26 }
27 throw std::runtime_error("Operator: expression is not an assignment");
28}
29
void setValue(const Attribute *attribute, Values &status, Values &data, Values &globals, std::optional< BPMNOS::number > value) const
bool isImmutable
Flag indicating whether attribute value may be changed by operator, choice, or intermediate catch eve...
Definition Attribute.h:38
Class representing a mathematical expression.
Definition Expression.h:17
const LIMEX::Expression< double > compiled
Definition Expression.h:23
std::optional< BPMNOS::number > execute(const BPMNOS::Values &status, const DataType &data, const BPMNOS::Values &globals) const
const Expression expression
Definition Operator.h:27
Attribute * attribute
The status or data attribute to be modified by the operator.
Definition Operator.h:29
Operator(XML::bpmnos::tOperator *operator_, const AttributeRegistry &attributeRegistry)
Definition Operator.cpp:5
void apply(BPMNOS::Values &status, DataType &data, BPMNOS::Values &globals) const
Definition Operator.cpp:16
const AttributeRegistry & attributeRegistry
Definition Operator.h:28