BPMN-OS
BPMN for optimization and simulation
Loading...
Searching...
No Matches
Scenario.h
Go to the documentation of this file.
1#ifndef BPMNOS_Model_Scenario_H
2#define BPMNOS_Model_Scenario_H
3
4#include <string>
5#include <memory>
6#include <unordered_map>
7#include <bpmn++.h>
12
13namespace BPMNOS::Model {
14
15typedef std::unordered_map< const BPMN::Process*, std::unordered_map< std::string, const Attribute* > > DataInput;
16
17/**
18 * @brief The Scenario class holds data for all BPMN instances.
19 */
20class Scenario {
21public:
22 struct Disclosure {
23 BPMNOS::number disclosure; ///< Time at which the value is disclosed.
24 std::optional<BPMNOS::number> value; ///< Value that the attribute takes at the time of disclosed.
25 };
26
27 struct Data {
28 std::vector<Disclosure> anticipations;
29 std::optional<Disclosure> realization;
30 };
31
32 struct InstanceData {
34 size_t id; ///< Instance identifier.
35 Data instantiation; ///< Data regarding the time of instantiation.
36 std::unordered_map< const Attribute*, Data > data; ///< Data regarding attribute values.
37 };
38
39
40 /**
41 * @brief Constructor for Scenario.
42 */
43 Scenario(const Model* model, BPMNOS::number inception, BPMNOS::number completion, const DataInput& attributes, const std::unordered_map< const Attribute*, BPMNOS::number >& globalValueMap, unsigned int index = 0);
44 /**
45 * @brief Copy constructor for Scenario.
46 */
47 Scenario(const Scenario& other, unsigned int index);
48
49 const Model* getModel() const;
50
51 unsigned int index;
52
53 static constexpr char delimiters[] = {'^','#'}; ///< Delimiters used for disambiguation of identifiers of non-interrupting event subprocesses and multi-instance activities
54
55 /**
56 * @brief Virtual method allowing derived scenarios to update their data.
57 */
58 virtual void update() {};
59
60 /**
61 * @brief Method returning the time of the earliest instantiation.
62 */
64
65 /**
66 * @brief Method updating the completion time.
67 */
69
70 /**
71 * @brief Method returning true if the currentTime exceeds the completion time.
72 */
73 bool isCompleted(const BPMNOS::number currentTime) const;
74
75 /**
76 * @brief Method returning a vector of all instances that are known to be instantiated at the given time.
77 */
78 std::vector< std::tuple<const BPMN::Process*, BPMNOS::Values, BPMNOS::Values> > getCurrentInstantiations(const BPMNOS::number currentTime) const;
79
80 /**
81 * @brief Method returning a vector of all instances that are anticipated to be instantiated at the assumed time.
82 */
83 std::vector< std::tuple<const BPMN::Process*, BPMNOS::Values, BPMNOS::Values> > getAnticipatedInstantiations(const BPMNOS::number currentTime, const BPMNOS::number assumedTime) const;
84
85 /**
86 * @brief Method returning a vector of all instances that have been created until the given time.
87 */
88 std::vector< const InstanceData* > getCreatedInstances(const BPMNOS::number currentTime) const;
89
90 /**
91 * @brief Method returning a vector of all instances that have been created or are known for sure until the given time.
92 */
93 std::vector< const InstanceData* > getKnownInstances(const BPMNOS::number currentTime) const;
94
95 /**
96 * @brief Method returning a vector of all instances that are anticipated and not known for sure at the given time.
97 */
98 std::vector< const InstanceData* > getAnticipatedInstances(const BPMNOS::number currentTime) const;
99
100 /**
101 * @brief Method returning a known value of an attribute.
102 *
103 * If the attribute value is not yet known, the method returns std::nullopt.
104 */
105 std::optional<BPMNOS::number> getKnownValue(const Scenario::InstanceData* instance, const BPMNOS::Model::Attribute* attribute, const BPMNOS::number currentTime) const;
106
107 /**
108 * @brief Method returning a known value of an attribute.
109 *
110 * If the attribute value is not yet known, the method returns std::nullopt.
111 */
112 std::optional<BPMNOS::number> getKnownValue(const BPMNOS::number instanceId, const BPMNOS::Model::Attribute* attribute, const BPMNOS::number currentTime) const;
113
114 /**
115 * @brief Method returning the initial status of a known instantiation at the given time.
116 */
118
119 /**
120 * @brief Method returning the initial data attributes of a known instantiation at the given time.
121 */
122 Values getKnownInitialData(const InstanceData*, const BPMNOS::number time) const;
123
124 /**
125 * @brief Method returning disclosed value of an attribute.
126 *
127 * If no attribute value is yet disclosed, the method returns std::nullopt.
128 */
129 std::optional<BPMNOS::number> getAnticipatedValue(const Scenario::InstanceData* instance, const BPMNOS::Model::Attribute* attribute, const BPMNOS::number currentTime) const;
130
131 /**
132 * @brief Method returning disclosed value of an attribute.
133 *
134 * If no attribute value is yet disclosed, the method returns std::nullopt.
135 */
136 std::optional<BPMNOS::number> getAnticipatedValue(const BPMNOS::number instanceId, const BPMNOS::Model::Attribute* attribute, const BPMNOS::number currentTime) const;
137
138 /**
139 * @brief Method returning the initial status of an anticipated instantiation at the given time.
140 */
142
143 /**
144 * @brief Method returning the initial data attributes of an anticipated instantiation at the given time.
145 */
147
148 /**
149 * @brief Method returning all known values of new attributes.
150 *
151 * If at least one attribute value is not yet known, the method returns std::nullopt.
152 */
153 std::optional<BPMNOS::Values> getKnownValues(const BPMNOS::number instanceId, const BPMN::Node* node, const BPMNOS::number currentTime) const;
154
155 /**
156 * @brief Method returning all known values of new attributes.
157 *
158 * If at least one attribute value is not yet known, the method returns std::nullopt.
159 */
160 std::optional<BPMNOS::Values> getKnownData(const BPMNOS::number instanceId, const BPMN::Node* node, const BPMNOS::number currentTime) const;
161
162
163 /**
164 * @brief Method returning the disclosed values of new attributes.
165 */
166 BPMNOS::Values getAnticipatedValues(const BPMNOS::number instanceId, const BPMN::Node* node, const BPMNOS::number currentTime) const;
167
168 /**
169 * @brief Method returning the disclosed values of new attributes.
170 */
171 BPMNOS::Values getAnticipatedData(const BPMNOS::number instanceId, const BPMN::Node* node, const BPMNOS::number currentTime) const;
172
173 void addInstance(const BPMN::Process* process, const BPMNOS::number instanceId, Data instantiation);
174 void removeAnticipatedInstance(const BPMNOS::number instanceId);
175
176 Data& getInstantiationData(const BPMNOS::number instanceId);
177 Data& getAttributeData(const BPMNOS::number instanceId, const Attribute* attribute);
178 void addAnticipation( Data& data, Disclosure anticipation );
179 void setRealization( Data& data, Disclosure realization );
180
182 const Model* model; ///< Pointer to the BPMN model.
183protected:
184 const DataInput& attributes; ///< Map holding all attributes in the model with keys being the process and attribute id
185 std::unordered_map<size_t, InstanceData > instances; ///< Map of instances with key being the instance id.
186 const Scenario::Disclosure& getLatestDisclosure(const std::vector<Scenario::Disclosure>& data, const BPMNOS::number currentTime) const;
187 BPMNOS::number inception; ///< Time earliest time in execution.
188 BPMNOS::number completion; ///< The latest time in execution at which an instantiation can happen.
189};
190
191} // namespace BPMNOS::Model
192
193#endif // BPMNOS_Model_Scenario_H
Represents a BPMN model with all its processes.
Definition Model.h:21
The Scenario class holds data for all BPMN instances.
Definition Scenario.h:20
BPMNOS::number inception
Time earliest time in execution.
Definition Scenario.h:187
std::vector< std::tuple< const BPMN::Process *, BPMNOS::Values, BPMNOS::Values > > getCurrentInstantiations(const BPMNOS::number currentTime) const
Method returning a vector of all instances that are known to be instantiated at the given time.
Definition Scenario.cpp:129
Values getKnownInitialStatus(const InstanceData *, const BPMNOS::number time) const
Method returning the initial status of a known instantiation at the given time.
Definition Scenario.cpp:166
Values getKnownInitialData(const InstanceData *, const BPMNOS::number time) const
Method returning the initial data attributes of a known instantiation at the given time.
Definition Scenario.cpp:180
virtual void update()
Virtual method allowing derived scenarios to update their data.
Definition Scenario.h:58
std::optional< BPMNOS::number > getAnticipatedValue(const Scenario::InstanceData *instance, const BPMNOS::Model::Attribute *attribute, const BPMNOS::number currentTime) const
Method returning disclosed value of an attribute.
Definition Scenario.cpp:243
std::vector< const InstanceData * > getCreatedInstances(const BPMNOS::number currentTime) const
Method returning a vector of all instances that have been created until the given time.
Definition Scenario.cpp:83
std::optional< BPMNOS::Values > getKnownData(const BPMNOS::number instanceId, const BPMN::Node *node, const BPMNOS::number currentTime) const
Method returning all known values of new attributes.
Definition Scenario.cpp:231
Data & getAttributeData(const BPMNOS::number instanceId, const Attribute *attribute)
Definition Scenario.cpp:323
static constexpr char delimiters[]
Delimiters used for disambiguation of identifiers of non-interrupting event subprocesses and multi-in...
Definition Scenario.h:53
const DataInput & attributes
Map holding all attributes in the model with keys being the process and attribute id.
Definition Scenario.h:184
unsigned int index
Definition Scenario.h:51
BPMNOS::number completion
The latest time in execution at which an instantiation can happen.
Definition Scenario.h:188
const Scenario::Disclosure & getLatestDisclosure(const std::vector< Scenario::Disclosure > &data, const BPMNOS::number currentTime) const
Definition Scenario.cpp:304
bool isCompleted(const BPMNOS::number currentTime) const
Method returning true if the currentTime exceeds the completion time.
Definition Scenario.cpp:78
std::unordered_map< size_t, InstanceData > instances
Map of instances with key being the instance id.
Definition Scenario.h:185
BPMNOS::Values getAnticipatedInitialStatus(const InstanceData *, const BPMNOS::number currentTime) const
Method returning the initial status of an anticipated instantiation at the given time.
Definition Scenario.cpp:263
void setRealization(Data &data, Disclosure realization)
Definition Scenario.cpp:66
const Model * getModel() const
Definition Scenario.cpp:70
void updateCompletion(const BPMNOS::number time)
Method updating the completion time.
Scenario(const Model *model, BPMNOS::number inception, BPMNOS::number completion, const DataInput &attributes, const std::unordered_map< const Attribute *, BPMNOS::number > &globalValueMap, unsigned int index=0)
Constructor for Scenario.
Definition Scenario.cpp:9
void removeAnticipatedInstance(const BPMNOS::number instanceId)
Definition Scenario.cpp:51
std::optional< BPMNOS::Values > getKnownValues(const BPMNOS::number instanceId, const BPMN::Node *node, const BPMNOS::number currentTime) const
Method returning all known values of new attributes.
Definition Scenario.cpp:218
void addAnticipation(Data &data, Disclosure anticipation)
Definition Scenario.cpp:59
Data & getInstantiationData(const BPMNOS::number instanceId)
Definition Scenario.cpp:318
void addInstance(const BPMN::Process *process, const BPMNOS::number instanceId, Data instantiation)
Definition Scenario.cpp:39
std::vector< const InstanceData * > getAnticipatedInstances(const BPMNOS::number currentTime) const
Method returning a vector of all instances that are anticipated and not known for sure at the given t...
Definition Scenario.cpp:110
std::vector< const InstanceData * > getKnownInstances(const BPMNOS::number currentTime) const
Method returning a vector of all instances that have been created or are known for sure until the giv...
Definition Scenario.cpp:97
std::vector< std::tuple< const BPMN::Process *, BPMNOS::Values, BPMNOS::Values > > getAnticipatedInstantiations(const BPMNOS::number currentTime, const BPMNOS::number assumedTime) const
Method returning a vector of all instances that are anticipated to be instantiated at the assumed tim...
Definition Scenario.cpp:143
BPMNOS::Values getAnticipatedInitialData(const InstanceData *, const BPMNOS::number currentTime) const
Method returning the initial data attributes of an anticipated instantiation at the given time.
Definition Scenario.cpp:272
BPMNOS::Values getAnticipatedData(const BPMNOS::number instanceId, const BPMN::Node *node, const BPMNOS::number currentTime) const
Method returning the disclosed values of new attributes.
Definition Scenario.cpp:294
std::optional< BPMNOS::number > getKnownValue(const Scenario::InstanceData *instance, const BPMNOS::Model::Attribute *attribute, const BPMNOS::number currentTime) const
Method returning a known value of an attribute.
Definition Scenario.cpp:194
BPMNOS::Values getAnticipatedValues(const BPMNOS::number instanceId, const BPMN::Node *node, const BPMNOS::number currentTime) const
Method returning the disclosed values of new attributes.
Definition Scenario.cpp:282
const Model * model
Pointer to the BPMN model.
Definition Scenario.h:182
BPMNOS::Values globals
Definition Scenario.h:181
BPMNOS::number getInception() const
Method returning the time of the earliest instantiation.
Definition Scenario.cpp:74
Base class for all nodes in a BPMN model.
Definition bpmn++.h:16444
std::unordered_map< const BPMN::Process *, std::unordered_map< std::string, const Attribute * > > DataInput
Definition Scenario.h:15
BPMNOS_NUMBER_TYPE number
Definition Number.h:42
std::optional< Disclosure > realization
Definition Scenario.h:29
std::vector< Disclosure > anticipations
Definition Scenario.h:28
BPMNOS::number disclosure
Time at which the value is disclosed.
Definition Scenario.h:23
std::optional< BPMNOS::number > value
Value that the attribute takes at the time of disclosed.
Definition Scenario.h:24
std::unordered_map< const Attribute *, Data > data
Data regarding attribute values.
Definition Scenario.h:36
const BPMN::Process * process
Definition Scenario.h:33
size_t id
Instance identifier.
Definition Scenario.h:34
Data instantiation
Data regarding the time of instantiation.
Definition Scenario.h:35