DiaDes  0.1
DIAgnosis of Discrete-Event System
ConnectionMap.hh
Go to the documentation of this file.
1 #ifndef __DIADES__AUTOMATA__CONNECTIONMAP_HH
2 #define __DIADES__AUTOMATA__CONNECTIONMAP_HH
3 
4 #include<unordered_map>
5 #include<set>
6 #include<algorithm>
12 
13 namespace Diades
14 {
15  namespace Automata
16  {
17 
18 
20  {
21  private:
25  vector<ComponentPointer> _components;
26  vector<Topology::Node> _componentNodes;
27  vector<Event> _events;
28  unordered_map< Node,vector<Topology::Node>::size_type > _nodeMapping;
29  unordered_map< ComponentPointer,vector<Topology::Node>::size_type > _componentMapping;
30  public:
31  ConnectionMap():_topology(0),_connection(),_nodeMapping(),_componentMapping(){}
33  Topology::Connection connection):_topology(&topology),_connection(connection),_nodeMapping(),_componentMapping(){
34  _componentNodes.insert(_componentNodes.end(),topology.cliqueBegin(connection),
35  topology.cliqueEnd(connection));
36  for(vector<Topology::Node>::size_type index = 0; index < _componentNodes.size();++index)
37  {
38  _nodeMapping[_componentNodes[index]]=index;
39  }
40  _components.resize(_componentNodes.size());
41  _events.resize(_componentNodes.size());
42  }
44  _topology(map._topology),
45  _connection(map._connection),
46  _components(map._components),
47  _componentNodes(map._componentNodes),
48  _events(map._events), _nodeMapping(map._nodeMapping),
49  _componentMapping(map._componentMapping){}
50 
52  {
53  if(this != &map)
54  {
55  _topology = map._topology;
56  _connection = map._connection;
57  _components = map._components;
58  _componentNodes= map._componentNodes;
59  _events = map._events;
60  _nodeMapping = map._nodeMapping;
61  _componentMapping = map._componentMapping;
62  }
63  return *this;
64  }
65 
66  bool null() const
67  {
68  return _topology==0 && !connection().valid();
69  }
70 
71  bool valid() const;
72 
73  const Topology & topology() const { return *_topology; }
74 
76 
77  void mapComponentToNode(const ObservableComponent & component, Node node);
78 
79  void mapEventToNode(Event event, Node node);
80 
81  Event getEvent(Node node) const
82  {
83  unordered_map< Node,vector<Topology::Node>::size_type >::const_iterator it = _nodeMapping.find(node);
84  if(it != _nodeMapping.end())
85  {
86  return _events[it->second];
87  }
88  return Event();
89  }
90 
91  Event getEvent(const ObservableComponent & component) const
92  {
93  unordered_map<ComponentPointer,vector<Topology::Node>::size_type>::const_iterator it = _componentMapping.find(&component);
94  if(it!=_componentMapping.end())
95  {
96  return _events[it->second];
97  }
98  return Event();
99  }
101  {
102  unordered_map< Node,vector<Topology::Node>::size_type >::const_iterator it = _nodeMapping.find(node);
103  return *_components[it->second];
104  }
105 
106 
107  Node getNode(const ObservableComponent & component) const
108  {
109  unordered_map<ComponentPointer,vector<Topology::Node>::size_type>::const_iterator it = _componentMapping.find(&component);
110  if(it!=_componentMapping.end())
111  {
112  return _componentNodes[it->second];
113  }
114  return Node();
115  }
116 
117 
118  typedef vector<Event>::const_iterator EventIterator;
119 
120  EventIterator eventBegin() const
121  {
122  return _events.begin();
123  }
124 
125  EventIterator eventEnd() const
126  {
127  return _events.end();
128  }
129 
130 
131 
132  };
133 
134 
135  };
136 };
137 #endif
CliqueIterator cliqueBegin(Connection connection) const
Definition: Topology.hh:258
ConnectionMap(const Topology &topology, Topology::Connection connection)
ConnectionMap(const ConnectionMap &map)
ConnectionMap & operator=(const ConnectionMap &map)
Topology::Connection _connection
Diades::Graph::Node Connection
Definition: Topology.hh:38
const ObservableComponent * ComponentPointer
Topology::Connection connection() const
void mapEventToNode(Event event, Node node)
const ObservableComponent & getComponent(Node node) const
vector< Event >::const_iterator EventIterator
void mapComponentToNode(const ObservableComponent &component, Node node)
An observable Component defined as a automaton.
DdAutFsm::EventPropertyId Event
Definition: TrimState.cc:139
EventIterator eventBegin() const
const Topology & topology() const
unordered_map< Node, vector< Topology::Node >::size_type > _nodeMapping
Node getNode(const ObservableComponent &component) const
Namespace of the Diades project.
Event getEvent(Node node) const
vector< ComponentPointer > _components
Event getEvent(const ObservableComponent &component) const
vector< Topology::Node > _componentNodes
EventIterator eventEnd() const
unordered_map< ComponentPointer, vector< Topology::Node >::size_type > _componentMapping
CliqueIterator cliqueEnd(Connection connection) const
Definition: Topology.hh:279