24                 std::string& rReportStr)
 
   26     FD_DF(
"IsHioControllerForm("<< rHioController.
Name() << 
",...)");
 
   35     rErrEvSet.
Name(
"rErrEvSet");
 
   38     rErrTrSet.
Name(
"rErrTrSet");
 
   41     rErrStSet.
Name(
"rErrStSet");
 
   50     bool finalResult = 
true;
 
   52     bool localResult = 
true;
 
   65     EventSet::Iterator evit;
 
   66     StateSet::Iterator sit;
 
   70     rReportStr.append(
"#########################################################\n");
 
   71     rReportStr.append(
"########## IsHioControllerForm("+rHioController.
Name()+
",...) - test results:\n");
 
   76         rReportStr.append(
"##### fail: generator is not deterministic!\n");
 
   77         if(initStates.
Size()>1) {
 
   78        rErrStSet = initStates;
 
   79        rReportStr.append(
"##### (amongst others, there is more than one initial state)\n");
 
   84     rReportStr.append(
"#####\n");
 
   90     rReportStr.append(
"########## Condition (i):\n");
 
   94        rReportStr.append(
"##### fail: empty YP alphabet.\n");
 
   99        rReportStr.append(
"##### fail: empty UP alphabet.\n");
 
  104        rReportStr.append(
"##### fail: empty YC alphabet.\n");
 
  109        rReportStr.append(
"##### fail: empty UC alphabet.\n");
 
  122     if(!rErrEvSet.
Empty()){
 
  123             rReportStr.append(
"##### fail: found events with missing or ambiguous attribute, see rErrEvSet:\n");
 
  124             rReportStr.append(rErrEvSet.
ToString()+
"\n");
 
  125             rReportStr.append(
"##### Condition (i) failed.\n");
 
  126             rReportStr.append(
"########## Termination due to crucial failure. ##########\n");
 
  127             rReportStr.append(
"#########################################################\n");
 
  130     if(localResult) rReportStr.append(
"##### Condition (i) passed.\n");
 
  131     else rReportStr.append(
"##### Condition (i) failed.\n");
 
  132     rReportStr.append(
"#####\n");
 
  138     rReportStr.append(
"########## Condition (ii):\n");
 
  142     for(sit = accessibleStates.
Begin(); sit != accessibleStates.
End(); ++sit) {
 
  148             bool goodState = 
true;
 
  152             if(activeEv.
Empty()) {
 
  159                 evit = activeEv.
Begin();
 
  160                 isUc  = rHioController.
IsUc(*evit);
 
  161                 isYcUp = rHioController.
IsYc(*evit); 
 
  162                 isUp = rHioController.
IsUp(*evit); 
 
  163                 isYp = rHioController.
IsYp(*evit);
 
  165                 for(; evit != activeEv.
End(); evit++) {
 
  166                     if( (isUc && !rHioController.
IsUc(*evit)) ||            
 
  167             ((isYcUp||isUp) && (!rHioController.
IsYc(*evit) && (!rHioController.
IsUp(*evit)))) ||
 
  168                         (isYp &&  !rHioController.
IsYp(*evit)) ){
 
  176                     if(isUp && rHioController.
IsYc(*evit)) {
 
  184                 if(!goodState) 
continue; 
 
  189                    rHioController.
SetQUc(*sit);
 
  197                    rHioController.
SetQUp(*sit);
 
  201                     rHioController.
SetQYp(*sit);
 
  206     if(localResult) rReportStr.append(
"##### Condition (ii) passed.\n");
 
  209         rReportStr.append(
"##### fail: found states with undecidable attribute:\n");
 
  210         rReportStr.append(locErrStSet.
ToString()+
"\n");
 
  211         rReportStr.append(
"##### Condition (ii) failed.\n");
 
  212         rReportStr.append(
"########## Termination due to crucial failure. ##########\n");
 
  213         rReportStr.append(
"###################### No success. ######################\n");
 
  214         rReportStr.append(
"#########################################################\n");
 
  219     rReportStr.append(
"#####\n");
 
  225     rReportStr.append(
"########## Condition (iii):\n");
 
  228     if(!(initStates <= rQYP)) {
 
  229         rReportStr.append(
"##### fail: some init state(s) is (are) not a QYP-state:\n");
 
  230     locErrStSet=initStates-rQYP;
 
  231         rReportStr.append(locErrStSet.
ToString()+
"\n");
 
  237     if(localResult) rReportStr.append(
"##### Condition (iii) passed.\n");
 
  238     else rReportStr.append(
"##### Condition (iii) failed.\n");
 
  239     rReportStr.append(
"#####\n");
 
  246     rReportStr.append(
"########## Condition (iv):\n");
 
  249     for(sit = rQYP.
Begin(); sit != rQYP.
End(); ++sit) {
 
  252             if ( !( rQYcUp.
Exists(tit->X2) || rQUp.
Exists(tit->X2) ) ) {
 
  262     if(localResult) rReportStr.append(
"##### Condition (iv) passed.\n");
 
  264         rReportStr.append(
"##### fail: found YP-transitions leading to wrong states:\n");
 
  265         rReportStr.append(locErrTrSet.
ToString()+
"\n");
 
  267         rReportStr.append(
"##### Condition (iv) failed.\n");
 
  269     rReportStr.append(
"#####\n");
 
  275     rReportStr.append(
"########## Condition (v):\n");
 
  278     for(sit = rQUp.
Begin(); sit != rQUp.
End(); ++sit) {
 
  280             if(!rQYP.
Exists(tit->X2)) {
 
  289     if(localResult) rReportStr.append(
"##### Condition (v) passed.\n");
 
  291         rReportStr.append(
"##### fail: found UP-transitions leading to wrong states, see rErrTrSet:\n");
 
  292         rReportStr.append(locErrTrSet.
ToString()+
"\n");
 
  294         rReportStr.append(
"##### Condition (v) failed.\n");
 
  296     rReportStr.append(
"#####\n");
 
  302     rReportStr.append(
"########## Condition (vi):\n");
 
  306     for(sit = rQYcUp.
Begin(); sit != rQYcUp.
End(); ++sit) {
 
  309             if( (rHioController.
IsUp(tit->Ev) && !rQYP.
Exists(tit->X2)) ||
 
  310                 (rHioController.
IsYc(tit->Ev) && !rQUc.
Exists(tit->X2)) ){
 
  319     if(localResult) rReportStr.append(
"##### Condition (vi) passed.\n");
 
  321         rReportStr.append(
"##### fail: found YC- or UP-transitions leading to wrong states:\n");
 
  322         rReportStr.append(locErrTrSet.
ToString()+
"\n");
 
  324         rReportStr.append(
"##### Condition (vi) failed.\n");
 
  326     rReportStr.append(
"#####\n");
 
  332     rReportStr.append(
"########## Condition (vii):\n");
 
  335     for(sit = rQUc.
Begin(); sit != rQUc.
End(); ++sit) {
 
  337             if(!rQUp.
Exists(tit->X2)) {
 
  346     if(localResult) rReportStr.append(
"##### Condition (vii) passed.\n");
 
  348         rReportStr.append(
"##### fail: found UC-transitions leading to wrong states:\n");
 
  349         rReportStr.append(locErrTrSet.
ToString()+
"\n");
 
  351         rReportStr.append(
"##### Condition (vii) failed.\n");
 
  353     rReportStr.append(
"#####\n");
 
  359     rReportStr.append(
"########## Condition (viii):\n");
 
  362     for(sit = rQUc.
Begin(); sit != rQUc.
End(); ++sit) {
 
  372     if(localResult) rReportStr.append(
"##### Condition (viii) passed.\n");
 
  374         rReportStr.append(
"##### fail: found QUc-states with inactive UC-events:\n");
 
  375         rReportStr.append(locErrStSet.
ToString()+
"\n");
 
  377         rReportStr.append(
"##### Condition (viii) failed.\n");
 
  379     rReportStr.append(
"#####\n");
 
  385     rReportStr.append(
"########## Condition (ix):\n");
 
  388     for(sit = rQYP.
Begin(); sit != rQYP.
End(); ++sit) {
 
  398     if(localResult) rReportStr.append(
"##### Condition (ix) passed.\n");
 
  400         rReportStr.append(
"##### fail: found QYP-states with inactive YP-events:\n");
 
  401         rReportStr.append(locErrStSet.
ToString()+
"\n");
 
  403         rReportStr.append(
"##### Condition (ix) failed.\n");
 
  405     rReportStr.append(
"#####\n");
 
  411     rReportStr.append(
"########## Condition (x):\n");
 
  414     if(!(accessibleStates<=rHioController.
MarkedStates())) {
 
  419     if(localResult) rReportStr.append(
"##### Condition (x) passed.\n");
 
  421         rReportStr.append(
"##### fail: not all accessible states are marked:\n");
 
  422         locErrStSet = accessibleStates - rHioController.
MarkedStates();
 
  424         rReportStr.append(locErrStSet.
ToString()+
"\n");
 
  426         rReportStr.append(
"##### Condition (x) failed.\n");
 
  428     rReportStr.append(
"#####\n");       
 
  434     rReportStr.append(
"########## Condition (xi):\n");
 
  437     if(!deadEnds.
Empty()) {
 
  441         rReportStr.append(
"##### fail: found dead ends:\n");
 
  442         rReportStr.append(deadEnds.
ToString()+
"\n");
 
  444         rReportStr.append(
"##### Condition (xi) failed.\n");
 
  446     rReportStr.append(
"##### Condition (xi) passed.\n");
 
  451     rReportStr.append(
"########## Condition (xii):\n");
 
  456         rReportStr.append(
"##### warning: non-accessible states have been removed.\n");
 
  457     rReportStr.append(
"##### Condition (xii) repaired.\n");
 
  459     else rReportStr.append(
"##### Condition (xii) passed.\n");
 
  465     rReportStr.append(
"##################### Final result: #####################\n");
 
  467         rReportStr.append(
"######### Generator is in HioControllerForm. #########\n");
 
  468         rReportStr.append(
"#########################################################\n");
 
  472         rReportStr.append(
"########### Generator is NOT in HioControllerForm. ###########\n");
 
  473         rReportStr.append(
"#########################################################\n");
 
  487      return IsHioControllerForm(rHioController, QUc, QYP, QUp, QYcUp, ErrEvSet, ErrTrSet, ErrStSet, rReportStr);
 
  496      std::string ReportStr;
 
  498      return IsHioControllerForm(rHioController, QUc, QYP, QUp, QYcUp, ErrEvSet, ErrTrSet, ErrStSet, ReportStr);
 
const std::string & Name(void) const
 
EventSet PEvents(void) const
 
EventSet YcEvents(void) const
 
EventSet CEvents(void) const
 
EventSet UcEvents(void) const
 
EventSet YpEvents(void) const
 
bool IsUc(Idx index) const
 
bool IsUp(Idx index) const
 
bool IsYp(Idx index) const
 
EventSet UpEvents(void) const
 
bool IsYc(Idx index) const
 
bool Insert(const Transition &rTransition)
 
TBaseSet< Transition, TransSort::X1EvX2 >::Iterator Iterator
 
const TaEventSet< EventAttr > & Alphabet(void) const
 
std::string ToString(const std::string &rLabel="", const Type *pContext=0) const
 
const StateSet & MarkedStates(void) const
 
EventSet ActiveEventSet(Idx x1) const
 
const StateSet & InitStates(void) const
 
TransSet::Iterator TransRelBegin(void) const
 
bool IsAccessible(void) const
 
StateSet AccessibleSet(void) const
 
TransSet::Iterator TransRelEnd(void) const
 
bool IsDeterministic(void) const
 
bool Exists(const T &rElem) const
 
virtual void InsertSet(const TBaseSet &rOtherSet)
 
Iterator Begin(void) const
 
void HioStatePartition(HioConstraint &rHioConstraint)
 
bool IsHioControllerForm(HioController &rHioController, StateSet &rQUc, StateSet &rQYP, StateSet &rQUp, StateSet &rQYcUp, EventSet &rErrEvSet, TransSet &rErrTrSet, StateSet &rErrStSet, std::string &rReportStr)