DiaDes  0.1
DIAgnosis of Discrete-Event System
BddComponent.hh
Go to the documentation of this file.
1 #ifndef __DIADES__SDMDL__BDDCOMPONENT__HH
2 #define __DIADES__SDMDL__BDDCOMPONENT__HH
3 
14 #include <vector>
15 #include <unordered_map>
18 #include <diades/sdmdl/Formula.hh>
19 
20 namespace Diades
21 {
22  namespace Sdmdl
23  {
24  using std::unordered_map;
25  using std::vector;
30 
36  {
37  public:
38  static string typeName() { return "Diades::Sdmdl::BddComponent"; }
42  typedef Formula SlStates;
44  typedef Formula SlEvents;
45 
46  private:
47 
48  FormulaVector _behaviour;
49  FormulaVector _initialState;
50  mutable FormulaVector _noTransitions;
51  unordered_map<string,size_t> _eventLabels;
52  FormulaVector _events;
53  FormulaVector _setOfEvents;
54  VariableVector _stateVariable;
55  VariableVector _nextStateVariable;
56  VariableVector _eventVariable;
57 
58  mutable vector< reference_wrapper<FormulaFactory> > _factory;
59 
60  public:
61 
65  BddComponent():_behaviour(),_initialState(),_eventLabels(),
66  _events(),_setOfEvents(),_stateVariable(),_nextStateVariable(),
67  _eventVariable(),_factory(){};
68 
69 
70 
76 
77 
78 
90  const SynchronisationRules & model,
91  const Component & component,
92  Variable & stateVar,
93  Variable & nextStateVar,
94  Variable & event);
95 
96 
97 
107  void encodeComponent(FormulaFactory & factory,
108  const Component & component,
109  Variable & stateVar,
110  Variable & nextStateVar,
111  Variable & event);
112 
113 
120  const SlStates & initialStates() const
121  {
122  require(Exception,_initialState.size() == 1,
123  "BddComponent::initialStates: not initialised");
124  return _initialState[0].get();
125  }
126 
127 
128  const SlTransitions & transitions() const
129  {
130  require(Exception,_behaviour.size() == 1,
131  "BddComponent::transitions: not initialised");
132  return _behaviour[0].get();
133  }
134 
135  const SlTransitions & transitions(const SlEvents & evt) const
136  {
137  require(Exception,_behaviour.size() == 1,
138  "BddComponent::transitions: not initialised");
139  return _behaviour[0].get() && evt;
140  }
141 
142 
146  const SlTransitions & noTransitions() const;
147 
148 
149 
150 
151  const SlTransitions & transitions(const SlStates & sources, const SlEvents & events) const
152  {
153  require(Exception,_behaviour.size() == 1,
154  "BddComponent::transitions: not initialised");
155  return (_behaviour[0].get() && sources && events);
156  }
157 
158 
162  const SlEvents & events(std::set<Event> & events);
163 
164 
168  const SlEvents & event(const Event & event);
169 
170 
180  const SlStates & trigger(const SlStates & sources, const SlEvents & events) const;
181 
182 
193  const SlStates & synchronousTrigger(const SlStates & sources,
194  const SlEvents & events) const;
195 
207  const SlStates & reach(const SlStates & sources, const SlEvents & nonObservables, const SlEvents & observations);
208 
209 
210  private:
211 
213  {
214  require(Exception,_factory.size() == 1,
215  "BddComponent::factory: not initialised");
216  return _factory[0].get();
217  }
218 
219 
220 
225  void clear();
226 
227 
228 
229 
235  void encodeEventLabels(const SynchronisationRules & model,
236  const Component & component);
237 
243  void encodeEventLabels(const Component & component);
244 
245 
251  void encodeInitialStates(const Component & component);
252 
253 
259  void encodeTransitions(const Component & component);
260 
267  const Formula & encodeTransition(const Component & component,
268  const Transition & transition);
269 
270  };
271  };
272 };
273 
274 #endif
const SlStates & synchronousTrigger(const SlStates &sources, const SlEvents &events) const
Diades::Graph::Edge Transition
Definition: Component.hh:46
const SlStates & initialStates() const
unordered_map< string, size_t > _eventLabels
Definition: BddComponent.hh:51
vector< reference_wrapper< FormulaFactory > > _factory
Definition: BddComponent.hh:58
void encodeEventLabels(const SynchronisationRules &model, const Component &component)
const SlStates & trigger(const SlStates &sources, const SlEvents &events) const
FormulaFactory & factory()
VariableVector _nextStateVariable
Definition: BddComponent.hh:55
Formula class using BDD.
void encodeInitialStates(const Component &component)
std::vector< ConstReference > FormulaVector
Definition: Formula.hh:74
const SlTransitions & transitions() const
const SlEvents & events(std::set< Event > &events)
AutFsm::Transition Transition
Definition: Run.cc:73
void encodeComponent(FormulaFactory &factory, const SynchronisationRules &model, const Component &component, Variable &stateVar, Variable &nextStateVar, Variable &event)
DdAutFsm::EventPropertyId Event
Definition: TrimState.cc:139
VariableVector _stateVariable
Definition: BddComponent.hh:54
const SlStates & reach(const SlStates &sources, const SlEvents &nonObservables, const SlEvents &observations)
std::vector< Reference > VariableVector
Definition: Variable.hh:33
#define require(Exception, expr, message)
Definition: Assertion.hh:90
Namespace of the Diades project.
const SlTransitions & transitions(const SlStates &sources, const SlEvents &events) const
Diades::Utils::Exception< BddComponent > Exception
Definition: BddComponent.hh:39
Variable::VariableVector VariableVector
Definition: BddComponent.hh:40
VariableVector _eventVariable
Definition: BddComponent.hh:56
const SlEvents & event(const Event &event)
const SlTransitions & noTransitions() const
Formula::FormulaVector FormulaVector
Definition: BddComponent.hh:41
void encodeTransitions(const Component &component)
const Formula & encodeTransition(const Component &component, const Transition &transition)
const SlTransitions & transitions(const SlEvents &evt) const