Storm 1.14.0.1
A Modern Probabilistic Model Checker
Loading...
Searching...
No Matches
ParallelComposition.h
Go to the documentation of this file.
1#pragma once
2
3#include <cstdint>
4#include <memory>
5#include <set>
6#include <string>
7#include <vector>
8
9#include <boost/optional.hpp>
10
11#include "Composition.h"
12
13namespace storm {
14namespace jani {
15
17 public:
18 SynchronizationVector(std::vector<std::string> const& input, std::string const& output);
19 SynchronizationVector(std::vector<std::string> const& input);
20
21 std::size_t size() const;
22 std::vector<std::string> const& getInput() const;
23 std::string const& getInput(uint64_t index) const;
24 std::string const& getOutput() const;
25
26 static bool isNoActionInput(std::string const& action);
27
32 boost::optional<std::string> getPrecedingParticipatingAction(uint64_t index) const;
33
38 boost::optional<uint64_t> getPositionOfPrecedingParticipatingAction(uint64_t index) const;
39
44
48 uint64_t getNumberOfActionInputs() const;
49
50 // A marker that can be used as one of the inputs. The semantics is that no action of the corresponding
51 // automaton takes part in the synchronization.
52 static const std::string NO_ACTION_INPUT;
53
54 private:
56 std::vector<std::string> input;
57
59 std::string output;
60};
61
62bool operator==(SynchronizationVector const& vector1, SynchronizationVector const& vector2);
63bool operator!=(SynchronizationVector const& vector1, SynchronizationVector const& vector2);
64
66 bool operator()(SynchronizationVector const& vector1, SynchronizationVector const& vector2) const;
67};
68
69std::ostream& operator<<(std::ostream& stream, SynchronizationVector const& synchronizationVector);
70
72 public:
76 ParallelComposition(std::shared_ptr<Composition> const& subcomposition, std::vector<SynchronizationVector> const& synchronizationVectors);
77
81 ParallelComposition(std::vector<std::shared_ptr<Composition>> const& subcompositions, std::vector<SynchronizationVector> const& synchronizationVectors);
82
86 ParallelComposition(std::vector<std::shared_ptr<Composition>> const& subcompositions, std::set<std::string> const& synchronizationAlphabet);
87
91 ParallelComposition(std::shared_ptr<Composition> const& leftSubcomposition, std::shared_ptr<Composition> const& rightSubcomposition,
92 std::set<std::string> const& synchronizationAlphabet);
93
94 virtual bool isParallelComposition() const override;
95
99 Composition const& getSubcomposition(uint64_t index) const;
100
104 std::vector<std::shared_ptr<Composition>> const& getSubcompositions() const;
105
109 uint64_t getNumberOfSubcompositions() const;
110
114 SynchronizationVector const& getSynchronizationVector(uint64_t index) const;
115
119 std::vector<SynchronizationVector> const& getSynchronizationVectors() const;
120
124 std::size_t getNumberOfSynchronizationVectors() const;
125
126 virtual boost::any accept(CompositionVisitor& visitor, boost::any const& data) const override;
127
128 virtual void write(std::ostream& stream) const override;
129
130 bool areActionsReused() const;
131
132 private:
136 void checkSynchronizationVectors() const;
137
139 std::vector<std::shared_ptr<Composition>> subcompositions;
140
142 std::vector<SynchronizationVector> synchronizationVectors;
143};
144
145} // namespace jani
146} // namespace storm
uint64_t getNumberOfSubcompositions() const
Retrieves the number of subcompositions of this parallel composition.
virtual void write(std::ostream &stream) const override
std::vector< SynchronizationVector > const & getSynchronizationVectors() const
Retrieves the synchronization vectors of the parallel composition.
std::size_t getNumberOfSynchronizationVectors() const
Retrieves the number of synchronization vectors.
SynchronizationVector const & getSynchronizationVector(uint64_t index) const
Retrieves the synchronization vector with the given index.
virtual bool isParallelComposition() const override
std::vector< std::shared_ptr< Composition > > const & getSubcompositions() const
Retrieves the subcompositions of the parallel composition.
virtual boost::any accept(CompositionVisitor &visitor, boost::any const &data) const override
Composition const & getSubcomposition(uint64_t index) const
Retrieves the subcomposition with the given index.
ParallelComposition(std::shared_ptr< Composition > const &subcomposition, std::vector< SynchronizationVector > const &synchronizationVectors)
Creates a parallel composition of the subcomposition and the provided synchronization vectors.
static const std::string NO_ACTION_INPUT
std::vector< std::string > const & getInput() const
uint64_t getPositionOfFirstParticipatingAction() const
Retrieves the position of the first participating action.
boost::optional< std::string > getPrecedingParticipatingAction(uint64_t index) const
Retrieves the action name that is the last participating action before the given input index.
SynchronizationVector(std::vector< std::string > const &input, std::string const &output)
boost::optional< uint64_t > getPositionOfPrecedingParticipatingAction(uint64_t index) const
Retrieves the position of the last participating action before the given input index.
static bool isNoActionInput(std::string const &action)
uint64_t getNumberOfActionInputs() const
Retrieves the number of action inputs, i.e.
std::string const & getOutput() const
bool operator!=(SynchronizationVector const &vector1, SynchronizationVector const &vector2)
bool operator==(SynchronizationVector const &vector1, SynchronizationVector const &vector2)
std::ostream & operator<<(std::ostream &stream, Assignment const &assignment)
bool operator()(SynchronizationVector const &vector1, SynchronizationVector const &vector2) const