9 #ifndef __DIADES__AUTOMATA__EXPERIMENTAL__SYNCHRONISATIONRULES_HH 10 #define __DIADES__AUTOMATA__EXPERIMENTAL__SYNCHRONISATIONRULES_HH 23 namespace Experimental
39 template<
typename StateMachine>
47 return "Automata::Experimental::SynchronisationRules";
134 std::map<CompId, CompPtr> dictionary;
135 std::for_each(components.begin(), components.end(),
140 dictionary[pComp->id()] = pComp;
144 bool ok = (dictionary.size() == components.size());
147 _components.reserve(components.size());
148 std::for_each(dictionary.begin(), dictionary.end(),
149 [&](
const std::pair<CompId, CompPtr> & p)
151 _components.push_back(p.second);
187 return _synchros.begin();
196 return _synchros.end();
205 return _synchros.begin();
214 return _synchros.end();
224 return _synchros.size();
233 return _components.size();
242 return _synchros.size();
276 return *_components[index];
290 return(name == comp.
name());
306 return(ptr == &comp);
338 if(compIt != it->endOfComponents())
340 if(it->getAssociatedEvent(compIt) == event)
357 return !_components.empty() && std::accumulate(_synchros.begin(), _synchros.end(),
true, AccValidity());
379 template<
typename SyncRules,
typename SynchronisationEventEncoder>
389 std::for_each(rules.beginOfSynchronisedEvents(), rules.endOfSynchronisedEvents(),
390 [&](
typename SyncRules::SyncEvent & evt)
392 evt.setSynchronisedEvent(encoder.newEvent(evt));
typename SyncEvent::Size Size
virtual ~SynchronisationRules()=default
ComponentIterator findComponent(const Component &component) const
ConstSynchronisationIterator endOfSynchronisedEvents() const
SynchronisationRulesEncoder(SyncRules &rules)
typename ComponentVector::size_type Size
SynchronisationRules()=default
ComponentIterator endOfComponents() const
typename SyncEvent::ComponentVector ComponentVector
#define ensure(Exception, expr, message)
bool containsEvent(const EventPropertyId &e) const
virtual void clearRules()
SynchronisationRules(const ComponentVector &components)
Size numberOfSynchronisedEvents() const
std::vector< const Component * > ComponentVector
typename SyncEvent::ComponentIterator ComponentIterator
std::list< SyncEvent > SynchronisationList
std::list< SyncEvent > _synchros
ComponentIterator beginOfComponents() const
#define require(Exception, expr, message)
Namespace of the Diades project.
typename SynchronisationList::const_iterator ConstSynchronisationIterator
bool operator==(const SynchronisationRules &rules) const
ComponentVector _components
typename SyncEvent::Event Event
typename Component::EventPropertyId Event
SynchronisationIterator beginOfSynchronisedEvents()
SynchronisationIterator endOfSynchronisedEvents()
ConstSynchronisationIterator beginOfSynchronisedEvents() const
bool setComponentVector(const ComponentVector &components)
void getSynchronisationEvents(const Component &component, Event event, std::list< typename Ptr< SyncEvent >::ConstP > &events) const
ComponentIterator findComponent(const string &name) const
SynchronisationRules & operator=(SynchronisationRules const &other)=default
typename SynchronisationList::iterator SynchronisationIterator
const string & name() const
Size numberOfComponents() const
const Component & getComponent(Size index) const