BPMN-OS
BPMN for optimization and simulation
Loading...
Searching...
No Matches
DynamicScenario.h
Go to the documentation of this file.
1#ifndef BPMNOS_Model_DynamicScenario_H
2#define BPMNOS_Model_DynamicScenario_H
3
4#include <bpmn++.h>
5#include "Scenario.h"
7#include <memory>
8#include <set>
9
10namespace BPMNOS::Model {
11
12/**
13 * @brief Structure representing a pending disclosure.
14 *
15 * Stores a pre-computed value to be revealed at disclosure time.
16 * The value is computed at parse time using only global attributes.
17 */
19 const Attribute* attribute; ///< The attribute to initialize
20 BPMNOS::number disclosureTime; ///< Time when this attribute is disclosed
21 BPMNOS::number value; ///< Pre-computed value to reveal at disclosure time
22};
23
24/**
25 * @brief A scenario implementation where data may be revealed over time.
26 *
27 * DynamicScenario supports cases where instance data and attribute
28 * values become known at different points in time.
29 */
31
32class DynamicScenario : public Scenario {
33 friend class DynamicDataProvider;
34
35public:
36 DynamicScenario(const Model* model, BPMNOS::number earliestInstantiationTime, BPMNOS::number latestInstantiationTime, const std::unordered_map< const Attribute*, BPMNOS::number >& globalValueMap);
37
39 bool isCompleted(const BPMNOS::number currentTime) const override;
40
41 std::vector< std::tuple<const BPMN::Process*, BPMNOS::Values, BPMNOS::Values> > getCurrentInstantiations(const BPMNOS::number currentTime) const override;
42
43 std::vector< const InstanceData* > getCreatedInstances(const BPMNOS::number currentTime) const override;
44 std::vector< const InstanceData* > getKnownInstances(const BPMNOS::number currentTime) const override;
45
46 std::optional<BPMNOS::number> getKnownValue(const Scenario::InstanceData* instance, const BPMNOS::Model::Attribute* attribute, const BPMNOS::number currentTime) const override;
47 std::optional<BPMNOS::number> getKnownValue(const BPMNOS::number instanceId, const BPMNOS::Model::Attribute* attribute, const BPMNOS::number currentTime) const override;
48
49 std::optional<BPMNOS::Values> getKnownValues(const BPMNOS::number instanceId, const BPMN::Node* node, const BPMNOS::number currentTime) const override;
50 std::optional<BPMNOS::Values> getKnownData(const BPMNOS::number instanceId, const BPMN::Node* node, const BPMNOS::number currentTime) const override;
51
52 void revealData(BPMNOS::number currentTime) const;
53
54protected:
55 Values getKnownInitialStatus(const InstanceData*, const BPMNOS::number time) const override;
56 Values getKnownInitialData(const InstanceData*, const BPMNOS::number time) const override;
57
58 void addInstance(const BPMN::Process* process, const BPMNOS::number instanceId, BPMNOS::number instantiationTime);
59 void setValue(const BPMNOS::number instanceId, const Attribute* attribute, std::optional<BPMNOS::number> value);
60 void setDisclosure(const BPMNOS::number instanceId, const BPMN::Node* node, BPMNOS::number disclosureTime);
61 void addPendingDisclosure(const BPMNOS::number instanceId, PendingDisclosure&& pending);
62
63 mutable std::unordered_map<size_t, InstanceData> instances;
64 std::unordered_map<size_t, std::unordered_map<const BPMN::Node*, BPMNOS::number>> disclosure; ///< Instance ID -> Node -> time when node's data is disclosed
65 mutable std::unordered_map<size_t, std::vector<PendingDisclosure>> pendingDisclosures; ///< Instance ID -> pending disclosures
66 mutable std::set<std::pair<size_t, const Attribute*>> disclosedAttributes; ///< Track which attributes have been disclosed
69};
70
71} // namespace BPMNOS::Model
72
73#endif // BPMNOS_Model_DynamicScenario_H
Class representing a data provider for dynamic BPMN instance data.
std::optional< BPMNOS::number > getKnownValue(const Scenario::InstanceData *instance, const BPMNOS::Model::Attribute *attribute, const BPMNOS::number currentTime) const override
Method returning a known value of an attribute.
std::unordered_map< size_t, std::vector< PendingDisclosure > > pendingDisclosures
Instance ID -> pending disclosures.
BPMNOS::number getEarliestInstantiationTime() const override
Method returning the time of the earliest instantiation.
std::optional< BPMNOS::Values > getKnownValues(const BPMNOS::number instanceId, const BPMN::Node *node, const BPMNOS::number currentTime) const override
Method returning all known values of new attributes.
void addInstance(const BPMN::Process *process, const BPMNOS::number instanceId, BPMNOS::number instantiationTime)
void revealData(BPMNOS::number currentTime) const
void setValue(const BPMNOS::number instanceId, const Attribute *attribute, std::optional< BPMNOS::number > value)
void setDisclosure(const BPMNOS::number instanceId, const BPMN::Node *node, BPMNOS::number disclosureTime)
std::unordered_map< size_t, std::unordered_map< const BPMN::Node *, BPMNOS::number > > disclosure
Instance ID -> Node -> time when node's data is disclosed.
Values getKnownInitialStatus(const InstanceData *, const BPMNOS::number time) const override
Method returning the initial status attributes for process instantiation.
std::set< std::pair< size_t, const Attribute * > > disclosedAttributes
Track which attributes have been disclosed.
std::vector< const InstanceData * > getKnownInstances(const BPMNOS::number currentTime) const override
Method returning a vector of all instances that have been created or are known for sure until the giv...
std::vector< std::tuple< const BPMN::Process *, BPMNOS::Values, BPMNOS::Values > > getCurrentInstantiations(const BPMNOS::number currentTime) const override
Method returning a vector of all instances that are known to be instantiated at the given time.
bool isCompleted(const BPMNOS::number currentTime) const override
Method returning true if the currentTime exceeds the completion time.
std::optional< BPMNOS::Values > getKnownData(const BPMNOS::number instanceId, const BPMN::Node *node, const BPMNOS::number currentTime) const override
Method returning all known values of new attributes.
void addPendingDisclosure(const BPMNOS::number instanceId, PendingDisclosure &&pending)
std::vector< const InstanceData * > getCreatedInstances(const BPMNOS::number currentTime) const override
Method returning a vector of all instances that have been created until the given time.
DynamicScenario(const Model *model, BPMNOS::number earliestInstantiationTime, BPMNOS::number latestInstantiationTime, const std::unordered_map< const Attribute *, BPMNOS::number > &globalValueMap)
Values getKnownInitialData(const InstanceData *, const BPMNOS::number time) const override
Method returning the initial data attributes for process instantiation.
std::unordered_map< size_t, InstanceData > instances
Represents a BPMN model with all its processes.
Definition Model.h:22
Abstract base class for scenarios holding data for all BPMN instances.
Definition Scenario.h:21
const Model * model
Pointer to the BPMN model.
Definition Scenario.h:148
Base class for all nodes in a BPMN model.
Definition bpmn++.h:16444
BPMNOS_NUMBER_TYPE number
Definition Number.h:50
Structure representing a pending disclosure.
const Attribute * attribute
The attribute to initialize.
BPMNOS::number value
Pre-computed value to reveal at disclosure time.
BPMNOS::number disclosureTime
Time when this attribute is disclosed.