hio_environment.h
Go to the documentation of this file.
1 /** @file hio_environment.h Generator with I/O-environment attributes */
2 
3 /* Hierarchical IO Systems Plug-In for FAU Discrete Event Systems Library (libfaudes)
4 
5  Copyright (C) 2006 Sebastian Perk
6  Copyright (C) 2006 Thomas Moor
7  Copyright (C) 2006 Klaus Schmidt
8 
9 */
10 
11 #ifndef FAUDES_HIO_ENVIRONMENT_H
12 #define FAUDES_HIO_ENVIRONMENT_H
13 
14 #include "corefaudes.h"
15 #include "hio_attributes.h"
16 
17 namespace faudes {
18 
19 /**
20  * Generator with I/O-environment attributes. The HioEnvironment is a variant of the
21  * Generator to add an interface for events and states with I/O-environment attributes,
22  * built from HioEvent- and HioStateFlags
23  * - event attributes: YE = Y && E
24  * UE = U && E
25  * YL = Y && L
26  * UL = U && L
27  * - state attributes: QYe = QY && QE
28  * QUe = QU && QE
29  * QUl = QU && QL
30  * QYlUe
31  *
32  * Technically, the construct is based on the specialized attribute classes
33  * faudes::HioEventFlags and faudes::HioStateFlags that provide attributes with
34  * semantics for hierarchical I/O properties. The THioEnvironment expects attribute template
35  * parameters with the minimum interface defined in HioEventFlags and HioStateFlags.
36  * Thus, you can add further semantics by deriving a class HioEventFlagsAndMore from
37  * HioEventFlags (same for HioStateFlags) and use this as event attribute parameter for
38  * THioEnvironment. To model a plain finite state machine plus I/O-environment properties, use THioEnvironment
39  * with HioEventFlags and HioStateFlags for the event and state attribute parameters
40  * and AttributeVoid for the other parameters.
41  * For convenience, this has been typedefed as HioEnvironment.
42  *
43  * @ingroup hiosysplugin
44  */
45 
46 template <class GlobalAttr, class StateAttr, class EventAttr, class TransAttr>
47 class FAUDES_TAPI THioEnvironment : public TaGenerator<GlobalAttr, StateAttr, EventAttr, TransAttr> {
48  public:
49  /**
50  * Creates an empty HioEnvironment object
51  */
53 
54  /**
55  * HioEnvironment from a std Generator. Copy constructor
56  *
57  * @param rOtherGen
58  */
59  THioEnvironment(const Generator& rOtherGen);
60 
61  /**
62  * HioEnvironment from a std Generator and event sets. Copy constructor
63  *
64  * @param rOtherGen
65  * Generator
66  * @param rYl
67  * alphabet Yl
68  * @param rUl
69  * alphabet Ul
70  * @param rYe
71  * alphabet Ye
72  * @param rUe
73  * alphabet Ue
74  */
76  const Generator& rOtherGen,
77  const EventSet& rYl,
78  const EventSet& rUl,
79  const EventSet& rYe,
80  const EventSet& rUe
81  );
82 
83  /**
84  * HioEnvironment from a HioEnvironment. Copy constructor
85  *
86  * @param rOtherGen
87  */
88  THioEnvironment(const THioEnvironment& rOtherGen);
89 
90  /**
91  * construct a HioEnvironment from file
92  *
93  * @param rFileName
94  * Filename
95  *
96  * @exception Exception
97  * If opening/reading fails an Exception object is thrown (id 1, 50, 51)
98  */
99  THioEnvironment(const std::string& rFileName);
100 
101  /**
102  * Construct on heap
103  *
104  * @return
105  * new Generator
106  */
107  THioEnvironment* New(void) const;
108 
109  /**
110  * Construct copy on heap
111  *
112  * @return
113  * new Generator
114  */
115  virtual THioEnvironment* Copy(void) const;
116 
117  /**
118  * Create empty HioEnvironment with same symboltable as this
119  *
120  * @return
121  * New Generator
122  */
124 
125  /**
126  * Assignment operator (uses copy )
127  *
128  * @param rOtherGen
129  * Other generator
130  */
131  virtual THioEnvironment& operator= (const THioEnvironment& rOtherGen) {this->Assign(rOtherGen); return *this;};
132 
133 //**************** I/O environment event attributes ********************/
134 
135  /**
136  * Add an existing Ye-event to generator.
137  * An entry in the global event table will be made.
138  *
139  * @param index
140  * Event index
141  */
142  void InsYeEvent(Idx index);
143 
144  /**
145  * Add new named Ye-event to generator.
146  * An entry in the global event table will be made if event is new.
147  *
148  * @param rName
149  * Name of the event to add
150  *
151  * @return
152  * New global unique index
153  */
154  Idx InsYeEvent(const std::string& rName);
155 
156  /**
157  * Add an existing Ue-event to generator.
158  * An entry in the global event table will be made.
159  *
160  * @param index
161  * Event index
162  */
163  void InsUeEvent(Idx index);
164 
165  /**
166  * Add new named Ue-event to generator.
167  * An entry in the global event table will be made if event is new.
168  *
169  * @param rName
170  * Name of the event to add
171  *
172  * @return
173  * New global unique index
174  */
175  Idx InsUeEvent(const std::string& rName);
176 
177  /**
178  * Mark event as Ye-event (by index)
179  *
180  * @param index
181  * Event index
182  */
183  void SetYe(Idx index);
184 
185  /**
186  * Mark event as Ye-event(by name)
187  *
188  * @param rName
189  * Event name
190  */
191  void SetYe(const std::string& rName);
192 
193  /**
194  * Mark set of events as Ye-events
195  *
196  * @param rEvents
197  * EventSet
198  */
199  void SetYe(const EventSet& rEvents);
200 
201  /**
202  * Mark event Ue-event(by index)
203  *
204  * @param index
205  * Event index
206  */
207  void SetUe(Idx index);
208 
209  /**
210  * Mark event Ue-event(by name)
211  *
212  * @param rName
213  * Event name
214  */
215  void SetUe(const std::string& rName);
216 
217  /**
218  * Mark set of events as Ue-events
219  *
220  * @param rEvents
221  * EventSet
222  */
223  void SetUe(const EventSet& rEvents);
224 
225  /**
226  * Is event Ye-event(by index)
227  *
228  * @param index
229  * Event index
230  *
231  * @return
232  * True / false
233  */
234  bool IsYe(Idx index) const;
235 
236  /**
237  * Is event Ye-event(by name)
238  *
239  * @param rName
240  * Event name
241  *
242  * @return
243  * True / false
244  */
245  bool IsYe(const std::string& rName) const;
246 
247  /**
248  * Is event Ue-event(by index)
249  *
250  * @param index
251  * Event index
252  *
253  * @return
254  * True / false
255  */
256  bool IsUe(Idx index) const;
257 
258  /**
259  * Is event Ue-event(by name)
260  *
261  * @param rName
262  * Event name
263  *
264  * @return
265  * True / false
266  */
267  bool IsUe(const std::string& rName) const;
268 
269  /**
270  * Get EventSet with Ye-events
271  *
272  * @return
273  * EventSet of Ye-events
274  */
275  EventSet YeEvents(void) const;
276 
277  /**
278  * Get EventSet with Ue-events
279  *
280  * @return
281  * EventSet of Ue-events
282  */
283  EventSet UeEvents(void) const;
284 
285  /**
286  * Add an existing Yl-event to generator.
287  * An entry in the global event table will be made.
288  *
289  * @param index
290  * Event index
291  */
292  void InsYlEvent(Idx index);
293 
294  /**
295  * Add new named Yl-event to generator.
296  * An entry in the global event table will be made if event is new.
297  *
298  * @param rName
299  * Name of the event to add
300  *
301  * @return
302  * New global unique index
303  */
304  Idx InsYlEvent(const std::string& rName);
305 
306  /**
307  * Add an existing Ul-event to generator.
308  * An entry in the global event table will be made.
309  *
310  * @param index
311  * Event index
312  */
313  void InsUlEvent(Idx index);
314 
315  /**
316  * Add new named Ul-event to generator.
317  * An entry in the global event table will be made if event is new.
318  *
319  * @param rName
320  * Name of the event to add
321  *
322  * @return
323  * New global unique index
324  */
325  Idx InsUlEvent(const std::string& rName);
326 
327  /**
328  * Mark event as Yl-event (by index)
329  *
330  * @param index
331  * Event index
332  */
333  void SetYl(Idx index);
334 
335  /**
336  * Mark event as Yl-event (by name)
337  *
338  * @param rName
339  * Event name
340  */
341  void SetYl(const std::string& rName);
342 
343  /**
344  * Mark set of events as Yl-events
345  *
346  * @param rEvents
347  * EventSet
348  */
349  void SetYl(const EventSet& rEvents);
350 
351  /**
352  * Mark event as Ul-event (by index)
353  *
354  * @param index
355  * Event index
356  */
357  void SetUl(Idx index);
358 
359  /**
360  * Mark event as Ul-event (by name)
361  *
362  * @param rName
363  * Event name
364  */
365  void SetUl(const std::string& rName);
366 
367  /**
368  * Mark set of events as Ul-events
369  *
370  * @param rEvents
371  * EventSet
372  */
373  void SetUl(const EventSet& rEvents);
374 
375  /**
376  * Is event Yl-event (by index)
377  *
378  * @param index
379  * Event index
380  *
381  * @return
382  * True / false
383  */
384  bool IsYl(Idx index) const;
385 
386  /**
387  * Is event Yl-event (by name)
388  *
389  * @param rName
390  * Event name
391  *
392  * @return
393  * True / false
394  */
395  bool IsYl(const std::string& rName) const;
396 
397  /**
398  * Is event Ul-event (by index)
399  *
400  * @param index
401  * Event index
402  *
403  * @return
404  * True / false
405  */
406  bool IsUl(Idx index) const;
407 
408  /**
409  * Is event Ul-event (by name)
410  *
411  * @param rName
412  * Event name
413  *
414  * @return
415  * True / false
416  */
417  bool IsUl(const std::string& rName) const;
418 
419  /**
420  * Get EventSet with Yl-events
421  *
422  * @return
423  * EventSet of Yl-events
424  */
425  EventSet YlEvents(void) const;
426 
427  /**
428  * Get EventSet with Ul-events
429  *
430  * @return
431  * EventSet of Ul-events
432  */
433  EventSet UlEvents(void) const;
434 
435 
436 //************** query elementary event attributes ****************************/
437  /**
438  * Is event Y-event? (by index)
439  *
440  * @param index
441  * Event index
442  *
443  * @return
444  * True / false
445  */
446  bool IsY(Idx index) const;
447 
448  /**
449  * Is event Y-event? (by name)
450  *
451  * @param rName
452  * Event name
453  *
454  * @return
455  * True / false
456  */
457  bool IsY(const std::string& rName) const;
458 
459  /**
460  * Get EventSet with Y-events
461  *
462  * @return
463  * EventSet of Y-events
464  */
465  EventSet YEvents(void) const;
466 
467  /**
468  * Is event U-event? (by index)
469  *
470  * @param index
471  * Event index
472  *
473  * @return
474  * True / false
475  */
476  bool IsU(Idx index) const;
477 
478  /**
479  * Is event U-event? (by name)
480  *
481  * @param rName
482  * Event name
483  *
484  * @return
485  * True / false
486  */
487  bool IsU(const std::string& rName) const;
488 
489  /**
490  * Get EventSet with U-events
491  *
492  * @return
493  * EventSet of U-events
494  */
495  EventSet UEvents(void) const;
496 
497  /**
498  * Is event P-event? (by index)
499  *
500  * @param index
501  * Event index
502  *
503  * @return
504  * True / false
505  */
506  bool IsE(Idx index) const;
507 
508  /**
509  * Is event P-event? (by name)
510  *
511  * @param rName
512  * Event name
513  *
514  * @return
515  * True / false
516  */
517  bool IsE(const std::string& rName) const;
518 
519  /**
520  * Get EventSet with P-events
521  *
522  * @return
523  * EventSet of P-events
524  */
525  EventSet EEvents(void) const;
526 
527  /**
528  * Is event E-event? (by index)
529  *
530  * @param index
531  * Event index
532  *
533  * @return
534  * True / false
535  */
536  bool IsL(Idx index) const;
537 
538  /**
539  * Is event E-event? (by name)
540  *
541  * @param rName
542  * Event name
543  *
544  * @return
545  * True / false
546  */
547  bool IsL(const std::string& rName) const;
548 
549  /**
550  * Get EventSet with E-events
551  *
552  * @return
553  * EventSet of E-events
554  */
555  EventSet LEvents(void) const;
556 /******************************************************/
557 
558 
559 /*************** I/O environment state attributes **********************/
560 
561  /**
562  * Mark event as QYe-state (by index)
563  *
564  * @param index
565  * State index
566  */
567  void SetQYe(Idx index);
568 
569  /**
570  * Mark state as QYe-state (by name)
571  *
572  * @param rName
573  * State name
574  */
575  void SetQYe(const std::string& rName);
576 
577  /**
578  * Mark set of states as QYe-states
579  *
580  * @param rStates
581  * StateSet
582  */
583  void SetQYe(const StateSet& rStates);
584 
585  /** Mark state as NOT QYe-state (by index)
586  *
587  * @param index
588  * State index
589  */
590  void ClrQYe(Idx index);
591 
592  /**
593  * Mark state as NOT QYe-state (by name)
594  *
595  * @param rName
596  * State name
597  */
598  void ClrQYe(const std::string& rName);
599 
600  /**
601  * Mark set of states as NOT QYe-states (by index)
602  *
603  * @param rStates
604  * StateSet
605  */
606  void ClrQYe(const StateSet& rStates);
607 
608  /** Is state QYe-state (by index)
609  *
610  * @param index
611  * State index
612  *
613  * @return
614  * True / false
615  */
616  bool IsQYe(Idx index) const;
617 
618  /**
619  * Is state QYe-state (by name)
620  *
621  * @param rName
622  * State name
623  *
624  * @return
625  * True / false
626  */
627  bool IsQYe(const std::string& rName) const;
628 
629  /**
630  * Get StateSet with QYe-states
631  *
632  * @return
633  * StateSet of QYe-states
634  */
635  StateSet QYeStates(void) const;
636 
637  /**
638  * Mark event as QUe-state (by index)
639  *
640  * @param index
641  * State index
642  */
643  void SetQUe(Idx index);
644 
645  /**
646  * Mark state as QUe-state (by name)
647  *
648  * @param rName
649  * State name
650  */
651  void SetQUe(const std::string& rName);
652 
653  /**
654  * Mark set of states as QUe-states
655  *
656  * @param rStates
657  * StateSet
658  */
659  void SetQUe(const StateSet& rStates);
660 
661  /** Mark state as NOT QUe-state (by index)
662  *
663  * @param index
664  * State index
665  */
666  void ClrQUe(Idx index);
667 
668  /**
669  * Mark state as NOT QUe-state (by name)
670  *
671  * @param rName
672  * State name
673  */
674  void ClrQUe(const std::string& rName);
675 
676  /**
677  * Mark set of states as NOT QUe-states (by index)
678  *
679  * @param rStates
680  * StateSet
681  */
682  void ClrQUe(const StateSet& rStates);
683 
684  /** Is state QUe-state (by index)
685  *
686  * @param index
687  * State index
688  *
689  * @return
690  * True / false
691  */
692  bool IsQUe(Idx index) const;
693 
694  /**
695  * Is state QUe-state (by name)
696  *
697  * @param rName
698  * State name
699  *
700  * @return
701  * True / false
702  */
703  bool IsQUe(const std::string& rName) const;
704 
705  /**
706  * Get StateSet with QUe-states
707  *
708  * @return
709  * StateSet of QUe-states
710  */
711  StateSet QUeStates(void) const;
712 
713  /**
714  * Mark event as QUl-state (by index)
715  *
716  * @param index
717  * State index
718  */
719  void SetQUl(Idx index);
720 
721  /**
722  * Mark state as QUl-state (by name)
723  *
724  * @param rName
725  * State name
726  */
727  void SetQUl(const std::string& rName);
728 
729  /**
730  * Mark set of states as QUl-states
731  *
732  * @param rStates
733  * StateSet
734  */
735  void SetQUl(const StateSet& rStates);
736 
737  /** Mark state as NOT QUl-state (by index)
738  *
739  * @param index
740  * State index
741  */
742  void ClrQUl(Idx index);
743 
744  /**
745  * Mark state as NOT QUl-state (by name)
746  *
747  * @param rName
748  * State name
749  */
750  void ClrQUl(const std::string& rName);
751 
752  /**
753  * Mark set of states as NOT QUl-states (by index)
754  *
755  * @param rStates
756  * StateSet
757  */
758  void ClrQUl(const StateSet& rStates);
759 
760  /** Is state QUl-state (by index)
761  *
762  * @param index
763  * State index
764  *
765  * @return
766  * True / false
767  */
768  bool IsQUl(Idx index) const;
769 
770  /**
771  * Is state QUl-state (by name)
772  *
773  * @param rName
774  * State name
775  *
776  * @return
777  * True / false
778  */
779  bool IsQUl(const std::string& rName) const;
780 
781  /**
782  * Get StateSet with QUl-states
783  *
784  * @return
785  * StateSet of QUl-states
786  */
787  StateSet QUlStates(void) const;
788 
789  /**
790  * Mark event as QYlUe-state (by index)
791  *
792  * @param index
793  * State index
794  */
795  void SetQYlUe(Idx index);
796 
797  /**
798  * Mark state as QYlUe-state (by name)
799  *
800  * @param rName
801  * State name
802  */
803  void SetQYlUe(const std::string& rName);
804 
805  /**
806  * Mark set of states as QYlUe-states
807  *
808  * @param rStates
809  * StateSet
810  */
811  void SetQYlUe(const StateSet& rStates);
812 
813  /** Mark state as NOT QYlUe-state (by index)
814  *
815  * @param index
816  * State index
817  */
818  void ClrQYlUe(Idx index);
819 
820  /**
821  * Mark state as NOT QYlUe-state (by name)
822  *
823  * @param rName
824  * State name
825  */
826  void ClrQYlUe(const std::string& rName);
827 
828  /**
829  * Mark set of states as NOT QYlUe-states (by index)
830  *
831  * @param rStates
832  * StateSet
833  */
834  void ClrQYlUe(const StateSet& rStates);
835 
836  /** Is state QYlUe-state (by index)
837  *
838  * @param index
839  * State index
840  *
841  * @return
842  * True / false
843  */
844  bool IsQYlUe(Idx index) const;
845 
846  /**
847  * Is state QYlUe-state (by name)
848  *
849  * @param rName
850  * State name
851  *
852  * @return
853  * True / false
854  */
855  bool IsQYlUe(const std::string& rName) const;
856 
857  /**
858  * Get StateSet with QYlUe-states
859  *
860  * @return
861  * StateSet of QYlUe-states
862  */
863  StateSet QYlUeStates(void) const;
864 
865  /**
866  * Mark state as Err-state (by index)
867  *
868  * @param index
869  * State index
870  */
871  void SetErr(Idx index);
872 
873  /**
874  * Mark state as Err-state (by name)
875  *
876  * @param rName
877  * State name
878  */
879  void SetErr(const std::string& rName);
880 
881  /**
882  * Mark set of states as Err-states
883  *
884  * @param rStates
885  * StateSet
886  */
887  void SetErr(const StateSet& rStates);
888 
889  /** Mark state as NOT Err-state (by index)
890  *
891  * @param index
892  * State index
893  */
894  void ClrErr(Idx index);
895 
896  /**
897  * Mark state as NOT Err-state (by name)
898  *
899  * @param rName
900  * State name
901  */
902  void ClrErr(const std::string& rName);
903 
904  /**
905  * Mark set of states as NOT Err-states (by index)
906  *
907  * @param rStates
908  * StateSet
909  */
910  void ClrErr(const StateSet& rStates);
911 
912  /** Is state Err-state (by index)
913  *
914  * @param index
915  * State index
916  *
917  * @return
918  * True / false
919  */
920  bool IsErr(Idx index) const;
921 
922  /**
923  * Is state Err-state (by name)
924  *
925  * @param rName
926  * State name
927  *
928  * @return
929  * True / false
930  */
931  bool IsErr(const std::string& rName) const;
932 
933  /**
934  * Get StateSet with Err-states
935  *
936  * @return
937  * StateSet of Err-states
938  */
939  StateSet ErrStates(void) const;
940 
941  /**
942  * Updates internal attributes.
943  * This method sets the state partition attributes.
944  *
945  * @return True if value changed
946  */
947  virtual bool UpdateAttributes(void) {IsHioEnvironmentForm(*this); return true;};
948 
949  private:
950 
951  protected:
952 }; // end class THioEnvironment
953 
954 
955 // convenience typedef for std HioEnvironment
957 
958 /* convenience access to relevant scopes */
959 #define THIS THioEnvironment<GlobalAttr, StateAttr, EventAttr, TransAttr>
960 #define BASE TaGenerator<GlobalAttr, StateAttr, EventAttr, TransAttr>
961 #define TEMP template <class GlobalAttr, class StateAttr, class EventAttr, class TransAttr>
962 
963 
964 // THioEnvironment(void)
965 TEMP THIS::THioEnvironment(void) : BASE() {
966  FD_DG("HioEnvironment(" << this << ")::HioEnvironment()");
967 }
968 
969 // THioEnvironment(rOtherGen)
970 TEMP THIS::THioEnvironment(const THioEnvironment& rOtherGen) : BASE(rOtherGen) {
971  FD_DG("HioEnvironment(" << this << ")::HioEnvironment(rOtherGen)");
972 }
973 
974 // THioEnvironment(rOtherGen)
975 TEMP THIS::THioEnvironment(const Generator& rOtherGen) : BASE(rOtherGen) {
976  FD_DG("HioEnvironment(" << this << ")::HioEnvironment(rOtherGen)");
977 }
978 
979 // THioEnvironment(rOtherGen,rYe,rUe,rYl,rUl)
980 TEMP THIS::THioEnvironment(
981 const Generator& rOtherGen,
982  const EventSet& rYl,
983  const EventSet& rUl,
984  const EventSet& rYe,
985  const EventSet& rUe
986 ) : BASE(rOtherGen) {
987  FD_DG("HioEnvironment(" << this << ")::HioEnvironment(rOtherGen)");
988  SetYe(rYe);
989  SetUe(rUe);
990  SetYl(rYl);
991  SetUl(rUl);
992 }
993 
994 // THioEnvironment(rFileName)
995 TEMP THIS::THioEnvironment(const std::string& rFileName) : BASE(rFileName) {
996  FD_DG("HioEnvironment(" << this << ")::HioEnvironment(rFilename) : done");
997 }
998 
999 // New()
1000 TEMP THIS* THIS::New(void) const {
1001  // allocate
1002  THIS* res = new THIS;
1003  // fix base data
1004  res->EventSymbolTablep(BASE::mpEventSymbolTable);
1005  res->mStateNamesEnabled=BASE::mStateNamesEnabled;
1006  return res;
1007 }
1008 
1009 // Copy()
1010 TEMP THIS* THIS::Copy(void) const {
1011  return new THIS(*this);
1012 }
1013 
1014 // NewHioEnvironment()
1015 TEMP THIS THIS::NewHioEnvironment(void) const {
1016  // call base (fixes by assignment constructor)
1017  THIS res= BASE::NewAGen();
1018  return res;
1019 }
1020 
1021 /******************************************************/
1022 
1023  // IsY(index)
1024  TEMP bool THIS::IsY(Idx index) const {
1025  EventAttr attr=BASE::EventAttribute(index);
1026  return attr.IsY();
1027  }
1028 
1029  // IsY(rName)
1030  TEMP bool THIS::IsY(const std::string& rName) const {
1031  EventAttr attr=BASE::EventAttribute(rName);
1032  return attr.IsY();
1033  }
1034 
1035  // IsU(index)
1036  TEMP bool THIS::IsU(Idx index) const {
1037  EventAttr attr=BASE::EventAttribute(index);
1038  return attr.IsU();
1039  }
1040 
1041  // IsU(rName)
1042  TEMP bool THIS::IsU(const std::string& rName) const {
1043  EventAttr attr=BASE::EventAttribute(rName);
1044  return attr.IsU();
1045  }
1046 
1047  //YEvents()
1048  TEMP EventSet THIS::YEvents(void) const {
1049  FD_DG("HioEnvironment(" << this << ")::YEvents()");
1050  EventSet res;
1051  EventSet::Iterator it;
1052  for(it=BASE::AlphabetBegin(); it!=BASE::AlphabetEnd(); it++) {
1053  if(IsY(*it)) res.Insert(*it);
1054  }
1055  return res;
1056  }
1057 
1058  //UEvents()
1059  TEMP EventSet THIS::UEvents(void) const {
1060  FD_DG("HioEnvironment(" << this << ")::UEvents()");
1061  EventSet res;
1062  EventSet::Iterator it;
1063  for(it=BASE::AlphabetBegin(); it!=BASE::AlphabetEnd(); it++) {
1064  if(IsU(*it)) res.Insert(*it);
1065  }
1066  return res;
1067  }
1068 
1069 /*****************************************************************/
1070 
1071  // InsYeEvent(index)
1072  TEMP void THIS::InsYeEvent(Idx index) {
1073  FD_DG("HioEnvironment(" << this << ")::InsYeEvent(" << index << ")");
1074  EventAttr attr;
1075  attr.SetY();
1076  attr.SetE();
1077  BASE::InsEvent(index,attr);
1078  }
1079 
1080  // InsYeEvent(rName)
1081  TEMP Idx THIS::InsYeEvent(const std::string& rName) {
1082  FD_DG("HioEnvironment(" << this << ")::InsYeEvent(" << rName << ")");
1083  EventAttr attr;
1084  attr.SetY();
1085  attr.SetE();
1086  return BASE::InsEvent(rName,attr);
1087  }
1088 
1089  // InsUeEvent(index)
1090  TEMP void THIS::InsUeEvent(Idx index) {
1091  FD_DG("HioEnvironment(" << this << ")::InsUeEvent(" << index << ")");
1092  EventAttr attr;
1093  attr.SetU();
1094  attr.SetE();
1095  BASE::InsEvent(index,attr);
1096  }
1097 
1098  // InsUeEvent(rName)
1099  TEMP Idx THIS::InsUeEvent(const std::string& rName) {
1100  FD_DG("HioEnvironment(" << this << ")::InsUeEvent(" << rName << ")");
1101  EventAttr attr;
1102  attr.SetU();
1103  attr.SetE();
1104  return BASE::InsEvent(rName,attr);
1105  }
1106 
1107  // SetYe(index)
1108  TEMP void THIS::SetYe(Idx index) {
1109  FD_DG("HioEnvironment(" << this << ")::SetYe(" << index << ")");
1110  EventAttr attr=BASE::EventAttribute(index);
1111  attr.SetY();
1112  attr.SetE();
1113  BASE::pAlphabet->Attribute(index,attr);
1114  }
1115 
1116  // SetYe(rName)
1117  TEMP void THIS::SetYe(const std::string& rName) {
1118  FD_DG("HioEnvironment(" << this << ")::SetYe(" << rName << ")");
1119  Idx index = BASE::EventIndex(rName);
1120  SetYe(index);
1121  }
1122 
1123  //SetYe(rEvents)
1124  TEMP void THIS::SetYe(const EventSet& rEvents) {
1125  FD_DG("HioEnvironment(" << this << ")::SetYe(rEvents)");
1126  EventSet::Iterator it;
1127  for(it=rEvents.Begin(); it!=rEvents.End(); it++) {
1128  SetYe(*it);
1129  }
1130  }
1131 
1132  // SetUe(index)
1133  TEMP void THIS::SetUe(Idx index) {
1134  FD_DG("HioEnvironment(" << this << ")::SetUe(" << index << ")");
1135  EventAttr attr=BASE::EventAttribute(index);
1136  attr.SetU();
1137  attr.SetE();
1138  BASE::pAlphabet->Attribute(index,attr);
1139  }
1140 
1141  // SetUe(rName)
1142  TEMP void THIS::SetUe(const std::string& rName) {
1143  FD_DG("HioEnvironment(" << this << ")::SetUe(" << rName << ")");
1144  Idx index = BASE::EventIndex(rName);
1145  SetUe(index);
1146  }
1147 
1148  //SetUe(rEvents)
1149  TEMP void THIS::SetUe(const EventSet& rEvents) {
1150  FD_DG("HioEnvironment(" << this << ")::SetUe(rEvents)");
1151  EventSet::Iterator it;
1152  for(it=rEvents.Begin(); it!=rEvents.End(); it++) {
1153  SetUe(*it);
1154  }
1155  }
1156 
1157 // IsYe(index)
1158  TEMP bool THIS::IsYe(Idx index) const {
1159  EventAttr attr=BASE::EventAttribute(index);
1160  return (attr.IsY() && attr.IsE());
1161  }
1162 
1163  // IsYe(rName)
1164  TEMP bool THIS::IsYe(const std::string& rName) const {
1165  EventAttr attr=BASE::EventAttribute(rName);
1166  return (attr.IsY() && attr.IsE());
1167  }
1168 
1169 // IsUe(index)
1170  TEMP bool THIS::IsUe(Idx index) const {
1171  EventAttr attr=BASE::EventAttribute(index);
1172  return (attr.IsU() && attr.IsE());
1173  }
1174 
1175  // IsUe(rName)
1176  TEMP bool THIS::IsUe(const std::string& rName) const {
1177  EventAttr attr=BASE::EventAttribute(rName);
1178  return (attr.IsU() && attr.IsE());
1179  }
1180 
1181  //YeEvents()
1182  TEMP EventSet THIS::YeEvents(void) const {
1183  FD_DG("HioEnvironment(" << this << ")::YeEvents()");
1184  EventSet res;
1185  EventSet::Iterator it;
1186  for(it=BASE::AlphabetBegin(); it!=BASE::AlphabetEnd(); it++) {
1187  if(IsYe(*it)) res.Insert(*it);
1188  }
1189  return res;
1190  }
1191 
1192  //UeEvents()
1193  TEMP EventSet THIS::UeEvents(void) const {
1194  FD_DG("HioEnvironment(" << this << ")::UeEvents()");
1195  EventSet res;
1196  EventSet::Iterator it;
1197  for(it=BASE::AlphabetBegin(); it!=BASE::AlphabetEnd(); it++) {
1198  if(IsUe(*it)) res.Insert(*it);
1199  }
1200  return res;
1201  }
1202 
1203 /*******************************************************************/
1204 
1205  // InsYlEvent(index)
1206  TEMP void THIS::InsYlEvent(Idx index) {
1207  FD_DG("HioEnvironment(" << this << ")::InsYlEvent(" << index << ")");
1208  EventAttr attr;
1209  attr.SetY();
1210  attr.SetL();
1211  BASE::InsEvent(index,attr);
1212  }
1213 
1214  // InsYlEvent(rName)
1215  TEMP Idx THIS::InsYlEvent(const std::string& rName) {
1216  FD_DG("HioEnvironment(" << this << ")::InsYlEvent(" << rName << ")");
1217  EventAttr attr;
1218  attr.SetY();
1219  attr.SetL();
1220  return BASE::InsEvent(rName,attr);
1221  }
1222 
1223  // InsUlEvent(index)
1224  TEMP void THIS::InsUlEvent(Idx index) {
1225  FD_DG("HioEnvironment(" << this << ")::InsUlEvent(" << index << ")");
1226  EventAttr attr;
1227  attr.SetU();
1228  attr.SetL();
1229  BASE::InsEvent(index,attr);
1230  }
1231 
1232  // InsUlEvent(rName)
1233  TEMP Idx THIS::InsUlEvent(const std::string& rName) {
1234  FD_DG("HioEnvironment(" << this << ")::InsUlEvent(" << rName << ")");
1235  EventAttr attr;
1236  attr.SetU();
1237  attr.SetL();
1238  return BASE::InsEvent(rName,attr);
1239  }
1240 
1241  // SetYl(index)
1242  TEMP void THIS::SetYl(Idx index) {
1243  FD_DG("HioEnvironment(" << this << ")::SetYl(" << index << ")");
1244  EventAttr attr=BASE::EventAttribute(index);
1245  attr.SetY();
1246  attr.SetL();
1247  BASE::pAlphabet->Attribute(index,attr);
1248  }
1249 
1250  // SetYl(rName)
1251  TEMP void THIS::SetYl(const std::string& rName) {
1252  FD_DG("HioEnvironment(" << this << ")::SetYl(" << rName << ")");
1253  Idx index = BASE::EventIndex(rName);
1254  SetYl(index);
1255  }
1256 
1257  //SetYl(rEvents)
1258  TEMP void THIS::SetYl(const EventSet& rEvents) {
1259  FD_DG("HioEnvironment(" << this << ")::SetYl(rEvents)");
1260  EventSet::Iterator it;
1261  for(it=rEvents.Begin(); it!=rEvents.End(); it++) {
1262  SetYl(*it);
1263  }
1264  }
1265 
1266  // SetUl(index)
1267  TEMP void THIS::SetUl(Idx index) {
1268  FD_DG("HioEnvironment(" << this << ")::SetUl(" << index << ")");
1269  EventAttr attr=BASE::EventAttribute(index);
1270  attr.SetU();
1271  attr.SetL();
1272  BASE::pAlphabet->Attribute(index,attr);
1273  }
1274 
1275  // SetUl(rName)
1276  TEMP void THIS::SetUl(const std::string& rName) {
1277  FD_DG("HioEnvironment(" << this << ")::SetUl(" << rName << ")");
1278  Idx index = BASE::EventIndex(rName);
1279  SetUl(index);
1280  }
1281 
1282  //SetUl(rEvents)
1283  TEMP void THIS::SetUl(const EventSet& rEvents) {
1284  FD_DG("HioEnvironment(" << this << ")::SetUl(rEvents)");
1285  EventSet::Iterator it;
1286  for(it=rEvents.Begin(); it!=rEvents.End(); it++) {
1287  SetUl(*it);
1288  }
1289  }
1290 
1291  // IsYl(index)
1292  TEMP bool THIS::IsYl(Idx index) const {
1293  EventAttr attr=BASE::EventAttribute(index);
1294  return (attr.IsY() && attr.IsL());
1295  }
1296 
1297  // IsYl(rName)
1298  TEMP bool THIS::IsYl(const std::string& rName) const {
1299  EventAttr attr=BASE::EventAttribute(rName);
1300  return (attr.IsY() && attr.IsL());
1301  }
1302 
1303  // IsUl(index)
1304  TEMP bool THIS::IsUl(Idx index) const {
1305  EventAttr attr=BASE::EventAttribute(index);
1306  return (attr.IsU() && attr.IsL());
1307  }
1308 
1309  // IsUl(rName)
1310  TEMP bool THIS::IsUl(const std::string& rName) const {
1311  EventAttr attr=BASE::EventAttribute(rName);
1312  return (attr.IsU() && attr.IsL());
1313  }
1314 
1315  //YlEvents()
1316  TEMP EventSet THIS::YlEvents(void) const {
1317  FD_DG("HioEnvironment(" << this << ")::YlEvents()");
1318  EventSet res;
1319  EventSet::Iterator it;
1320  for(it=BASE::AlphabetBegin(); it!=BASE::AlphabetEnd(); it++) {
1321  if(IsYl(*it)) res.Insert(*it);
1322  }
1323  return res;
1324  }
1325 
1326  //UlEvents()
1327  TEMP EventSet THIS::UlEvents(void) const {
1328  FD_DG("HioEnvironment(" << this << ")::UlEvents()");
1329  EventSet res;
1330  EventSet::Iterator it;
1331  for(it=BASE::AlphabetBegin(); it!=BASE::AlphabetEnd(); it++) {
1332  if(IsUl(*it)) res.Insert(*it);
1333  }
1334  return res;
1335  }
1336 
1337 /*****************************************************************/
1338 
1339  // IsE(index)
1340  TEMP bool THIS::IsE(Idx index) const {
1341  EventAttr attr=BASE::EventAttribute(index);
1342  return attr.IsE();
1343  }
1344 
1345  // IsE(rName)
1346  TEMP bool THIS::IsE(const std::string& rName) const {
1347  EventAttr attr=BASE::EventAttribute(rName);
1348  return attr.IsE();
1349  }
1350 
1351  // IsL(index)
1352  TEMP bool THIS::IsL(Idx index) const {
1353  EventAttr attr=BASE::EventAttribute(index);
1354  return attr.IsL();
1355  }
1356 
1357  // IsL(rName)
1358  TEMP bool THIS::IsL(const std::string& rName) const {
1359  EventAttr attr=BASE::EventAttribute(rName);
1360  return attr.IsL();
1361  }
1362 
1363  //EEvents()
1364  TEMP EventSet THIS::EEvents(void) const {
1365  FD_DG("HioEnvironment(" << this << ")::EEvents()");
1366  EventSet res;
1367  EventSet::Iterator it;
1368  for(it=BASE::AlphabetBegin(); it!=BASE::AlphabetEnd(); it++) {
1369  if(IsE(*it)) res.Insert(*it);
1370  }
1371  return res;
1372  }
1373 
1374  //LEvents()
1375  TEMP EventSet THIS::LEvents(void) const {
1376  FD_DG("HioEnvironment(" << this << ")::EEvents()");
1377  EventSet res;
1378  EventSet::Iterator it;
1379  for(it=BASE::AlphabetBegin(); it!=BASE::AlphabetEnd(); it++) {
1380  if(IsL(*it)) res.Insert(*it);
1381  }
1382  return res;
1383  }
1384 
1385 /*******************************************************************/
1386 
1387 /*******************************************************************
1388  *****************Implementation of the state attributes*************
1389 *******************************************************************/
1390 
1391  // SetQYe(index)
1392  TEMP void THIS::SetQYe(Idx index) {
1393  FD_DG("HioEnvironment(" << this << ")::SetQYe(" << index << ")");
1394  StateAttr attr=BASE::StateAttribute(index);
1395  attr.SetQY();
1396  attr.SetQE();
1397  attr.ClrQU();
1398  attr.ClrQC();
1399  attr.ClrQP();
1400  attr.ClrQL();
1401  attr.ClrQYcUp();
1402  attr.ClrQYlUe();
1403  BASE::pStates->Attribute(index,attr);
1404  }
1405 
1406  // SetQYe(rName)
1407  TEMP void THIS::SetQYe(const std::string& rName) {
1408  FD_DG("HioEnvironment(" << this << ")::SetQYe(" << rName << ")");
1409  Idx index = BASE::StateIndex(rName);
1410  SetQYe(index);
1411  }
1412 
1413  //SetQYe(rStates)
1414  TEMP void THIS::SetQYe(const StateSet& rStates) {
1415  FD_DG("HioEnvironment(" << this << ")::SetQYe(rStates)");
1416  StateSet::Iterator sit;
1417  for(sit=rStates.Begin(); sit!=rStates.End(); sit++) {
1418  SetQYe(*sit);
1419  }
1420  }
1421 
1422  // ClrQYe(index)
1423  TEMP void THIS::ClrQYe(Idx index) {
1424  FD_DG("HioEnvironment(" << this << ")::ClrQYe(" << index << ")");
1425  StateAttr attr=BASE::StateAttribute(index);
1426  attr.ClrQY();
1427  attr.ClrQE();
1428  BASE::pStates->Attribute(index,attr);
1429  }
1430 
1431  // ClrQYe(rName)
1432  TEMP void THIS::ClrQYe(const std::string& rName) {
1433  FD_DG("HioEnvironment(" << this << ")::ClrQYe(" << rName << ")");
1434  Idx index = BASE::StateIndex(rName);
1435  ClrQYe(index);
1436  }
1437 
1438  //ClrQYe(rStates)
1439  TEMP void THIS::ClrQYe(const StateSet& rStates) {
1440  FD_DG("HioEnvironment(" << this << ")::ClrQYe(rStates)");
1441  StateSet::Iterator sit;
1442  for(sit=rStates.Begin(); sit!=rStates.End(); sit++) {
1443  ClrQYe(*sit);
1444  }
1445  }
1446 
1447  // IsQYe(index)
1448  TEMP bool THIS::IsQYe(Idx index) const {
1449  StateAttr attr=BASE::StateAttribute(index);
1450  return attr.IsQY() && attr.IsQE() && attr.IsQL();
1451  }
1452 
1453  // IsQYe(rName)
1454  TEMP bool THIS::IsQYe(const std::string& rName) const {
1455  Idx index = BASE::StateIndex(rName);
1456  return IsQYe(index);
1457  }
1458 
1459  //QYeStates()
1460  TEMP StateSet THIS::QYeStates(void) const {
1461  FD_DG("HioEnvironment(" << this << ")::QYeStates()");
1462  StateSet res;
1463  StateSet::Iterator sit;
1464  for(sit=BASE::StatesBegin(); sit!=BASE::StatesEnd(); sit++) {
1465  if(IsQYe(*sit)) res.Insert(*sit);
1466  }
1467  return res;
1468  }
1469 /***************************************************************************/
1470 
1471  // SetQUe(index)
1472  TEMP void THIS::SetQUe(Idx index) {
1473  FD_DG("HioEnvironment(" << this << ")::SetQUe(" << index << ")");
1474  StateAttr attr=BASE::StateAttribute(index);
1475  attr.SetQU();
1476  attr.SetQE();
1477  attr.ClrQY();
1478  attr.ClrQC();
1479  attr.ClrQP();
1480  attr.ClrQL();
1481  attr.ClrQYcUp();
1482  attr.ClrQYlUe();
1483  BASE::pStates->Attribute(index,attr);
1484  }
1485 
1486  // SetQUe(rName)
1487  TEMP void THIS::SetQUe(const std::string& rName) {
1488  FD_DG("HioEnvironment(" << this << ")::SetQUe(" << rName << ")");
1489  Idx index = BASE::StateIndex(rName);
1490  SetQUe(index);
1491  }
1492 
1493  //SetQUe(rStates)
1494  TEMP void THIS::SetQUe(const StateSet& rStates) {
1495  FD_DG("HioEnvironment(" << this << ")::SetQUe(rStates)");
1496  StateSet::Iterator sit;
1497  for(sit=rStates.Begin(); sit!=rStates.End(); sit++) {
1498  SetQUe(*sit);
1499  }
1500  }
1501 
1502  // ClrQUe(index)
1503  TEMP void THIS::ClrQUe(Idx index) {
1504  FD_DG("HioEnvironment(" << this << ")::ClrQUe(" << index << ")");
1505  StateAttr attr=BASE::StateAttribute(index);
1506  attr.ClrQU();
1507  attr.ClrQE();
1508  BASE::pStates->Attribute(index,attr);
1509  }
1510 
1511  // ClrQUe(rName)
1512  TEMP void THIS::ClrQUe(const std::string& rName) {
1513  FD_DG("HioEnvironment(" << this << ")::ClrQUe(" << rName << ")");
1514  Idx index = BASE::StateIndex(rName);
1515  ClrQUe(index);
1516  }
1517 
1518  //ClrQUe(rStates)
1519  TEMP void THIS::ClrQUe(const StateSet& rStates) {
1520  FD_DG("HioEnvironment(" << this << ")::ClrQUe(rStates)");
1521  StateSet::Iterator sit;
1522  for(sit=rStates.Begin(); sit!=rStates.End(); sit++) {
1523  ClrQUe(*sit);
1524  }
1525  }
1526 
1527  // IsQUe(index)
1528  TEMP bool THIS::IsQUe(Idx index) const {
1529  StateAttr attr=BASE::StateAttribute(index);
1530  return attr.IsQU() && attr.IsQE();
1531  }
1532 
1533  // IsQUe(rName)
1534  TEMP bool THIS::IsQUe(const std::string& rName) const {
1535  Idx index = BASE::StateIndex(rName);
1536  return IsQUe(index);
1537  }
1538 
1539  //QUeStates()
1540  TEMP StateSet THIS::QUeStates(void) const {
1541  FD_DG("HioEnvironment(" << this << ")::QUeStates()");
1542  StateSet res;
1543  StateSet::Iterator sit;
1544  for(sit=BASE::StatesBegin(); sit!=BASE::StatesEnd(); sit++) {
1545  if(IsQUe(*sit)) res.Insert(*sit);
1546  }
1547  return res;
1548  }
1549 /***************************************************************************/
1550 
1551 /***************************************************************************/
1552 
1553  // SetQUl(index)
1554  TEMP void THIS::SetQUl(Idx index) {
1555  FD_DG("HioEnvironment(" << this << ")::SetQUl(" << index << ")");
1556  StateAttr attr=BASE::StateAttribute(index);
1557  attr.SetQU();
1558  attr.SetQL();
1559  attr.ClrQY();
1560  attr.ClrQC();
1561  attr.ClrQP();
1562  attr.ClrQE();
1563  attr.ClrQYcUp();
1564  attr.ClrQYlUe();
1565  BASE::pStates->Attribute(index,attr);
1566  }
1567 
1568  // SetQUl(rName)
1569  TEMP void THIS::SetQUl(const std::string& rName) {
1570  FD_DG("HioEnvironment(" << this << ")::SetQUl(" << rName << ")");
1571  Idx index = BASE::StateIndex(rName);
1572  SetQUl(index);
1573  }
1574 
1575  //SetQUl(rStates)
1576  TEMP void THIS::SetQUl(const StateSet& rStates) {
1577  FD_DG("HioEnvironment(" << this << ")::SetQUl(rStates)");
1578  StateSet::Iterator sit;
1579  for(sit=rStates.Begin(); sit!=rStates.End(); sit++) {
1580  SetQUl(*sit);
1581  }
1582  }
1583 
1584  // ClrQUl(index)
1585  TEMP void THIS::ClrQUl(Idx index) {
1586  FD_DG("HioEnvironment(" << this << ")::ClrQUl(" << index << ")");
1587  StateAttr attr=BASE::StateAttribute(index);
1588  attr.ClrQU();
1589  attr.ClrQL();
1590  BASE::pStates->Attribute(index,attr);
1591  }
1592 
1593  // ClrQUl(rName)
1594  TEMP void THIS::ClrQUl(const std::string& rName) {
1595  FD_DG("HioEnvironment(" << this << ")::ClrQUl(" << rName << ")");
1596  Idx index = BASE::StateIndex(rName);
1597  ClrQUl(index);
1598  }
1599 
1600  //ClrQUl(rStates)
1601  TEMP void THIS::ClrQUl(const StateSet& rStates) {
1602  FD_DG("HioEnvironment(" << this << ")::ClrQUl(rStates)");
1603  StateSet::Iterator sit;
1604  for(sit=rStates.Begin(); sit!=rStates.End(); sit++) {
1605  ClrQUl(*sit);
1606  }
1607  }
1608 
1609  // IsQUl(index)
1610  TEMP bool THIS::IsQUl(Idx index) const {
1611  StateAttr attr=BASE::StateAttribute(index);
1612  return attr.IsQU() && attr.IsQL();
1613  }
1614 
1615  // IsQUl(rName)
1616  TEMP bool THIS::IsQUl(const std::string& rName) const {
1617  Idx index = BASE::StateIndex(rName);
1618  return IsQUl(index);
1619  }
1620 
1621  //QUlStates()
1622  TEMP StateSet THIS::QUlStates(void) const {
1623  FD_DG("HioEnvironment(" << this << ")::QUlStates()");
1624  StateSet res;
1625  StateSet::Iterator sit;
1626  for(sit=BASE::StatesBegin(); sit!=BASE::StatesEnd(); sit++) {
1627  if(IsQUl(*sit)) res.Insert(*sit);
1628  }
1629  return res;
1630  }
1631 
1632 /***************************************************************************/
1633 
1634  // SetQYlUe(index)
1635  TEMP void THIS::SetQYlUe(Idx index) {
1636  FD_DG("HioEnvironment(" << this << ")::SetQYlUe(" << index << ")");
1637  StateAttr attr=BASE::StateAttribute(index);
1638  attr.SetQYlUe();
1639  attr.ClrQY();
1640  attr.ClrQU();
1641  attr.ClrQC();
1642  attr.ClrQP();
1643  attr.ClrQE();
1644  attr.ClrQL();
1645  attr.ClrQYcUp();
1646  BASE::pStates->Attribute(index,attr);
1647  }
1648 
1649  // SetQYlUe(rName)
1650  TEMP void THIS::SetQYlUe(const std::string& rName) {
1651  FD_DG("HioEnvironment(" << this << ")::SetQYlUe(" << rName << ")");
1652  Idx index = BASE::StateIndex(rName);
1653  SetQYlUe(index);
1654  }
1655 
1656  //SetQYlUe(rStates)
1657  TEMP void THIS::SetQYlUe(const StateSet& rStates) {
1658  FD_DG("HioEnvironment(" << this << ")::SetQYlUe(rStates)");
1659  StateSet::Iterator sit;
1660  for(sit=rStates.Begin(); sit!=rStates.End(); sit++) {
1661  SetQYlUe(*sit);
1662  }
1663  }
1664 
1665  // ClrQYlUe(index)
1666  TEMP void THIS::ClrQYlUe(Idx index) {
1667  FD_DG("HioEnvironment(" << this << ")::ClrQYlUe(" << index << ")");
1668  StateAttr attr=BASE::StateAttribute(index);
1669  attr.ClrQYlUe();
1670  BASE::pStates->Attribute(index,attr);
1671  }
1672 
1673  // ClrQYlUe(rName)
1674  TEMP void THIS::ClrQYlUe(const std::string& rName) {
1675  FD_DG("HioEnvironment(" << this << ")::ClrQYlUe(" << rName << ")");
1676  Idx index = BASE::StateIndex(rName);
1677  ClrQYlUe(index);
1678  }
1679 
1680  //ClrQYlUe(rStates)
1681  TEMP void THIS::ClrQYlUe(const StateSet& rStates) {
1682  FD_DG("HioEnvironment(" << this << ")::ClrQYlUe(rStates)");
1683  StateSet::Iterator sit;
1684  for(sit=rStates.Begin(); sit!=rStates.End(); sit++) {
1685  ClrQYlUe(*sit);
1686  }
1687  }
1688 
1689  // IsQYlUe(index)
1690  TEMP bool THIS::IsQYlUe(Idx index) const {
1691  StateAttr attr=BASE::StateAttribute(index);
1692  return attr.IsQYlUe();
1693  }
1694 
1695  // IsQYlUe(rName)
1696  TEMP bool THIS::IsQYlUe(const std::string& rName) const {
1697  Idx index = BASE::StateIndex(rName);
1698  return IsQYlUe(index);
1699  }
1700 
1701  //QYlUeStates()
1702  TEMP StateSet THIS::QYlUeStates(void) const {
1703  FD_DG("HioEnvironment(" << this << ")::QYlUeStates()");
1704  StateSet res;
1705  StateSet::Iterator sit;
1706  for(sit=BASE::StatesBegin(); sit!=BASE::StatesEnd(); sit++) {
1707  if(IsQYlUe(*sit)) res.Insert(*sit);
1708  }
1709  return res;
1710  }
1711 
1712  // SetErr(index)
1713  TEMP void THIS::SetErr(Idx index) {
1714  FD_DG("HioPlant(" << this << ")::SetErr(" << index << ")");
1715  StateAttr attr=BASE::StateAttribute(index);
1716  attr.SetErr();
1717  BASE::pStates->Attribute(index,attr);
1718  }
1719 
1720  // SetErr(rName)
1721  TEMP void THIS::SetErr(const std::string& rName) {
1722  FD_DG("HioPlant(" << this << ")::SetErr(" << rName << ")");
1723  Idx index = BASE::StateIndex(rName);
1724  SetErr(index);
1725  }
1726 
1727  //SetErr(rStates)
1728  TEMP void THIS::SetErr(const StateSet& rStates) {
1729  FD_DG("HioPlant(" << this << ")::SetErr(rStates)");
1730  StateSet::Iterator sit;
1731  for(sit=rStates.Begin(); sit!=rStates.End(); sit++) {
1732  SetErr(*sit);
1733  }
1734  }
1735 
1736  // ClrErr(index)
1737  TEMP void THIS::ClrErr(Idx index) {
1738  FD_DG("HioPlant(" << this << ")::ClrErr(" << index << ")");
1739  StateAttr attr=BASE::StateAttribute(index);
1740  attr.ClrErr();
1741  BASE::pStates->Attribute(index,attr);
1742  }
1743 
1744  // ClrErr(rName)
1745  TEMP void THIS::ClrErr(const std::string& rName) {
1746  FD_DG("HioPlant(" << this << ")::ClrErr(" << rName << ")");
1747  Idx index = BASE::StateIndex(rName);
1748  ClrErr(index);
1749  }
1750 
1751  //ClrErr(rStates)
1752  TEMP void THIS::ClrErr(const StateSet& rStates) {
1753  FD_DG("HioPlant(" << this << ")::ClrErr(rStates)");
1754  StateSet::Iterator sit;
1755  for(sit=rStates.Begin(); sit!=rStates.End(); sit++) {
1756  ClrErr(*sit);
1757  }
1758  }
1759 
1760  // IsErr(index)
1761  TEMP bool THIS::IsErr(Idx index) const {
1762  StateAttr attr=BASE::StateAttribute(index);
1763  return attr.IsErr();
1764  }
1765 
1766  // IsErr(rName)
1767  TEMP bool THIS::IsErr(const std::string& rName) const {
1768  Idx index = BASE::StateIndex(rName);
1769  return IsErr(index);
1770  }
1771 
1772  //ErrStates()
1773  TEMP StateSet THIS::ErrStates(void) const {
1774  FD_DG("HioPlant(" << this << ")::ErrStates()");
1775  StateSet res;
1776  StateSet::Iterator sit;
1777  for(sit=BASE::StatesBegin(); sit!=BASE::StatesEnd(); sit++) {
1778  if(IsErr(*sit)) res.Insert(*sit);
1779  }
1780  return res;
1781  }
1782 
1783 /***************************************************************************/
1784 
1785 #undef TEMP
1786 #undef BASE
1787 #undef THIS
1788 
1789 /**
1790  * IsHioEnvironmentForm: check if rHioEnvironment is in I/O-environment form and assign state
1791  * attributes.
1792  * This function tests if rHioEnvironment meets the I/O-environment form that has been formally
1793  * defined by S.Perk. If so, then the alphabet of and the language marked by
1794  * rHioEnvironment formally describe an I/O environment. During the test, the HioStateFlags are
1795  * set according to the active event set or the respective state, for example:
1796  * The QYlUe flag is assigned to a state if its active eventset is a subset of the
1797  * union of the YL- and the UE-Alphabet.
1798  * The assignment of HioStateFlags is complete only if IsHioEnvironmentForm() returns true.
1799  * Method: all conditions in the formal I/O-environment form definition are checked
1800  * individually. If crucial conditions are violated, the test of remaining
1801  * conditions is omitted.
1802  *
1803  * @param rHioEnvironment
1804  * HioEnvironment to check, HioStateFlags are set
1805  * @param rQYe
1806  * State set containing all QYe states
1807  * @param rQUe
1808  * State set containing all QUe states
1809  * @param rQUl
1810  * State set containing all QUl states
1811  * @param rQYlUe
1812  * State set containing all QYlUe states
1813  * @param rErrEvSet
1814  * Event set for possible 'bad' events
1815  * @param rErrTrSet
1816  * Event set for possible 'bad' transition relations
1817  * @param rErrStSet
1818  * Event set for possible 'bad' states
1819  * @param rReportStr
1820  * Information about test results
1821  * @return
1822  * true if rHioEnvironment is in I/O-environment form
1823  */
1824 extern FAUDES_API bool IsHioEnvironmentForm(HioEnvironment& rHioEnvironment,
1825  StateSet& rQYe,
1826  StateSet& rQUe,
1827  StateSet& rQUl,
1828  StateSet& rQYlUe,
1829  EventSet& rErrEvSet,
1830  TransSet& rErrTrSet,
1831  StateSet& rErrStSet,
1832  std::string& rReportStr);
1833 
1834 /**
1835  * IsHioEnvironmentForm: check if rHioEnvironment is in I/O-environment form and assign state
1836  * attributes.
1837  * This function tests if rHioEnvironment meets the I/O-environment form that has been formally
1838  * defined by S.Perk. If so, then the alphabet of and the language marked by
1839  * rHioEnvironment formally describe an I/O environment. During the test, the HioStateFlags are
1840  * set according to the active event set or the respective state, for example:
1841  * The QYlUe flag is assigned to a state if its active eventset is a subset of the
1842  * union of the YL- and the UE-Alphabet.
1843  * The assignment of HioStateFlags is complete only if IsHioEnvironmentForm() returns true.
1844  * Method: all conditions in the formal I/O-environment form definition are checked
1845  * individually. If crucial conditions are violated, the test of remaining
1846  * conditions is omitted.
1847  *
1848  * @param rHioEnvironment
1849  * HioEnvironment to check, HioStateFlags are set
1850  * @param rReportStr
1851  * Information about test results
1852  * @return
1853  * true if rHioEnvironment is in I/O-environment form
1854  */
1855 extern FAUDES_API bool IsHioEnvironmentForm(HioEnvironment& rHioEnvironment,std::string& rReportStr);
1856 
1857 /**
1858  * IsHioEnvironmentForm: check if rHioEnvironment is in I/O-environment form and assign state
1859  * attributes.
1860  * This function tests if rHioEnvironment meets the I/O-environment form that has been formally
1861  * defined by S.Perk. If so, then the alphabet of and the language marked by
1862  * rHioEnvironment formally describe an I/O environment. During the test, the HioStateFlags are
1863  * set according to the active event set or the respective state, for example:
1864  * The QYlUe flag is assigned to a state if its active eventset is a subset of the
1865  * union of the YL- and the UE-Alphabet.
1866  * The assignment of HioStateFlags is complete only if IsHioEnvironmentForm() returns true.
1867  * Method: all conditions of the formal I/O-environment form definition are checked
1868  * individually. If crucial conditions are violated, the test of remaining
1869  * conditions is omitted.
1870  *
1871  * @param rHioEnvironment
1872  * HioEnvironment to check, HioStateFlags are set
1873  * @return
1874  * true if rHioEnvironment is in I/O-environment form
1875  */
1876 extern FAUDES_API bool IsHioEnvironmentForm(HioEnvironment& rHioEnvironment);
1877 
1878 /**
1879  * Function definition for run-time interface
1880  *
1881  * @param rEnvironment
1882  * HioEnvironment
1883  */
1884 extern FAUDES_API void HioStatePartition(HioEnvironment& rEnvironment);
1885 
1886 } // namespace faudes
1887 
1888 #define HIOENVIRONMENT_H
1889 #endif
#define FD_DG(message)
Debug: optional report on generator operations.
#define FAUDES_API
Interface export/import symbols: windows.
Definition: cfl_platform.h:80
#define FAUDES_TAPI
Definition: cfl_platform.h:83
Set of indices.
Definition: cfl_indexset.h:78
Idx Insert(void)
Insert new index to set.
Set of indices with symbolic names.
Definition: cfl_nameset.h:69
bool Insert(const Idx &rIndex)
Add an element by index.
Generator with I/O-environment attributes.
void InsYeEvent(Idx index)
Add an existing Ye-event to generator.
void SetQYe(const std::string &rName)
Mark state as QYe-state (by name)
Idx InsUeEvent(const std::string &rName)
Add new named Ue-event to generator.
void SetErr(const StateSet &rStates)
Mark set of states as Err-states.
void SetUl(Idx index)
Mark event as Ul-event (by index)
void SetYl(const std::string &rName)
Mark event as Yl-event (by name)
bool IsUl(const std::string &rName) const
Is event Ul-event (by name)
void InsUeEvent(Idx index)
Add an existing Ue-event to generator.
void SetYe(Idx index)
Mark event as Ye-event (by index)
bool IsU(const std::string &rName) const
Is event U-event? (by name)
void ClrQUl(const StateSet &rStates)
Mark set of states as NOT QUl-states (by index)
virtual THioEnvironment * Copy(void) const
Construct copy on heap.
void InsUlEvent(Idx index)
Add an existing Ul-event to generator.
void SetQUe(Idx index)
Mark event as QUe-state (by index)
void SetQUe(const std::string &rName)
Mark state as QUe-state (by name)
EventSet YEvents(void) const
Get EventSet with Y-events.
void SetQYe(Idx index)
Mark event as QYe-state (by index)
void SetQYe(const StateSet &rStates)
Mark set of states as QYe-states.
bool IsL(Idx index) const
Is event E-event? (by index)
bool IsQYe(Idx index) const
Is state QYe-state (by index)
EventSet UeEvents(void) const
Get EventSet with Ue-events.
void SetUe(const std::string &rName)
Mark event Ue-event(by name)
bool IsQYlUe(Idx index) const
Is state QYlUe-state (by index)
bool IsUl(Idx index) const
Is event Ul-event (by index)
void SetYl(Idx index)
Mark event as Yl-event (by index)
EventSet YeEvents(void) const
Get EventSet with Ye-events.
bool IsL(const std::string &rName) const
Is event E-event? (by name)
void SetQYlUe(const StateSet &rStates)
Mark set of states as QYlUe-states.
THioEnvironment(const Generator &rOtherGen, const EventSet &rYl, const EventSet &rUl, const EventSet &rYe, const EventSet &rUe)
HioEnvironment from a std Generator and event sets.
bool IsYl(const std::string &rName) const
Is event Yl-event (by name)
bool IsYe(Idx index) const
Is event Ye-event(by index)
StateSet QYeStates(void) const
Get StateSet with QYe-states.
bool IsQUl(const std::string &rName) const
Is state QUl-state (by name)
void SetYe(const std::string &rName)
Mark event as Ye-event(by name)
THioEnvironment(void)
Creates an empty HioEnvironment object.
EventSet LEvents(void) const
Get EventSet with E-events.
void SetYe(const EventSet &rEvents)
Mark set of events as Ye-events.
bool IsErr(const std::string &rName) const
Is state Err-state (by name)
virtual bool UpdateAttributes(void)
Updates internal attributes.
void SetQUl(const StateSet &rStates)
Mark set of states as QUl-states.
void ClrQUl(const std::string &rName)
Mark state as NOT QUl-state (by name)
bool IsQUe(const std::string &rName) const
Is state QUe-state (by name)
Idx InsYlEvent(const std::string &rName)
Add new named Yl-event to generator.
void ClrErr(Idx index)
Mark state as NOT Err-state (by index)
bool IsYl(Idx index) const
Is event Yl-event (by index)
void ClrQUe(Idx index)
Mark state as NOT QUe-state (by index)
void SetQUl(Idx index)
Mark event as QUl-state (by index)
bool IsQUe(Idx index) const
Is state QUe-state (by index)
bool IsQYe(const std::string &rName) const
Is state QYe-state (by name)
void SetQUl(const std::string &rName)
Mark state as QUl-state (by name)
EventSet UlEvents(void) const
Get EventSet with Ul-events.
bool IsQUl(Idx index) const
Is state QUl-state (by index)
void ClrQUl(Idx index)
Mark state as NOT QUl-state (by index)
void SetErr(Idx index)
Mark state as Err-state (by index)
bool IsErr(Idx index) const
Is state Err-state (by index)
EventSet UEvents(void) const
Get EventSet with U-events.
bool IsUe(Idx index) const
Is event Ue-event(by index)
void ClrQUe(const StateSet &rStates)
Mark set of states as NOT QUe-states (by index)
void InsYlEvent(Idx index)
Add an existing Yl-event to generator.
bool IsU(Idx index) const
Is event U-event? (by index)
void SetUl(const std::string &rName)
Mark event as Ul-event (by name)
void ClrQYe(Idx index)
Mark state as NOT QYe-state (by index)
bool IsY(const std::string &rName) const
Is event Y-event? (by name)
bool IsY(Idx index) const
Is event Y-event? (by index)
Idx InsYeEvent(const std::string &rName)
Add new named Ye-event to generator.
void SetQYlUe(const std::string &rName)
Mark state as QYlUe-state (by name)
StateSet QYlUeStates(void) const
Get StateSet with QYlUe-states.
void SetUl(const EventSet &rEvents)
Mark set of events as Ul-events.
bool IsUe(const std::string &rName) const
Is event Ue-event(by name)
StateSet QUlStates(void) const
Get StateSet with QUl-states.
StateSet ErrStates(void) const
Get StateSet with Err-states.
void ClrQYlUe(const std::string &rName)
Mark state as NOT QYlUe-state (by name)
THioEnvironment(const std::string &rFileName)
construct a HioEnvironment from file
void SetUe(const EventSet &rEvents)
Mark set of events as Ue-events.
void ClrQYlUe(Idx index)
Mark state as NOT QYlUe-state (by index)
void SetQUe(const StateSet &rStates)
Mark set of states as QUe-states.
THioEnvironment(const Generator &rOtherGen)
HioEnvironment from a std Generator.
bool IsE(const std::string &rName) const
Is event P-event? (by name)
EventSet YlEvents(void) const
Get EventSet with Yl-events.
THioEnvironment NewHioEnvironment(void) const
Create empty HioEnvironment with same symboltable as this.
void ClrErr(const StateSet &rStates)
Mark set of states as NOT Err-states (by index)
THioEnvironment * New(void) const
Construct on heap.
void ClrErr(const std::string &rName)
Mark state as NOT Err-state (by name)
THioEnvironment(const THioEnvironment &rOtherGen)
HioEnvironment from a HioEnvironment.
EventSet EEvents(void) const
Get EventSet with P-events.
void ClrQYe(const StateSet &rStates)
Mark set of states as NOT QYe-states (by index)
void ClrQYe(const std::string &rName)
Mark state as NOT QYe-state (by name)
StateSet QUeStates(void) const
Get StateSet with QUe-states.
bool IsYe(const std::string &rName) const
Is event Ye-event(by name)
Idx InsUlEvent(const std::string &rName)
Add new named Ul-event to generator.
void SetYl(const EventSet &rEvents)
Mark set of events as Yl-events.
void SetErr(const std::string &rName)
Mark state as Err-state (by name)
void SetUe(Idx index)
Mark event Ue-event(by index)
bool IsE(Idx index) const
Is event P-event? (by index)
void ClrQUe(const std::string &rName)
Mark state as NOT QUe-state (by name)
void ClrQYlUe(const StateSet &rStates)
Mark set of states as NOT QYlUe-states (by index)
bool IsQYlUe(const std::string &rName) const
Is state QYlUe-state (by name)
void SetQYlUe(Idx index)
Mark event as QYlUe-state (by index)
Generator with specified attribute types.
Base class of all FAUDES generators.
Includes all libFAUDES headers, no plugins.
Iterator End(void) const
Iterator to the end of set.
Definition: cfl_baseset.h:1905
Iterator Begin(void) const
Iterator to the begin of set.
Definition: cfl_baseset.h:1900
Event and state attributes for hierarchical I/O systems.
#define TEMP
#define BASE
#define THIS
libFAUDES resides within the namespace faudes.
uint32_t Idx
Type definition for index type (allways 32bit)
bool IsHioEnvironmentForm(HioEnvironment &rHioEnvironment, StateSet &rQYe, StateSet &rQUe, StateSet &rQUl, StateSet &rQYlUe, EventSet &rErrEvSet, TransSet &rErrTrSet, StateSet &rErrStSet, std::string &rReportStr)
IsHioEnvironmentForm: check if rHioEnvironment is in I/O-environment form and assign state attributes...
THioEnvironment< AttributeVoid, HioStateFlags, HioEventFlags, AttributeVoid > HioEnvironment
void HioStatePartition(HioConstraint &rHioConstraint)
Function definition for run-time interface.

libFAUDES 2.32f --- 2024.12.22 --- c++ api documentaion by doxygen