11 #ifndef FAUDES_HIO_CONSTRAINT_H
12 #define FAUDES_HIO_CONSTRAINT_H
42 template <
class GlobalAttr,
class StateAttr,
class EventAttr,
class TransAttr>
182 void SetY(
const std::string& rName);
206 void SetU(
const std::string& rName);
236 bool IsY(
const std::string& rName)
const;
258 bool IsU(
const std::string& rName)
const;
292 void SetQY(
const std::string& rName);
315 void ClrQY(
const std::string& rName);
344 bool IsQY(
const std::string& rName)
const;
368 void SetQU(
const std::string& rName);
391 void ClrQU(
const std::string& rName);
420 bool IsQU(
const std::string& rName)
const;
496 bool IsErr(
const std::string& rName)
const;
525 #define THIS THioConstraint<GlobalAttr, StateAttr, EventAttr, TransAttr>
526 #define BASE TaGenerator<GlobalAttr, StateAttr, EventAttr, TransAttr>
527 #define TEMP template <class GlobalAttr, class StateAttr, class EventAttr, class TransAttr>
532 FD_DG(
"HioConstraint(" <<
this <<
")::HioConstraint()");
537 FD_DG(
"HioConstraint(" <<
this <<
")::HioConstraint(rOtherGen)");
542 FD_DG(
"HioConstraint(" <<
this <<
")::HioConstraint(rOtherGen)");
550 ) :
BASE(rOtherGen) {
551 FD_DG(
"HioConstraint(" <<
this <<
")::HioConstraint(rOtherGen)");
557 TEMP THIS::THioConstraint(
const std::string& rFileName) :
BASE(rFileName) {
558 FD_DG(
"HioConstraint(" <<
this <<
")::HioConstraint(rFilename) : done");
566 res->EventSymbolTablep(BASE::mpEventSymbolTable);
567 res->mStateNamesEnabled=BASE::mStateNamesEnabled;
573 return new THIS(*
this);
579 THIS res= BASE::NewAGen();
587 EventAttr attr=BASE::EventAttribute(index);
592 TEMP bool THIS::IsY(
const std::string& rName)
const {
593 EventAttr attr=BASE::EventAttribute(rName);
599 EventAttr attr=BASE::EventAttribute(index);
604 TEMP bool THIS::IsU(
const std::string& rName)
const {
605 EventAttr attr=BASE::EventAttribute(rName);
611 FD_DG(
"HioConstraint(" <<
this <<
")::YEvents()");
613 EventSet::Iterator it;
614 for(it=BASE::AlphabetBegin(); it!=BASE::AlphabetEnd(); it++) {
615 if(IsY(*it)) res.
Insert(*it);
622 FD_DG(
"HioConstraint(" <<
this <<
")::UEvents()");
624 EventSet::Iterator it;
625 for(it=BASE::AlphabetBegin(); it!=BASE::AlphabetEnd(); it++) {
626 if(IsU(*it)) res.
Insert(*it);
635 FD_DG(
"HioConstraint(" <<
this <<
")::InsYEvent(" << index <<
")");
638 BASE::InsEvent(index,attr);
642 TEMP Idx THIS::InsYEvent(
const std::string& rName) {
643 FD_DG(
"HioConstraint(" <<
this <<
")::InsYEvent(" << rName <<
")");
646 return BASE::InsEvent(rName,attr);
651 FD_DG(
"HioConstraint(" <<
this <<
")::InsUEvent(" << index <<
")");
654 BASE::InsEvent(index,attr);
658 TEMP Idx THIS::InsUEvent(
const std::string& rName) {
659 FD_DG(
"HioConstraint(" <<
this <<
")::InsUEvent(" << rName <<
")");
662 return BASE::InsEvent(rName,attr);
667 FD_DG(
"HioConstraint(" <<
this <<
")::SetY(" << index <<
")");
668 EventAttr attr=BASE::EventAttribute(index);
670 BASE::pAlphabet->Attribute(index,attr);
674 TEMP void THIS::SetY(
const std::string& rName) {
675 FD_DG(
"HioConstraint(" <<
this <<
")::SetY(" << rName <<
")");
676 Idx index = BASE::EventIndex(rName);
682 FD_DG(
"HioConstraint(" <<
this <<
")::SetY(rEvents)");
683 EventSet::Iterator it;
684 for(it=rEvents.
Begin(); it!=rEvents.
End(); it++) {
691 FD_DG(
"HioConstraint(" <<
this <<
")::SetU(" << index <<
")");
692 EventAttr attr=BASE::EventAttribute(index);
694 BASE::pAlphabet->Attribute(index,attr);
698 TEMP void THIS::SetU(
const std::string& rName) {
699 FD_DG(
"HioConstraint(" <<
this <<
")::SetU(" << rName <<
")");
700 Idx index = BASE::EventIndex(rName);
706 FD_DG(
"HioConstraint(" <<
this <<
")::SetU(rEvents)");
707 EventSet::Iterator it;
708 for(it=rEvents.
Begin(); it!=rEvents.
End(); it++) {
719 FD_DG(
"HioConstraint(" <<
this <<
")::SetQY(" << index <<
")");
720 StateAttr attr=BASE::StateAttribute(index);
729 BASE::pStates->Attribute(index,attr);
733 TEMP void THIS::SetQY(
const std::string& rName) {
734 FD_DG(
"HioConstraint(" <<
this <<
")::SetQY(" << rName <<
")");
735 Idx index = BASE::StateIndex(rName);
741 FD_DG(
"HioConstraint(" <<
this <<
")::SetQY(rStates)");
742 StateSet::Iterator sit;
743 for(sit=rStates.
Begin(); sit!=rStates.
End(); sit++) {
750 FD_DG(
"HioConstraint(" <<
this <<
")::ClrQY(" << index <<
")");
751 StateAttr attr=BASE::StateAttribute(index);
753 BASE::pStates->Attribute(index,attr);
757 TEMP void THIS::ClrQY(
const std::string& rName) {
758 FD_DG(
"HioConstraint(" <<
this <<
")::ClrQY(" << rName <<
")");
759 Idx index = BASE::StateIndex(rName);
765 FD_DG(
"HioConstraint(" <<
this <<
")::ClrQY(rStates)");
766 StateSet::Iterator sit;
767 for(sit=rStates.
Begin(); sit!=rStates.
End(); sit++) {
774 StateAttr attr=BASE::StateAttribute(index);
779 TEMP bool THIS::IsQY(
const std::string& rName)
const {
780 Idx index = BASE::StateIndex(rName);
786 FD_DG(
"HioConstraint(" <<
this <<
")::QYStates()");
788 StateSet::Iterator sit;
789 for(sit=BASE::StatesBegin(); sit!=BASE::StatesEnd(); sit++) {
790 if(IsQY(*sit)) res.
Insert(*sit);
798 FD_DG(
"HioConstraint(" <<
this <<
")::SetQU(" << index <<
")");
799 StateAttr attr=BASE::StateAttribute(index);
808 BASE::pStates->Attribute(index,attr);
812 TEMP void THIS::SetQU(
const std::string& rName) {
813 FD_DG(
"HioConstraint(" <<
this <<
")::SetQU(" << rName <<
")");
814 Idx index = BASE::StateIndex(rName);
820 FD_DG(
"HioConstraint(" <<
this <<
")::SetQU(rStates)");
821 StateSet::Iterator sit;
822 for(sit=rStates.
Begin(); sit!=rStates.
End(); sit++) {
829 FD_DG(
"HioConstraint(" <<
this <<
")::ClrQU(" << index <<
")");
830 StateAttr attr=BASE::StateAttribute(index);
832 BASE::pStates->Attribute(index,attr);
836 TEMP void THIS::ClrQU(
const std::string& rName) {
837 FD_DG(
"HioConstraint(" <<
this <<
")::ClrQU(" << rName <<
")");
838 Idx index = BASE::StateIndex(rName);
844 FD_DG(
"HioConstraint(" <<
this <<
")::ClrQU(rStates)");
845 StateSet::Iterator sit;
846 for(sit=rStates.
Begin(); sit!=rStates.
End(); sit++) {
853 StateAttr attr=BASE::StateAttribute(index);
858 TEMP bool THIS::IsQU(
const std::string& rName)
const {
859 Idx index = BASE::StateIndex(rName);
865 FD_DG(
"HioConstraint(" <<
this <<
")::QUStates()");
867 StateSet::Iterator sit;
868 for(sit=BASE::StatesBegin(); sit!=BASE::StatesEnd(); sit++) {
869 if(IsQU(*sit)) res.
Insert(*sit);
876 FD_DG(
"HioPlant(" <<
this <<
")::SetErr(" << index <<
")");
877 StateAttr attr=BASE::StateAttribute(index);
879 BASE::pStates->Attribute(index,attr);
883 TEMP void THIS::SetErr(
const std::string& rName) {
884 FD_DG(
"HioPlant(" <<
this <<
")::SetErr(" << rName <<
")");
885 Idx index = BASE::StateIndex(rName);
891 FD_DG(
"HioPlant(" <<
this <<
")::SetErr(rStates)");
892 StateSet::Iterator sit;
893 for(sit=rStates.
Begin(); sit!=rStates.
End(); sit++) {
900 FD_DG(
"HioPlant(" <<
this <<
")::ClrErr(" << index <<
")");
901 StateAttr attr=BASE::StateAttribute(index);
903 BASE::pStates->Attribute(index,attr);
907 TEMP void THIS::ClrErr(
const std::string& rName) {
908 FD_DG(
"HioPlant(" <<
this <<
")::ClrErr(" << rName <<
")");
909 Idx index = BASE::StateIndex(rName);
915 FD_DG(
"HioPlant(" <<
this <<
")::ClrErr(rStates)");
916 StateSet::Iterator sit;
917 for(sit=rStates.
Begin(); sit!=rStates.
End(); sit++) {
924 StateAttr attr=BASE::StateAttribute(index);
929 TEMP bool THIS::IsErr(
const std::string& rName)
const {
930 Idx index = BASE::StateIndex(rName);
936 FD_DG(
"HioPlant(" <<
this <<
")::ErrStates()");
938 StateSet::Iterator sit;
939 for(sit=BASE::StatesBegin(); sit!=BASE::StatesEnd(); sit++) {
940 if(IsErr(*sit)) res.
Insert(*sit);
989 std::string& rReportStr);
bool Insert(const Idx &rIndex)
bool IsU(Idx index) const
bool IsQY(const std::string &rName) const
void SetY(const EventSet &rEvents)
bool IsErr(const std::string &rName) const
virtual bool UpdateAttributes(void)
void ClrQY(const StateSet &rStates)
StateSet ErrStates(void) const
bool IsY(Idx index) const
bool IsQY(Idx index) const
void SetQU(const std::string &rName)
bool IsY(const std::string &rName) const
EventSet UEvents(void) const
StateSet QUStates(void) const
THioConstraint(const Generator &rOtherGen, const EventSet &rY, const EventSet &rU)
bool IsU(const std::string &rName) const
THioConstraint(const std::string &rFileName)
bool IsQU(Idx index) const
void ClrQY(const std::string &rName)
void SetQY(const StateSet &rStates)
void SetU(const EventSet &rEvents)
void SetQY(const std::string &rName)
void InsUEvent(Idx index)
virtual THioConstraint * Copy(void) const
void ClrErr(const std::string &rName)
THioConstraint NewHioConstraint(void) const
bool IsErr(Idx index) const
THioConstraint(const Generator &rOtherGen)
void InsYEvent(Idx index)
Idx InsYEvent(const std::string &rName)
THioConstraint * New(void) const
StateSet QYStates(void) const
void SetU(const std::string &rName)
void SetQU(const StateSet &rStates)
void ClrQU(const std::string &rName)
bool IsQU(const std::string &rName) const
void SetErr(const std::string &rName)
void ClrErr(const StateSet &rStates)
void ClrQU(const StateSet &rStates)
void SetErr(const StateSet &rStates)
EventSet YEvents(void) const
THioConstraint(const THioConstraint &rOtherGen)
void SetY(const std::string &rName)
Idx InsUEvent(const std::string &rName)
Iterator Begin(void) const
bool IsHioConstraintForm(HioConstraint &rHioConstraint, StateSet &rQY, StateSet &rQU, EventSet &rErrEvSet, TransSet &rErrTrSet, StateSet &rErrStSet, std::string &rReportStr)
void HioStatePartition(HioConstraint &rHioConstraint)
THioConstraint< AttributeVoid, HioStateFlags, HioEventFlags, AttributeVoid > HioConstraint