DiaDes  0.1
DIAgnosis of Discrete-Event System
TopologyMap.hh
Go to the documentation of this file.
1 #ifndef __DIADES__AUTOMATA__TOPOLOGYMAP_HH
2 #define __DIADES__AUTOMATA__TOPOLOGYMAP_HH
3 
4 #include<unordered_map>
5 #include<set>
6 #include<algorithm>
13 
14 
15 
16 namespace Diades
17 {
18  namespace Automata
19  {
20 
26  {
27 
28  private:
32 
34  _ConnMap _connMap;
35  _CompMap _compMap;
36  unordered_map<ComponentPointer,Node> _nodeMap;
37  unordered_map<Event,Node> _eventMap;
38 
39  public:
40  static string typeName() { return "AutModel::TopologyMap"; }
42 
43 
44 
45 
46  public:
47  TopologyMap(const Topology & topology):_topology(&topology),_connMap(topology.graph()),_compMap(topology.graph()),_nodeMap(){ }
48  bool valid() const { return _topology!=0 && topology().valid(); }
49  const Topology & topology() const { return *_topology; }
50  void mapComponentToNode(const ObservableComponent & component, Topology::Node itsNode);
51 
52 
53  Node getNodeSourceOf(Event event) const
54  {
55  unordered_map<Event,Node>::const_iterator it = _eventMap.find(event);
56  if(it == _eventMap.end())
57  {
58  return Node();
59  }
60  return it->second;
61  }
62 
63 
65  {
66  require(Exception,node.valid(),"getComponent(): invalid node");
67  require(Exception,&node.owner() == &topology().graph(),
68  "getComponent(): this node does not belong to the Topology");
69  return *_compMap[node];
70  }
71 
72  Topology::Node getNode(const ObservableComponent & component) const
73  {
74  unordered_map<ComponentPointer,Node>::const_iterator it = _nodeMap.find(&component);
75  return it->second;
76  }
77 
79  {
80  if(find(topology().cliqueBegin(connection),topology().cliqueEnd(connection),node)
81  != topology().cliqueEnd(connection))
82  {
83  _connMap[connection].mapEventToNode(event,node);
84  }
85  }
86 
87  void importMap(const string & fileName);
88  void exportMap(const string & fileName);
89 
91  {
92  return _connMap[connection];
93  }
94 
95 
96  };
97  };
98 };
99 
100 
101 #endif
unordered_map< Event, Node > _eventMap
Definition: TopologyMap.hh:37
Diades::Graph::Node Connection
Definition: Topology.hh:38
const Topology * _topology
Definition: TopologyMap.hh:33
const ObservableComponent * ComponentPointer
Definition: TopologyMap.hh:29
TopologyMap(const Topology &topology)
Definition: TopologyMap.hh:47
void importMap(const string &fileName)
unordered_map< ComponentPointer, Node > _nodeMap
Definition: TopologyMap.hh:36
const Topology & topology() const
Definition: TopologyMap.hh:49
An observable Component defined as a automaton.
const Graph & graph() const
Definition: Topology.hh:602
ConstNodeMap< ComponentPointer > _CompMap
Definition: TopologyMap.hh:31
#define require(Exception, expr, message)
Definition: Assertion.hh:90
Namespace of the Diades project.
Diades::Graph::Node Node
Definition: Topology.hh:39
const ConnectionMap & getConnectionMap(Topology::Connection connection) const
Definition: TopologyMap.hh:90
void addConnection(Topology::Connection connection, Topology::Node node, Event event)
Definition: TopologyMap.hh:78
void mapComponentToNode(const ObservableComponent &component, Topology::Node itsNode)
Diades::Utils::Exception< Topology > Exception
Definition: TopologyMap.hh:41
const ObservableComponent & getComponent(Topology::Node node) const
Definition: TopologyMap.hh:64
Node getNodeSourceOf(Event event) const
Definition: TopologyMap.hh:53
void exportMap(const string &fileName)
ConstNodeMap< ConnectionMap > _ConnMap
Definition: TopologyMap.hh:30
Topology::Node getNode(const ObservableComponent &component) const
Definition: TopologyMap.hh:72