|
@@ -37,12 +37,12 @@
|
|
|
|
|
|
namespace paradevs { namespace pdevs {
|
|
namespace paradevs { namespace pdevs {
|
|
|
|
|
|
-template < class Time, class SchedulerHandle,
|
|
|
|
|
|
+template < class Time,
|
|
class GraphParameters = common::NoParameters >
|
|
class GraphParameters = common::NoParameters >
|
|
class GraphManager
|
|
class GraphManager
|
|
{
|
|
{
|
|
public:
|
|
public:
|
|
- GraphManager(common::Coordinator < Time, SchedulerHandle >* coordinator,
|
|
|
|
|
|
+ GraphManager(common::Coordinator < Time >* coordinator,
|
|
const GraphParameters& /* parameters */) :
|
|
const GraphParameters& /* parameters */) :
|
|
_coordinator(coordinator)
|
|
_coordinator(coordinator)
|
|
{ }
|
|
{ }
|
|
@@ -50,15 +50,15 @@ public:
|
|
virtual ~GraphManager()
|
|
virtual ~GraphManager()
|
|
{ }
|
|
{ }
|
|
|
|
|
|
- void add_child(common::Model < Time, SchedulerHandle >* child)
|
|
|
|
|
|
+ void add_child(common::Model < Time >* child)
|
|
{
|
|
{
|
|
_child_list.push_back(child);
|
|
_child_list.push_back(child);
|
|
child->set_parent(_coordinator);
|
|
child->set_parent(_coordinator);
|
|
}
|
|
}
|
|
|
|
|
|
- void add_link(common::Model < Time, SchedulerHandle >* src_model,
|
|
|
|
|
|
+ void add_link(common::Model < Time >* src_model,
|
|
const std::string& src_port_name,
|
|
const std::string& src_port_name,
|
|
- common::Model < Time, SchedulerHandle >* dst_model,
|
|
|
|
|
|
+ common::Model < Time >* dst_model,
|
|
const std::string& dst_port_name)
|
|
const std::string& dst_port_name)
|
|
{
|
|
{
|
|
assert((src_model != _coordinator and
|
|
assert((src_model != _coordinator and
|
|
@@ -77,69 +77,62 @@ public:
|
|
_link_list.add(src_model, src_port_name, dst_model, dst_port_name);
|
|
_link_list.add(src_model, src_port_name, dst_model, dst_port_name);
|
|
}
|
|
}
|
|
|
|
|
|
- const common::Models < Time, SchedulerHandle >& children() const
|
|
|
|
|
|
+ const common::Models < Time >& children() const
|
|
{ return _child_list; }
|
|
{ return _child_list; }
|
|
|
|
|
|
- void dispatch_events(common::Bag < Time, SchedulerHandle > bag,
|
|
|
|
|
|
+ void dispatch_events(common::Bag < Time > bag,
|
|
typename Time::type t)
|
|
typename Time::type t)
|
|
{
|
|
{
|
|
for (auto & ymsg : bag) {
|
|
for (auto & ymsg : bag) {
|
|
- typename common::Links < Time,
|
|
|
|
- SchedulerHandle >::Result result_model =
|
|
|
|
|
|
+ typename common::Links < Time >::Result result_model =
|
|
_link_list.find(ymsg.get_model(),
|
|
_link_list.find(ymsg.get_model(),
|
|
ymsg.get_port_name());
|
|
ymsg.get_port_name());
|
|
|
|
|
|
- for (typename common::Links < Time, SchedulerHandle >::
|
|
|
|
|
|
+ for (typename common::Links < Time >::
|
|
const_iterator it = result_model.first;
|
|
const_iterator it = result_model.first;
|
|
it != result_model.second; ++it) {
|
|
it != result_model.second; ++it) {
|
|
// event on output port of coupled Model
|
|
// event on output port of coupled Model
|
|
if (it->second.get_model() == _coordinator) {
|
|
if (it->second.get_model() == _coordinator) {
|
|
- common::Bag < Time, SchedulerHandle > ymessages;
|
|
|
|
|
|
+ common::Bag < Time > ymessages;
|
|
|
|
|
|
ymessages.push_back(
|
|
ymessages.push_back(
|
|
- common::ExternalEvent <
|
|
|
|
- Time, SchedulerHandle >(it->second,
|
|
|
|
- ymsg.get_content()));
|
|
|
|
- dynamic_cast < common::Coordinator <
|
|
|
|
- Time, SchedulerHandle >* >(
|
|
|
|
- _coordinator->get_parent())->dispatch_events(
|
|
|
|
- ymessages, t);
|
|
|
|
|
|
+ common::ExternalEvent <Time >(it->second,
|
|
|
|
+ ymsg.get_content()));
|
|
|
|
+ dynamic_cast < common::Coordinator < Time >* >(
|
|
|
|
+ _coordinator->get_parent())->dispatch_events(
|
|
|
|
+ ymessages, t);
|
|
} else { // event on input port of internal model
|
|
} else { // event on input port of internal model
|
|
it->second.get_model()->post_event(
|
|
it->second.get_model()->post_event(
|
|
- t, common::ExternalEvent <
|
|
|
|
- Time, SchedulerHandle >(
|
|
|
|
- it->second, ymsg.get_content()));
|
|
|
|
|
|
+ t, common::ExternalEvent < Time >(
|
|
|
|
+ it->second, ymsg.get_content()));
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
|
|
- bool exist_link(common::Model < Time, SchedulerHandle >* src_model,
|
|
|
|
|
|
+ bool exist_link(common::Model < Time >* src_model,
|
|
const std::string& src_port_name,
|
|
const std::string& src_port_name,
|
|
- common::Model < Time, SchedulerHandle >* dst_model,
|
|
|
|
|
|
+ common::Model < Time >* dst_model,
|
|
const std::string& dst_port_name) const
|
|
const std::string& dst_port_name) const
|
|
{
|
|
{
|
|
return _link_list.exist(src_model, src_port_name, dst_model,
|
|
return _link_list.exist(src_model, src_port_name, dst_model,
|
|
dst_port_name);
|
|
dst_port_name);
|
|
}
|
|
}
|
|
|
|
|
|
- common::Coordinator < Time, SchedulerHandle >* get_coordinator() const
|
|
|
|
|
|
+ common::Coordinator < Time >* get_coordinator() const
|
|
{ return _coordinator; }
|
|
{ return _coordinator; }
|
|
|
|
|
|
void post_event(typename Time::type t,
|
|
void post_event(typename Time::type t,
|
|
- const common::ExternalEvent < Time,
|
|
|
|
- SchedulerHandle >& event)
|
|
|
|
|
|
+ const common::ExternalEvent < Time >& event)
|
|
{
|
|
{
|
|
- typename common::Links < Time, SchedulerHandle >::Result result =
|
|
|
|
|
|
+ typename common::Links < Time >::Result result =
|
|
_link_list.find(_coordinator, event.get_port_name());
|
|
_link_list.find(_coordinator, event.get_port_name());
|
|
|
|
|
|
- for (typename common::Links < Time,
|
|
|
|
- SchedulerHandle >::const_iterator it_r =
|
|
|
|
|
|
+ for (typename common::Links < Time >::const_iterator it_r =
|
|
result.first; it_r != result.second; ++it_r) {
|
|
result.first; it_r != result.second; ++it_r) {
|
|
it_r->second.get_model()->post_event(
|
|
it_r->second.get_model()->post_event(
|
|
- t, common::ExternalEvent <
|
|
|
|
- Time, SchedulerHandle >(it_r->second,
|
|
|
|
- event.get_content()));
|
|
|
|
|
|
+ t, common::ExternalEvent < Time >(it_r->second,
|
|
|
|
+ event.get_content()));
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
|
|
@@ -156,9 +149,9 @@ public:
|
|
}
|
|
}
|
|
|
|
|
|
private:
|
|
private:
|
|
- common::Links < Time, SchedulerHandle > _link_list;
|
|
|
|
- common::Models < Time, SchedulerHandle > _child_list;
|
|
|
|
- common::Coordinator < Time, SchedulerHandle >* _coordinator;
|
|
|
|
|
|
+ common::Links < Time > _link_list;
|
|
|
|
+ common::Models < Time > _child_list;
|
|
|
|
+ common::Coordinator < Time >* _coordinator;
|
|
};
|
|
};
|
|
|
|
|
|
} } // namespace paradevs pdevs
|
|
} } // namespace paradevs pdevs
|