22             std::string& rReportStr)
 
   24     FD_DF(
"IsHioConstraintForm("<< rHioConstraint.
Name() << 
",...)");
 
   31     rErrEvSet.
Name(
"rErrEvSet");
 
   34     rErrTrSet.
Name(
"rErrTrSet");
 
   37     rErrStSet.
Name(
"rErrStSet");
 
   46     bool finalResult = 
true;
 
   48     bool localResult = 
true;
 
   59     EventSet::Iterator evit;
 
   60     StateSet::Iterator sit;
 
   64     rReportStr.append(
"#########################################################\n");
 
   65     rReportStr.append(
"########## IsHioConstraintForm("+rHioConstraint.
Name()+
",...) - test results:\n");
 
   70         rReportStr.append(
"##### fail: generator is not deterministic!\n");
 
   71         if(initStates.
Size()>1) {
 
   72        rErrStSet = initStates;
 
   73        rReportStr.append(
"##### (amongst others, there is more than one initial state)\n");
 
   78     rReportStr.append(
"#####\n");
 
   84     rReportStr.append(
"########## Condition (i):\n");
 
   88        rReportStr.append(
"##### fail: empty Y alphabet.\n");
 
   93        rReportStr.append(
"##### fail: empty U alphabet.\n");
 
  103     rReportStr.append(
"##### Condition (i) passed.\n");
 
  104     rReportStr.append(
"#####\n");
 
  110     rReportStr.append(
"########## Condition (ii):\n");
 
  113     for(sit = accessibleStates.
Begin(); sit != accessibleStates.
End(); ++sit) {
 
  117             bool goodState = 
true;
 
  121             if(activeEv.
Empty()) {
 
  128                 evit = activeEv.
Begin();
 
  129                 isY  = rHioConstraint.
IsY(*evit);
 
  130                 isU  = rHioConstraint.
IsU(*evit);
 
  132                 for(; evit != activeEv.
End(); evit++) {
 
  133                     if( (isY &&  !rHioConstraint.
IsY(*evit)) || 
 
  134                         (isU && !rHioConstraint.
IsU(*evit))) {
 
  147                 if(!goodState) 
continue; 
 
  152                    rHioConstraint.
SetQY(*sit);
 
  156                    rHioConstraint.
SetQU(*sit);
 
  161     if(localResult) rReportStr.append(
"##### Condition (ii) passed.\n");
 
  164         rReportStr.append(
"##### fail: found states with undecidable attribute:\n");
 
  165         rReportStr.append(locErrStSet.
ToString()+
"\n");
 
  167         rReportStr.append(
"##### Condition (ii) failed.\n");
 
  168         rReportStr.append(
"########## Termination due to crucial failure. ##########\n");
 
  169         rReportStr.append(
"###################### No success. ######################\n");
 
  170         rReportStr.append(
"#########################################################\n");
 
  173     rReportStr.append(
"#####\n");
 
  179     rReportStr.append(
"########## Condition (iii):\n");
 
  182     if(!(initStates <= rQY)) {
 
  183         rReportStr.append(
"##### fail: some init state(s) is (are) not a QY-state:\n");
 
  184     locErrStSet=initStates-rQY;
 
  185     rReportStr.append(locErrStSet.
ToString()+
"\n");
 
  191     if(localResult) rReportStr.append(
"##### Condition (iii) passed.\n");
 
  192     else rReportStr.append(
"##### Condition (iii) failed.\n");
 
  193     rReportStr.append(
"#####\n");
 
  200     rReportStr.append(
"########## Condition (iv):\n");
 
  203     for(sit = rQY.
Begin(); sit != rQY.
End(); ++sit) {
 
  206             if( (rHioConstraint.
IsY(tit->Ev) && !rQU.
Exists(tit->X2)) ) {
 
  216     if(localResult) rReportStr.append(
"##### Condition (iv) passed.\n");
 
  218         rReportStr.append(
"##### fail: found Y-transitions leading to wrong states:\n");
 
  219         rReportStr.append(locErrTrSet.
ToString()+
"\n");
 
  221         rReportStr.append(
"##### Condition (iv) failed.\n");
 
  223     rReportStr.append(
"#####\n");
 
  229     rReportStr.append(
"########## Condition (v):\n");
 
  232     for(sit = rQU.
Begin(); sit != rQU.
End(); ++sit) {
 
  234             if(!rQY.
Exists(tit->X2)) {
 
  243     if(localResult) rReportStr.append(
"##### Condition (v) passed.\n");
 
  245         rReportStr.append(
"##### fail: found U-transitions leading to wrong states:\n");
 
  246         rReportStr.append(locErrTrSet.
ToString()+
"\n");
 
  248         rReportStr.append(
"##### Condition (v) failed.\n");
 
  250     rReportStr.append(
"#####\n");
 
  256     rReportStr.append(
"########## Condition (vi):\n");
 
  259     for(sit = rQY.
Begin(); sit != rQY.
End(); ++sit) {
 
  269     if(localResult) rReportStr.append(
"##### Condition (vi) passed.\n");
 
  271         rReportStr.append(
"##### fail: found QY-states with inactive Y-events:\n");
 
  272         rReportStr.append(locErrStSet.
ToString()+
"\n");
 
  274         rReportStr.append(
"##### Condition (vi) failed.\n");
 
  276     rReportStr.append(
"#####\n");
 
  282     rReportStr.append(
"########## Condition (vii):\n");
 
  285     if(!deadEnds.
Empty()) {
 
  289         rReportStr.append(
"##### fail: found dead ends:\n");
 
  290     rReportStr.append(deadEnds.
ToString()+
"\n");
 
  292         rReportStr.append(
"##### Condition (vii) failed.\n");
 
  294     rReportStr.append(
"##### Condition (vii) passed.\n");
 
  300     rReportStr.append(
"########## Condition (viii):\n");
 
  303     if(!(accessibleStates<=rHioConstraint.
MarkedStates())) {
 
  308     if(localResult) rReportStr.append(
"##### Condition (viii) passed.\n");
 
  310         rReportStr.append(
"##### fail: not all accessible states are marked:\n");
 
  311         locErrStSet=accessibleStates - rHioConstraint.
MarkedStates();
 
  313         rReportStr.append(locErrStSet.
ToString()+
"\n");
 
  315         rReportStr.append(
"##### Condition (viii) failed.\n");
 
  317     rReportStr.append(
"#####\n");       
 
  322     rReportStr.append(
"########## Condition (ix):\n");
 
  327         rReportStr.append(
"##### warning: non-accessible states have been removed.\n");
 
  328     rReportStr.append(
"##### Condition (ix) repaired.\n");
 
  330     else rReportStr.append(
"##### Condition (ix) passed.\n");
 
  337     rReportStr.append(
"##################### Final result: #####################\n");
 
  339         rReportStr.append(
"############ Generator is in HioConstraintForm. ###########\n");
 
  340         rReportStr.append(
"#########################################################\n");
 
  344         rReportStr.append(
"############## Generator is NOT in HioConstraintForm. ##############\n");
 
  345         rReportStr.append(
"#########################################################\n");
 
  359     return IsHioConstraintForm(rHioConstraint, rQY, rQU, rErrEvSet, rErrTrSet, rErrStSet,rReportStr);
 
  368      std::string rReportStr;
 
  370      return IsHioConstraintForm(rHioConstraint, rQY, rQU, rErrEvSet, rErrTrSet, rErrStSet, rReportStr);
 
const std::string & Name(void) const
 
bool IsU(Idx index) const
 
bool IsY(Idx index) const
 
EventSet UEvents(void) const
 
EventSet YEvents(void) const
 
bool Insert(const Transition &rTransition)
 
TBaseSet< Transition, TransSort::X1EvX2 >::Iterator Iterator
 
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
 
bool IsHioConstraintForm(HioConstraint &rHioConstraint, StateSet &rQY, StateSet &rQU, EventSet &rErrEvSet, TransSet &rErrTrSet, StateSet &rErrStSet, std::string &rReportStr)
 
void HioStatePartition(HioConstraint &rHioConstraint)