31 #ifndef __adevs_digraph_h_
32 #define __adevs_digraph_h_
46 template <
class VALUE,
class PORT=
int>
class PortValue
88 template <
class VALUE,
class PORT=
int,
class T =
double>
class Digraph:
89 public Network<PortValue<VALUE,PORT>,T>
129 const node& operator=(
const node& src)
139 bool operator<(
const node& other)
const
141 if (model == other.model)
return port < other.port;
142 return model < other.model;
146 Set<Component*> models;
148 std::map<node,Bag<node> > graph;
151 template <
class VALUE,
class PORT,
class T>
154 assert(model !=
this);
155 models.insert(model);
159 template <
class VALUE,
class PORT,
class T>
163 if (src !=
this) add(src);
164 if (dst !=
this) add(dst);
165 node src_node(src,srcPort);
166 node dst_node(dst,dstPort);
167 graph[src_node].insert(dst_node);
170 template <
class VALUE,
class PORT,
class T>
176 template <
class VALUE,
class PORT,
class T>
182 node src_node(model,x.
port);
183 typename std::map<node,Bag<node> >::iterator graph_iter;
184 graph_iter = graph.find(src_node);
186 if (graph_iter == graph.end())
return;
190 for (node_iter = (*graph_iter).second.begin();
191 node_iter != (*graph_iter).second.end(); node_iter++)
193 event.model = (*node_iter).model;
194 event.value.port = (*node_iter).port;
195 event.value.value = x.
value;
199 template <
class VALUE,
class PORT,
class T>
203 for (i = models.begin(); i != models.end(); i++)