1 #ifndef __DIADES__AUTOMATA__SYNCHRONISATION__RULES__HH 2 #define __DIADES__AUTOMATA__SYNCHRONISATION__RULES__HH 39 ComponentVector::size_type
index) : _pVect(pVect), _pEvent(pEvent), _index(index) {
52 return *(_pVect->operator[](
_index));
59 return (_pVect->operator[](_index));
83 return (_pVect == compIt.
_pVect) && (_pEvent == compIt.
_pEvent)
84 && (_index == compIt.
_index);
91 return !(*
this == compIt);
104 ComponentVector::size_type
index()
const {
125 return "Automata::SynchronisationEvent";
180 _components(sync._components), _support(),
181 _events(sync._events),
182 _synchronised(sync._synchronised) {
207 return _components.size();
214 return _support.size();
222 bool isValid()
const;
240 require(Exception, isValid(),
"The synchronisation event is invalid");
241 ensure(Exception, _synchronised.
isValid(),
"The returned synchronised event is invalid");
242 return _synchronised;
249 return ComponentIterator(&_components, &_events, 0);
256 return ComponentIterator(&_components, &_events, _components.size());
263 return ComponentIterator(&_support, &_supportEvents, 0);
270 return ComponentIterator(&_support, &_supportEvents, _support.size());
284 require(Exception, findComponent(comp) != endOfComponents(),
"getAssociatedEvent: the component does not exist in the synchronisation event");
285 ComponentIterator it = findComponent(comp);
286 if (it == endOfComponents()) {
297 ComponentIterator findComponent(
const Component & component)
const;
302 ComponentIterator findSupportComponent(
const Component & component)
const;
317 void updateSynchroniseEvent();
337 return "Automata::SynchronisationRules";
369 void setComponentVector(
const ComponentVector & components);
375 return _synchros.begin();
382 return _synchros.end();
389 return _components.size();
396 return _synchros.size();
403 return ComponentIterator(&_components, 0, 0);
410 return ComponentIterator(&_components, 0, _components.size());
421 require(Exception, index < numberOfComponents(),
423 % index % numberOfComponents());
424 return *_components[
index];
433 ComponentIterator findComponent(
const string & name)
const;
441 ComponentIterator findComponent(
const Component & component)
const;
458 void getSynchronisationEvents(
const Component & component,
Event event,
459 list< SynchronisationEvent::ConstPointer > & events)
const;
466 return !_components.empty() && accumulate(_synchros.begin(), _synchros.end(),
true, AccValidity());
559 void synchronise(
Event e);
568 void synchronise(
const vector<Event> & e);
580 void synchronise(
const vector<Event> & e,
bool relaxation);
vector< const Component * > ComponentVector
const Component & operator*() const
_ComponentIterator(const _ComponentIterator &it)
list< SynchronisationEvent >::const_iterator SynchronisationIterator
vector< Event > EventVector
ConstPointer getPointer() const
ComponentIterator beginOfComponents() const
SynchronisationEvent & operator=(const SynchronisationEvent &sync)
bool operator!=(const _ComponentIterator &compIt) const
Event getAssociatedEvent(const ComponentIterator &it) const
ComponentVector::size_type _index
vector< Event > EventVector
EventVector _supportEvents
ComponentVector::size_type index() const
ComponentIterator beginOfComponents() const
_ComponentIterator & operator++()
ComponentVector::size_type size_type
const Component & getComponent(size_type index) const
#define ensure(Exception, expr, message)
const SynchronisationEvent * ConstPointer
Diades::Utils::Exception< SynchronisationRules > Exception
vector< const Component * > ComponentVector
ParametrizedSynchronisation()
SynchronisationIterator beginOfSynchronisedEvents() const
size_type supportSize() const
Event getAssociatedEvent(const Component &comp) const
const ComponentVector * _pVect
ComponentVector _components
_ComponentIterator ComponentIterator
list< SynchronisationEvent > _synchros
_ComponentIterator ComponentIterator
ComponentIterator endOfSupport() const
DdAutFsm::EventPropertyId Event
ComponentVector _components
size_type numberOfComponents() const
bool operator==(const _ComponentIterator &compIt) const
_ComponentIterator SupportIterator
vector< const Component * > ComponentVector
#define require(Exception, expr, message)
const Event & synchronisedEvent() const
Namespace of the Diades project.
ComponentIterator endOfComponents() const
Diades::Utils::Exception< SynchronisationEvent > Exception
set< set< Event > > _isSynchronized
Event getAssociatedEvent() const
SynchronisationEvent(const SynchronisationEvent &sync)
SynchronisationIterator endOfSynchronisedEvents() const
bool operator==(const SynchronisationRules &rules) const
_ComponentIterator(const ComponentVector *pVect, const EventVector *pEvent, ComponentVector::size_type index)
const Component * operator->() const
ComponentVector::size_type size_type
_ComponentIterator operator++(int)
ComponentIterator endOfComponents() const
ostream & operator<<(ostream &os, const DiagState &dstate)
const EventVector * _pEvent
ComponentIterator beginOfSupport() const