cfl_cgenerator.h
Go to the documentation of this file.
1 /** @file cfl_cgenerator.h Classes TcGenerator, System and AttributeCFlags */
2 
3 /* FAU Discrete Event Systems Library (libfaudes)
4 
5 Copyright (C) 2006 Bernd Opitz
6 Copyright (C) 2007 Thomas Moor
7 Exclusive copyright is granted to Klaus Schmidt
8 
9 This library is free software; you can redistribute it and/or
10 modify it under the terms of the GNU Lesser General Public
11 License as published by the Free Software Foundation; either
12 version 2.1 of the License, or (at your option) any later version.
13 
14 This library is distributed in the hope that it will be useful,
15 but WITHOUT ANY WARRANTY; without even the implied warranty of
16 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
17 Lesser General Public License for more details.
18 
19 You should have received a copy of the GNU Lesser General Public
20 License along with this library; if not, write to the Free Software
21 Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA */
22 
23 
24 #ifndef FAUDES_CGENERATOR_H
25 #define FAUDES_CGENERATOR_H
26 
27 #include "cfl_definitions.h"
28 #include "cfl_agenerator.h"
29 #include "cfl_parallel.h"
30 #include "cfl_project.h"
31 
32 
33 namespace faudes {
34 
35 
36 /**
37  * Attribute class to model event controllability properties.
38  *
39  * This attribute is meant to be an event attribute and can distinguish between
40  * controllable, observable, forcible and abstraction events. It is based on faudes::AttributeFlags
41  * and uses the lower four bits in the flag word to store the respective boolean values.
42  * The AttributeCFlags class adds convenience functions to access these bits and a default-value
43  * that corresponds to observable and neiter controllable nor forcible.
44  *
45  * Presuming that only controllability flags are uses (different from default), the
46  * token representation is by an Option String consisting of the initials <tt>c</tt>,<tt>o</tt>,<tt>f</tt>
47  * and <tt>a</tt>, where initials are capitatised for set flags and default values
48  * are not written; eg <tt>+C+</tt>
49  * for a controllable event that is observable (default), not forcible (default) and
50  * an abstraction event (default).
51  * If other than the four controllability bits are used, std. hex format is used.
52  *
53  */
54 
55 
57 
59 
60  public:
61 
62  using AttributeFlags::operator=;
63  using AttributeFlags::operator==;
64  using AttributeFlags::operator!=;
65 
66  /**
67  * Default constructor
68  */
69  AttributeCFlags(void) : AttributeFlags() { mFlags=mDefCFlags; };
70 
71  /** Destructor */
72  virtual ~AttributeCFlags(void) {};
73 
74  /**
75  * Set controllable flag
76  */
77  void SetControllable(void) { mFlags |= mControllableFlag; }
78 
79  /**
80  * Clear controllable flag
81  */
82 
83  void ClrControllable(void) { mFlags &= ~mControllableFlag; };
84 
85  /**
86  * Query controllablility
87  */
88  bool Controllable(void) const {return ( (mFlags & mControllableFlag) != 0 ); }
89 
90 
91  /**
92  * Set observable flag
93  */
94  void SetObservable(void) { mFlags |= mObservableFlag; }
95 
96  /**
97  * Clear observable flag
98  */
99  void ClrObservable(void) { mFlags &= ~mObservableFlag; };
100 
101  /**
102  * Query observablility
103  */
104  bool Observable(void) const {return ( (mFlags & mObservableFlag) != 0 ); }
105 
106 
107  /**
108  * Set forcible flag
109  */
110  void SetForcible(void) { mFlags |= mForcibleFlag; }
111 
112  /**
113  * Clear forcible flag
114  */
115 
116  void ClrForcible(void) { mFlags &= ~mForcibleFlag; };
117 
118  /**
119  * Query forcibility
120  */
121  bool Forcible(void) const {return ( (mFlags & mForcibleFlag) != 0 ); }
122 
123 
124  /**
125  * Set abstraction flag
126  */
127  void SetHighlevel(void) { mFlags |= mAbstractionFlag; }
128 
129  /**
130  * Clear abstraction flag
131  */
132  void SetLowlevel(void) { mFlags &= ~mAbstractionFlag; };
133 
134  /**
135  * Query abstaction flag
136  */
137  bool Highlevel(void) const {return ( (mFlags & mAbstractionFlag) != 0 ); }
138 
139  /**
140  * Query abstaction flag
141  */
142  bool Lowlevel(void) const {return ( (mFlags & mAbstractionFlag) == 0 ); }
143 
144 
145  /**
146  * Test for default value
147  */
148  virtual bool IsDefault(void) const {return mFlags==mDefCFlags;};
149 
150  // flag masks for the three properties
151  const static fType mControllableFlag =0x01;
152  const static fType mObservableFlag =0x02;
153  const static fType mForcibleFlag =0x04;
154  const static fType mAbstractionFlag =0x08;
155 
156  private:
157  /** Overall default value */
158  const static fType mDefCFlags =0x0a;
159 
160  /** All flags used by CFlags */
161  const static fType mAllCFlags =0x0f;
162 
163  protected:
164 
165  /**
166  * Assignment method.
167  *
168  * @param rSrcAttr
169  * Source to assign from
170  */
171  void DoAssign(const AttributeCFlags& rSrcAttr);
172 
173  /**
174  * Test equality of configuration data.
175  *
176  * @param rOther
177  * Other attribute to compare with.
178  * @return
179  * True on match.
180  */
181  bool DoEqual(const AttributeCFlags& rOther) const;
182 
183  /**
184  * Reads attribute from TokenReader, see AttributeVoid for public wrappers.
185  * Reads a single token if it can be interpreted as AttributeCFlag, that is, if
186  * it is a respective option string or hex number. Label and Context
187  * argument are ignored. No token mismatch exceptions are thrown on error.
188  *
189  * @param rTr
190  * TokenReader to read from
191  * @param rLabel
192  * Section to read
193  * @param pContext
194  * Read context to provide contextual information
195  *
196  * @exception Exception
197  * - IO error (id 1)
198  */
199  virtual void DoRead(TokenReader& rTr, const std::string& rLabel="", const Type* pContext=0);
200 
201  /**
202  * Writes attribute to TokenWriter, see AttributeVoid for public wrappers.
203  * Label and Context argument are ignored.
204  *
205  * @param rTw
206  * TokenWriter to write to
207  * @param rLabel
208  * Section to write
209  * @param pContext
210  * Write context to provide contextual information
211  *
212  * @exception Exception
213  * - IO error (id 2)
214  */
215  virtual void DoWrite(TokenWriter& rTw,const std::string& rLabel="", const Type* pContext=0) const;
216 
217 
218  /**
219  * Writes attribute to TokenWriter (XML format), see AttributeVoid for public wrappers.
220  * Label and Context argument are ignored.
221  *
222  * @param rTw
223  * TokenWriter to write to
224  * @param rLabel
225  * Section to write
226  * @param pContext
227  * Write context to provide contextual information
228  *
229  * @exception Exception
230  * - IO error (id 2)
231  */
232  virtual void DoXWrite(TokenWriter& rTw,const std::string& rLabel="", const Type* pContext=0) const;
233 
234 
235 
236 }; // class AttributeCFlags
237 
238 
239 
240 /**
241  * Convenience typedef for event sets with controllability attributes.
242  *
243  * @ingroup ContainerClasses
244  */
246 
247 /** Convenience typedef */
249 
250 /** Compatibility: pre 2.20b used cEventSet as C++ class name*/
251 #ifdef FAUDES_COMPATIBILITY
254 #endif
255 
256 
257 /**
258  * Generator with controllability attributes.
259  *
260  * @section CGeneratorOverview Overview
261  *
262  * The TcGenerator is a variant of the TaGenerator to add an interface for events with
263  * controllabilty attributes, ie an event may be controllable, observable or forcible.
264  *
265  * Technically, the construct is based on the specialized attribute class faudes::AttributeCFlags
266  * that provides attributes with semantics for controllability properties. The TcGenerator
267  * expects an event attribute template parameter with the minimum interface defined in AttribueCFlags.
268  * Thus, you can add further semantics by deriving a class AttributeCFlagsAndMore from
269  * AttribueeCFlags and use this as event attribute parameter for TcGenerator. To model
270  * a plain finite state machine plus controllability properties, use TcGenerator with
271  * AttributeCFlags for the event attribute parameter and AttributeVoid for the other
272  * parameters. For convenience, this has been typedef-ed as System.
273  *
274  * @ingroup GeneratorClasses
275  */
276 
277 template <class GlobalAttr, class StateAttr, class EventAttr, class TransAttr>
278  class FAUDES_API TcGenerator : public TaGenerator<GlobalAttr, StateAttr, EventAttr, TransAttr> {
279  public:
280 
281 
282  /**
283  * Creates an emtpy System object
284  */
285  TcGenerator(void);
286 
287  /**
288  * System from a std Generator. Copy constructor
289  *
290  * @param rOtherGen
291  */
292  TcGenerator(const vGenerator& rOtherGen);
293 
294  /**
295  * System from a System. Copy constructor
296  *
297  * @param rOtherGen
298  */
299  TcGenerator(const TcGenerator& rOtherGen);
300 
301  /**
302  * construct a System from file
303  *
304  * @param rFileName
305  * Filename
306  *
307  * @exception Exception
308  * If opening/reading fails an Exception object is thrown (id 1, 50, 51)
309  */
310  TcGenerator(const std::string& rFileName);
311 
312  /**
313  * Construct on heap
314  *
315  * @return
316  * new Generator
317  */
318  TcGenerator* New(void) const;
319 
320  /**
321  * Construct copy on heap
322  *
323  * @return
324  * new Generator
325  */
326  TcGenerator* Copy(void) const;
327 
328  /**
329  * Type test.
330  * Uses C++ dynamic cast to test whether the specified object
331  * casts to a System.
332  *
333  * @param pOther
334  * poinetr to object to test
335  *
336  * @return
337  * TcGenerator reference if dynamic cast succeeds, else NULL
338  */
339  virtual const Type* Cast(const Type* pOther) const {
340  return dynamic_cast< const TcGenerator* > (pOther); };
341 
342 
343  /**
344  * Construct on stack
345  *
346  * @return
347  * new Generator
348  */
349  TcGenerator NewCGen(void) const;
350 
351  /**
352  * Assignment operator (uses Assign)
353  *
354  * Note: you must reimplement this operator in derived
355  * classes in order to handle internal pointers correctly
356  *
357  * @param rOtherGen
358  * Other generator
359  */
360  /*virtual*/ TcGenerator& operator= (const TcGenerator& rOtherGen);
361  //using TaGenerator<GlobalAttr, StateAttr, EventAttr, TransAttr>::operator=;
362 
363  /**
364  * Assignment method
365  *
366  * Note: you must reimplement this method in derived
367  * classes in order to handle internal pointers correctly
368  *
369  * @param rSource
370  * Other generator
371  */
372  virtual TcGenerator& Assign(const Type& rSource);
373 
374  /**
375  * Add an existing controllable event to generator.
376  * An entry in the global eventtable will be made.
377  *
378  * @param index
379  * Event index
380  */
381  void InsControllableEvent(Idx index);
382 
383  /**
384  * Add new named controllable event to generator.
385  * An entry in the global eventtable will be made if event is new.
386  *
387  * @param rName
388  * Name of the event to add
389  *
390  * @return
391  * New global unique index
392  */
393  Idx InsControllableEvent(const std::string& rName);
394 
395  /**
396  * Add an existing uncontrollable event to generator.
397  * An entry in the global eventtable will be made.
398  *
399  * @param index
400  * Event index
401  */
402  void InsUncontrollableEvent(Idx index);
403 
404  /**
405  * Add new named uncontrollable event to generator.
406  * An entry in the global eventtable will be made if event is new.
407  *
408  * @param rName
409  * Name of the event to add
410  *
411  * @return
412  * New global unique index
413  */
414  Idx InsUncontrollableEvent(const std::string& rName);
415 
416  /**
417  * Mark event controllable (by index)
418  *
419  * @param index
420  * Event index
421  */
422  void SetControllable(Idx index);
423 
424  /**
425  * Mark event controllable (by name)
426  *
427  * @param rName
428  * Event name
429  */
430  void SetControllable(const std::string& rName);
431 
432  /**
433  * Mark set of events controllable (by index)
434  *
435  * @param rEvents
436  * EventSet
437  */
438  void SetControllable(const EventSet& rEvents);
439 
440  /**
441  * Mark event uncontrollable (by index)
442  *
443  * @param index
444  * Event index
445  */
446  void ClrControllable(Idx index);
447 
448  /**
449  * Mark event uncontrollable (by name)
450  *
451  * @param rName
452  * Event name
453  */
454  void ClrControllable(const std::string& rName);
455 
456  /**
457  * Mark set of events uncontrollable (by index)
458  *
459  * @param rEvents
460  * EventSet
461  */
462  void ClrControllable(const EventSet& rEvents);
463 
464  /**
465  * Is event controllable (by index)
466  *
467  * @param index
468  * Event index
469  *
470  * @return
471  * True / false
472  */
473  bool Controllable(Idx index) const;
474 
475  /**
476  * Is event controllable (by name)
477  *
478  * @param rName
479  * Event name
480  *
481  * @return
482  * True / false
483  */
484  bool Controllable(const std::string& rName) const;
485 
486  /**
487  * Get EventSet with controllable events
488  *
489  * @return
490  * EventSet of controllable events
491  */
492  EventSet ControllableEvents(void) const;
493 
494  /**
495  * Get EventSet with uncontrollable events
496  *
497  * @return
498  * EventSet of uncontrollable events
499  */
500  EventSet UncontrollableEvents(void) const;
501 
502  /**
503  * Add an existing observable event to generator.
504  * An entry in the global eventtable will be made.
505  *
506  * @param index
507  * Event index
508  */
509  void InsObservableEvent(Idx index);
510 
511  /**
512  * Add new named observable event to generator.
513  * An entry in the global eventtable will be made if event is new.
514  *
515  * @param rName
516  * Name of the event to add
517  *
518  * @return
519  * New global unique index
520  */
521  Idx InsObservableEvent(const std::string& rName);
522 
523  /**
524  * Add an existing unobservable event to generator.
525  * An entry in the global eventtable will be made.
526  *
527  * @param index
528  * Event index
529  */
530  void InsUnobservableEvent(Idx index);
531 
532  /**
533  * Add new named unobservable event to generator.
534  * An entry in the global eventtable will be made if event is new.
535  *
536  * @param rName
537  * Name of the event to add
538  *
539  * @return
540  * New global unique index
541  */
542  Idx InsUnobservableEvent(const std::string& rName);
543 
544  /**
545  * Mark event observable (by index)
546  *
547  * @param index
548  * Event index
549  */
550  void SetObservable(Idx index);
551 
552  /**
553  * Mark event observable (by name)
554  *
555  * @param rName
556  * Event name
557  */
558  void SetObservable(const std::string& rName);
559 
560  /**
561  * Mark set of events observable
562  *
563  * @param rEvents
564  * EventSet
565  */
566  void SetObservable(const EventSet& rEvents);
567 
568  /**
569  * Mark event unobservable (by index)
570  *
571  * @param index
572  * Event index
573  */
574  void ClrObservable(Idx index);
575 
576  /**
577  * Mark event unobservable (by name)
578  *
579  * @param rName
580  * Event name
581  */
582  void ClrObservable(const std::string& rName);
583 
584  /**
585  * Mark set of events unobservable
586  *
587  * @param rEvents
588  * EventSet
589  */
590  void ClrObservable(const EventSet& rEvents);
591 
592  /**
593  * Is event observable (by index)
594  *
595  * @param index
596  * Event index
597  *
598  * @return
599  * True / false
600  */
601  bool Observable(Idx index) const;
602 
603  /**
604  * Is event observable (by name)
605  *
606  * @param rName
607  * Event name
608  *
609  * @return
610  * True / false
611  */
612  bool Observable(const std::string& rName) const;
613 
614  /**
615  * Get EventSet with observable events
616  *
617  * @return
618  * EventSet of controllable events
619  */
620  EventSet ObservableEvents(void) const;
621 
622  /**
623  * Get EventSet with unobservable events
624  *
625  * @return
626  * EventSet of uncontrollable events
627  */
628  EventSet UnobservableEvents(void) const;
629 
630  /**
631  * Add an existing forcible event to generator.
632  * An entry in the global eventtable will be made.
633  *
634  * @param index
635  * Event index
636  */
637  void InsForcibleEvent(Idx index);
638 
639  /**
640  * Add new named forcible event to generator.
641  * An entry in the global eventtable will be made if event is new.
642  *
643  * @param rName
644  * Name of the event to add
645  *
646  * @return
647  * New global unique index
648  */
649  Idx InsForcibleEvent(const std::string& rName);
650 
651  /**
652  * Add an existing unforcible event to generator.
653  * An entry in the global eventtable will be made.
654  *
655  * @param index
656  * Event index
657  */
658  void InsUnforcibleEvent(Idx index);
659 
660  /**
661  * Add new named unforcible event to generator.
662  * An entry in the global eventtable will be made if event is new.
663  *
664  * @param rName
665  * Name of the event to add
666  *
667  * @return
668  * New global unique index
669  */
670  Idx InsUnforcibleEvent(const std::string& rName);
671 
672  /**
673  * Mark event forcible (by index)
674  *
675  * @param index
676  * Event index
677  */
678  void SetForcible(Idx index);
679 
680  /**
681  * Mark event forcible (by name)
682  *
683  * @param rName
684  * Event name
685  */
686  void SetForcible(const std::string& rName);
687 
688  /**
689  * Mark set of events forcible
690  *
691  * @param rEvents
692  * EventSet
693  */
694  void SetForcible(const EventSet& rEvents);
695 
696  /**
697  * Mark event unforcible (by index)
698  *
699  * @param index
700  * Event index
701  */
702  void ClrForcible(Idx index);
703 
704  /**
705  * Mark event unforcible (by name)
706  *
707  * @param rName
708  * Event name
709  */
710  void ClrForcible(const std::string& rName);
711 
712  /**
713  * Mark set of events unforcible
714  *
715  * @param rEvents
716  * EventSet
717  */
718  void ClrForcible(const EventSet& rEvents);
719 
720  /**
721  * Is event forcible (by index)
722  *
723  * @param index
724  * Event index
725  *
726  * @return
727  * True / false
728  */
729  bool Forcible(Idx index) const;
730 
731  /**
732  * Is event forcible (by name)
733  *
734  * @param rName
735  * Event name
736  *
737  * @return
738  * True / false
739  */
740  bool Forcible(const std::string& rName) const;
741 
742  /**
743  * Get EventSet with forcible events
744  *
745  * @return
746  * EventSet of controllable events
747  */
748  EventSet ForcibleEvents(void) const;
749 
750  /**
751  * Get EventSet with unforcible events
752  *
753  * @return
754  * EventSet of uncontrollable events
755  */
756  EventSet UnforcibleEvents(void) const;
757 
758  /**
759  * Add an existing abstraction event to generator.
760  * An entry in the global eventtable will be made.
761  *
762  * @param index
763  * Event index
764  */
765  void InsHighlevelEvent(Idx index);
766 
767  /**
768  * Add new named abstraction event to generator.
769  * An entry in the global eventtable will be made if event is new.
770  *
771  * @param rName
772  * Name of the event to add
773  *
774  * @return
775  * New global unique index
776  */
777  Idx InsHighlevelEvent(const std::string& rName);
778 
779  /**
780  * Add an existing low-level event to generator.
781  * An entry in the global eventtable will be made.
782  *
783  * @param index
784  * Event index
785  */
786  void InsLowlevelEvent(Idx index);
787 
788  /**
789  * Add new named low-level event to generator.
790  * An entry in the global eventtable will be made if event is new.
791  *
792  * @param rName
793  * Name of the event to add
794  *
795  * @return
796  * New global unique index
797  */
798  Idx InsLowlevelEvent(const std::string& rName);
799 
800  /**
801  * Mark event as highlevel event (by index)
802  *
803  * @param index
804  * Event index
805  */
806  void SetHighlevel(Idx index);
807 
808  /**
809  * Mark event as highlevel event (by name)
810  *
811  * @param rName
812  * Event name
813  */
814  void SetHighlevel(const std::string& rName);
815 
816  /**
817  * Mark set of events as high-level events
818  *
819  * @param rEvents
820  * EventSet
821  */
822  void SetHighlevel(const EventSet& rEvents);
823 
824  /**
825  * Mark event as low-level event (by index)
826  *
827  * @param index
828  * Event index
829  */
830  void SetLowlevel(Idx index);
831 
832  /**
833  * Mark event as low-level event (by name)
834  *
835  * @param rName
836  * Event name
837  */
838  void SetLowlevel(const std::string& rName);
839 
840  /**
841  * Mark set of events as low-level events.
842  *
843  * @param rEvents
844  * EventSet
845  */
846  void SetLowlevel(const EventSet& rEvents);
847 
848  /**
849  * Test for high-level event (by index)
850  *
851  * @param index
852  * Event index
853  *
854  * @return
855  * True / false
856  */
857  bool Highlevel(Idx index) const;
858 
859  /**
860  * Test for high-level event (by name)
861  *
862  * @param rName
863  * Event name
864  *
865  * @return
866  * True / false
867  */
868  bool Highlevel(const std::string& rName) const;
869 
870  /**
871  * Test for low-level event (by index)
872  *
873  * @param index
874  * Event index
875  *
876  * @return
877  * True / false
878  */
879  bool Lowlevel(Idx index) const;
880 
881  /**
882  * Test for low-level event (by name)
883  *
884  * @param rName
885  * Event name
886  *
887  * @return
888  * True / false
889  */
890  bool Lowlevel(const std::string& rName) const;
891 
892  /**
893  * Get EventSet of all high-level events
894  *
895  * @return
896  * EventSet of high-level events
897  */
898  EventSet HighlevelEvents(void) const;
899 
900  /**
901  * Get EventSet of all low-level events
902  *
903  * @return
904  * EventSet of low-level events
905  */
906  EventSet LowlevelEvents(void) const;
907 
908 
909  private:
910 
911  protected:
912 
913 }; // end class TcGenerator
914 
915 
916 /**
917  * Convenience typedef for std System.
918  *
919  * @ingroup GeneratorClasses
920  */
922 
923 /**
924  * Convenience typedef for vectors of systems
925  * \ingroup GeneratorClasses
926  */
928 
929 /** Compatibility: pre 2.20b used cGenerator as C++ class name*/
930 #ifdef FAUDES_COMPATIBILITY
933 #endif
934 
935 
936 
937 /*
938 ***************************************************************************
939 ***************************************************************************
940 ***************************************************************************
941 
942 Implementation cgenerator
943 
944 ***************************************************************************
945 ***************************************************************************
946 ***************************************************************************
947 */
948 
949 /* convenience access to relevant scopes */
950 #define THIS TcGenerator<GlobalAttr, StateAttr, EventAttr, TransAttr>
951 #define BASE TaGenerator<GlobalAttr, StateAttr, EventAttr, TransAttr>
952 #define TEMP template <class GlobalAttr, class StateAttr, class EventAttr, class TransAttr>
953 
954 
955 // TcGenerator(void)
956 TEMP THIS::TcGenerator(void) : BASE() {
957  FD_DG("TcGenerator(" << this << ")::TcGenerator()");
958 }
959 
960 // TcGenerator(rOtherGen)
961 TEMP THIS::TcGenerator(const TcGenerator& rOtherGen) : BASE(rOtherGen) {
962  FD_DG("TcGenerator(" << this << ")::TcGenerator(rOtherGen)");
963 }
964 
965 // TcGenerator(rOtherGen)
966 TEMP THIS::TcGenerator(const vGenerator& rOtherGen) : BASE(rOtherGen) {
967  FD_DG("TcGenerator(" << this << ")::TcGenerator(rOtherGen)");
968 }
969 
970 // TcGenerator(rFilename)
971 TEMP THIS::TcGenerator(const std::string& rFileName) : BASE(rFileName) {
972  FD_DG("TcGenerator(" << this << ")::TcGenerator(rFilename) : done");
973 }
974 
975 // operator=
976 TEMP THIS& THIS::operator= (const TcGenerator& rOtherGen) {
977  FD_DG("TcGenerator(" << this << ")::operator = [v]" << &rOtherGen);
978  return Assign(rOtherGen);
979 }
980 
981 // copy from other faudes type
982 TEMP THIS& THIS::Assign(const Type& rSrc) {
983  FD_DG("TcGenerator(" << this << ")::Assign([type] " << &rSrc << ")");
984  // bail out on match
985  if(&rSrc==static_cast<const Type*>(this)) return *this;
986 
987  // cast tests (clang 8.0.0 issues, 2017)
988  /*
989  const THIS* cgen=dynamic_cast<const THIS*>(&rSrc);
990  FD_WARN("TcGenerator(" << this << ")::Assign(..): cgen " << cgen);
991  const BASE* agen=dynamic_cast<const BASE*>(&rSrc);
992  FD_WARN("TcGenerator(" << this << ")::Assign(..): agen " << agen);
993  const vGenerator* vgen=dynamic_cast<const vGenerator*>(&rSrc);
994  FD_WARN("TcGenerator(" << this << ")::Assign(..): vgen " << vgen);
995  const BASE* agen2=dynamic_cast<const BASE*>(cgen);
996  FD_WARN("TcGenerator(" << this << ")::Assign(..): agen2 " << agen);
997  */
998 
999  // pass on to base
1000  FD_DG("TcGenerator(" << this << ")::Assign([type] " << &rSrc << "): call base");
1001  BASE::Assign(rSrc);
1002  return *this;
1003 }
1004 
1005 // New
1006 TEMP THIS* THIS::New(void) const {
1007  // allocate
1008  THIS* res = new THIS;
1009  // fix base data
1010  res->EventSymbolTablep(BASE::mpEventSymbolTable);
1011  res->mStateNamesEnabled=BASE::mStateNamesEnabled;
1012  res->mReindexOnWrite=BASE::mReindexOnWrite;
1013  return res;
1014 }
1015 
1016 // Copy
1017 TEMP THIS* THIS::Copy(void) const {
1018  // allocate
1019  THIS* res = new THIS(*this);
1020  // done
1021  return res;
1022 }
1023 
1024 // NewCGen
1025 TEMP THIS THIS::NewCGen(void) const {
1026  // call base (fixes by assignment constructor)
1027  THIS res= BASE::NewAGen();
1028  return res;
1029 }
1030 
1031 
1032 // CAST
1033 //TEMP const Type* THIS::Cast(const Type* pOther) const {
1034 // return dynamic_cast< const THIS* > (pOther);
1035 //}
1036 
1037 
1038 
1039  // Controllable(index)
1040  TEMP bool THIS::Controllable(Idx index) const {
1041  EventAttr attr=BASE::EventAttribute(index);
1042  return attr.Controllable();
1043  }
1044 
1045  // Controllable(rName)
1046  TEMP bool THIS::Controllable(const std::string& rName) const {
1047  EventAttr attr=BASE::EventAttribute(rName);
1048  return attr.Controllable();
1049  }
1050 
1051  // InsControllableEvent(index)
1052  TEMP void THIS::InsControllableEvent(Idx index) {
1053  FD_DG("TcGenerator(" << this << ")::InsControllableEvent(" << index << ")");
1054  EventAttr attr;
1055  attr.SetControllable();
1056  BASE::InsEvent(index,attr);
1057  }
1058 
1059  // InsControllableEvent(rName)
1060  TEMP Idx THIS::InsControllableEvent(const std::string& rName) {
1061  FD_DG("TcGenerator(" << this << ")::InsControllableEvent(" << rName << ")");
1062  EventAttr attr;
1063  attr.SetControllable();
1064  return BASE::InsEvent(rName,attr);
1065  }
1066 
1067  // InsUncontrollableEvent(index)
1068  TEMP void THIS::InsUncontrollableEvent(Idx index) {
1069  FD_DG("TcGenerator(" << this << ")::InsUncontrollableEvent(" << index << ")");
1070  EventAttr attr;
1071  attr.ClrControllable();
1072  BASE::InsEvent(index,attr);
1073  }
1074 
1075  // InsUncontrollableEvent(rName)
1076  TEMP Idx THIS::InsUncontrollableEvent(const std::string& rName) {
1077  FD_DG("TcGenerator(" << this << ")::InsUncontrollableEvent(" << rName << ")");
1078  EventAttr attr;
1079  attr.ClrControllable();
1080  return BASE::InsEvent(rName,attr);
1081  }
1082 
1083  // SetControllable(index)
1084  TEMP void THIS::SetControllable(Idx index) {
1085  FD_DG("TcGenerator(" << this << ")::SetControllable(" << index << ")");
1086  EventAttr attr=BASE::EventAttribute(index);
1087  attr.SetControllable();
1088  BASE::pAlphabet->Attribute(index,attr);
1089  }
1090 
1091  // SetControllable(rName)
1092  TEMP void THIS::SetControllable(const std::string& rName) {
1093  FD_DG("TcGenerator(" << this << ")::SetControllable(" << rName << ")");
1094  Idx index = BASE::EventIndex(rName);
1095  SetControllable(index);
1096  }
1097 
1098  //SetControllable(rEvents)
1099  TEMP void THIS::SetControllable(const EventSet& rEvents) {
1100  FD_DG("TcGenerator(" << this << ")::SetControllable(rEvents)");
1101  EventSet::Iterator it;
1102  for(it=rEvents.Begin(); it!=rEvents.End(); it++) {
1103  SetControllable(*it);
1104  }
1105  }
1106 
1107  // ClrControllable(index)
1108  TEMP void THIS::ClrControllable(Idx index) {
1109  FD_DG("TcGenerator(" << this << ")::ClrControllable(" << index << ")");
1110  EventAttr attr=BASE::EventAttribute(index);
1111  attr.ClrControllable();
1112  BASE::pAlphabet->Attribute(index,attr);
1113  }
1114 
1115  // ClrControllable(rName)
1116  TEMP void THIS::ClrControllable(const std::string& rName) {
1117  FD_DG("TcGenerator(" << this << ")::ClrControllable(" << rName << ")");
1118  Idx index = BASE::EventIndex(rName);
1119  ClrControllable(index);
1120  }
1121 
1122  //ClrControllable(rEvents)
1123  TEMP void THIS::ClrControllable(const EventSet& rEvents) {
1124  FD_DG("TcGenerator(" << this << ")::ClrControllable(rEvents)");
1125  EventSet::Iterator it;
1126  for(it=rEvents.Begin(); it!=rEvents.End(); it++) {
1127  ClrControllable(*it);
1128  }
1129  }
1130 
1131  //ControllableEvents()
1132  TEMP EventSet THIS::ControllableEvents(void) const {
1133  FD_DG("TcGenerator(" << this << ")::ControllableEvents()");
1134  EventSet res;
1135  EventSet::Iterator it;
1136  for(it=BASE::AlphabetBegin(); it!=BASE::AlphabetEnd(); it++) {
1137  if(Controllable(*it)) res.Insert(*it);
1138  }
1139  return res;
1140  }
1141 
1142  //UncontrollableEvents()
1143  TEMP
1144  EventSet THIS::UncontrollableEvents(void) const {
1145  FD_DG("TcGenerator(" << this << ")::UncontrollableEvents()");
1146  EventSet res;
1147  EventSet::Iterator it;
1148  for(it=BASE::AlphabetBegin(); it!=BASE::AlphabetEnd(); it++) {
1149  if(!Controllable(*it)) res.Insert(*it);
1150  }
1151  return res;
1152  }
1153 
1154  // Observable(index)
1155  TEMP bool THIS::Observable(Idx index) const {
1156  EventAttr attr=BASE::EventAttribute(index);
1157  return attr.Observable();
1158  }
1159 
1160  // Observable(rName)
1161  TEMP bool THIS::Observable(const std::string& rName) const {
1162  EventAttr attr=BASE::EventAttribute(rName);
1163  return attr.Observable();
1164  }
1165 
1166  // InsObservableEvent(index)
1167  TEMP void THIS::InsObservableEvent(Idx index) {
1168  FD_DG("TcGenerator(" << this << ")::InsObservableEvent(" << index << ")");
1169  EventAttr attr;
1170  attr.SetObservable();
1171  BASE::InsEvent(index,attr);
1172  }
1173 
1174  // InsObservableEvent(rName)
1175  TEMP Idx THIS::InsObservableEvent(const std::string& rName) {
1176  FD_DG("TcGenerator(" << this << ")::InsObservableEvent(" << rName << ")");
1177  EventAttr attr;
1178  attr.SetObservable();
1179  return BASE::InsEvent(rName,attr);
1180  }
1181 
1182  // InsUnobservableEvent(index)
1183  TEMP void THIS::InsUnobservableEvent(Idx index) {
1184  FD_DG("TcGenerator(" << this << ")::InsUnobservableEvent(" << index << ")");
1185  EventAttr attr;
1186  attr.ClrObservable();
1187  BASE::InsEvent(index,attr);
1188  }
1189 
1190  // InsUnobservableEvent(rName)
1191  TEMP Idx THIS::InsUnobservableEvent(const std::string& rName) {
1192  FD_DG("TcGenerator(" << this << ")::InsUnobservableEvent(" << rName << ")");
1193  EventAttr attr;
1194  attr.ClrObservable();
1195  return BASE::InsEvent(rName,attr);
1196  }
1197 
1198  // SetObservable(index)
1199  TEMP void THIS::SetObservable(Idx index) {
1200  FD_DG("TcGenerator(" << this << ")::SetObservable(" << index << ")");
1201  EventAttr attr=BASE::EventAttribute(index);
1202  attr.SetObservable();
1203  BASE::pAlphabet->Attribute(index,attr);
1204  }
1205 
1206  // SetObservable(rName)
1207  TEMP void THIS::SetObservable(const std::string& rName) {
1208  FD_DG("TcGenerator(" << this << ")::SetObservable(" << rName << ")");
1209  Idx index = BASE::EventIndex(rName);
1210  SetObservable(index);
1211  }
1212 
1213  //SetObservable(rEvents)
1214  TEMP void THIS::SetObservable(const EventSet& rEvents) {
1215  FD_DG("TcGenerator(" << this << ")::SetObservable(rEvents)");
1216  EventSet::Iterator it;
1217  for(it=rEvents.Begin(); it!=rEvents.End(); it++) {
1218  SetObservable(*it);
1219  }
1220  }
1221 
1222  // ClrObservable(index)
1223  TEMP void THIS::ClrObservable(Idx index) {
1224  FD_DG("TcGenerator(" << this << ")::ClrObservable(" << index << ")");
1225  EventAttr attr=BASE::EventAttribute(index);
1226  attr.ClrObservable();
1227  BASE::pAlphabet->Attribute(index,attr);
1228  }
1229 
1230  // ClrObservable(rName)
1231  TEMP void THIS::ClrObservable(const std::string& rName) {
1232  FD_DG("TcGenerator(" << this << ")::ClrObservable(" << rName << ")");
1233  Idx index = BASE::EventIndex(rName);
1234  ClrObservable(index);
1235  }
1236 
1237  //ClrObservable(rEvents)
1238  TEMP void THIS::ClrObservable(const EventSet& rEvents) {
1239  FD_DG("TcGenerator(" << this << ")::ClrObservable(rEvents)");
1240  EventSet::Iterator it;
1241  for(it=rEvents.Begin(); it!=rEvents.End(); it++) {
1242  ClrObservable(*it);
1243  }
1244  }
1245 
1246  //ObservableEvents()
1247  TEMP EventSet THIS::ObservableEvents(void) const {
1248  FD_DG("TcGenerator(" << this << ")::ObservableEvents()");
1249  EventSet res;
1250  EventSet::Iterator it;
1251  for(it=BASE::AlphabetBegin(); it!=BASE::AlphabetEnd(); it++) {
1252  if(Observable(*it)) res.Insert(*it);
1253  }
1254  return res;
1255  }
1256 
1257  //UnobservableEvents()
1258  TEMP
1259  EventSet THIS::UnobservableEvents(void) const {
1260  FD_DG("TcGenerator(" << this << ")::UnobservableEvents()");
1261  EventSet res;
1262  EventSet::Iterator it;
1263  for(it=BASE::AlphabetBegin(); it!=BASE::AlphabetEnd(); it++) {
1264  if(!Observable(*it)) res.Insert(*it);
1265  }
1266  return res;
1267  }
1268 
1269 
1270  //Forcible(index)
1271  TEMP bool THIS::Forcible(Idx index) const {
1272  EventAttr attr=BASE::EventAttribute(index);
1273  return attr.Forcible();
1274  }
1275 
1276  // Forcible(rName)
1277  TEMP bool THIS::Forcible(const std::string& rName) const {
1278  EventAttr attr=BASE::EventAttribute(rName);
1279  return attr.Forcible();
1280  }
1281 
1282  // InsForcibleEvent(index)
1283  TEMP void THIS::InsForcibleEvent(Idx index) {
1284  FD_DG("TcGenerator(" << this << ")::InsForcibleEvent(" << index << ")");
1285  EventAttr attr;
1286  attr.SetForcible();
1287  BASE::InsEvent(index,attr);
1288  }
1289 
1290  // InsForcibleEvent(rName)
1291  TEMP Idx THIS::InsForcibleEvent(const std::string& rName) {
1292  FD_DG("TcGenerator(" << this << ")::InsForcibleEvent(" << rName << ")");
1293  EventAttr attr;
1294  attr.SetForcible();
1295  return BASE::InsEvent(rName,attr);
1296  }
1297 
1298  // InsUnforcibleEvent(index)
1299  TEMP void THIS::InsUnforcibleEvent(Idx index) {
1300  FD_DG("TcGenerator(" << this << ")::InsUnforcibleEvent(" << index << ")");
1301  EventAttr attr;
1302  attr.ClrForcible();
1303  BASE::InsEvent(index,attr);
1304  }
1305 
1306  // InsUnforcibleEvent(rName)
1307  TEMP Idx THIS::InsUnforcibleEvent(const std::string& rName) {
1308  FD_DG("TcGenerator(" << this << ")::InsUnforcibleEvent(" << rName << ")");
1309  EventAttr attr;
1310  attr.ClrForcible();
1311  return BASE::InsEvent(rName,attr);
1312  }
1313 
1314  // SetForcible(index)
1315  TEMP void THIS::SetForcible(Idx index) {
1316  FD_DG("TcGenerator(" << this << ")::SetForcible(" << index << ")");
1317  EventAttr attr=BASE::EventAttribute(index);
1318  attr.SetForcible();
1319  BASE::pAlphabet->Attribute(index,attr);
1320  }
1321 
1322  // SetForcible(rName)
1323  TEMP void THIS::SetForcible(const std::string& rName) {
1324  FD_DG("TcGenerator(" << this << ")::SetForcible(" << rName << ")");
1325  Idx index = BASE::EventIndex(rName);
1326  SetForcible(index);
1327  }
1328 
1329  //SetForcible(rEvents)
1330  TEMP void THIS::SetForcible(const EventSet& rEvents) {
1331  FD_DG("TcGenerator(" << this << ")::SetForcible(rEvents)");
1332  EventSet::Iterator it;
1333  for(it=rEvents.Begin(); it!=rEvents.End(); it++) {
1334  SetForcible(*it);
1335  }
1336  }
1337 
1338  // ClrForcible(index)
1339  TEMP void THIS::ClrForcible(Idx index) {
1340  FD_DG("TcGenerator(" << this << ")::ClrForcible(" << index << ")");
1341  EventAttr attr=BASE::EventAttribute(index);
1342  attr.ClrForcible();
1343  BASE::pAlphabet->Attribute(index,attr);
1344  }
1345 
1346  // ClrForcible(rName)
1347  TEMP void THIS::ClrForcible(const std::string& rName) {
1348  FD_DG("TcGenerator(" << this << ")::ClrForcible(" << rName << ")");
1349  Idx index = BASE::EventIndex(rName);
1350  ClrForcible(index);
1351  }
1352 
1353  //ClrForcible(rEvents)
1354  TEMP void THIS::ClrForcible(const EventSet& rEvents) {
1355  FD_DG("TcGenerator(" << this << ")::ClrForcible(rEvents)");
1356  EventSet::Iterator it;
1357  for(it=rEvents.Begin(); it!=rEvents.End(); it++) {
1358  ClrForcible(*it);
1359  }
1360  }
1361 
1362  //ForcibleEvents()
1363  TEMP EventSet THIS::ForcibleEvents(void) const {
1364  FD_DG("TcGenerator(" << this << ")::ForcibleEvents()");
1365  EventSet res;
1366  EventSet::Iterator it;
1367  for(it=BASE::AlphabetBegin(); it!=BASE::AlphabetEnd(); it++) {
1368  if(Forcible(*it)) res.Insert(*it);
1369  }
1370  return res;
1371  }
1372 
1373  //UnforcibleEvents()
1374  TEMP
1375  EventSet THIS::UnforcibleEvents(void) const {
1376  FD_DG("TcGenerator(" << this << ")::UnforcibleEvents()");
1377  EventSet res;
1378  EventSet::Iterator it;
1379  for(it=BASE::AlphabetBegin(); it!=BASE::AlphabetEnd(); it++) {
1380  if(!Forcible(*it)) res.Insert(*it);
1381  }
1382  return res;
1383  }
1384 
1385 
1386  //Highlevel(index)
1387  TEMP bool THIS::Highlevel(Idx index) const {
1388  EventAttr attr=BASE::EventAttribute(index);
1389  return attr.Highlevel();
1390  }
1391 
1392  // Highlevel(rName)
1393  TEMP bool THIS::Highlevel(const std::string& rName) const {
1394  EventAttr attr=BASE::EventAttribute(rName);
1395  return attr.Highlevel();
1396  }
1397 
1398  //Lowlevel(index)
1399  TEMP bool THIS::Lowlevel(Idx index) const {
1400  EventAttr attr=BASE::EventAttribute(index);
1401  return attr.Lowlevel();
1402  }
1403 
1404  // Lowlevel(rName)
1405  TEMP bool THIS::Lowlevel(const std::string& rName) const {
1406  EventAttr attr=BASE::EventAttribute(rName);
1407  return attr.Lowlevel();
1408  }
1409 
1410  // InsHighlevelEvent(index)
1411  TEMP void THIS::InsHighlevelEvent(Idx index) {
1412  FD_DG("TcGenerator(" << this << ")::InsHighlevelEvent(" << index << ")");
1413  EventAttr attr;
1414  attr.SetHighlevel();
1415  BASE::InsEvent(index,attr);
1416  }
1417 
1418  // InsHighlevelEvent(rName)
1419  TEMP Idx THIS::InsHighlevelEvent(const std::string& rName) {
1420  FD_DG("TcGenerator(" << this << ")::InsHighlevelEvent(" << rName << ")");
1421  EventAttr attr;
1422  attr.SetHighlevel();
1423  return BASE::InsEvent(rName,attr);
1424  }
1425 
1426  // InsLowlevelEvent(index)
1427  TEMP void THIS::InsLowlevelEvent(Idx index) {
1428  FD_DG("TcGenerator(" << this << ")::InsLowlevelEvent(" << index << ")");
1429  EventAttr attr;
1430  attr.SetLowlevel();
1431  BASE::InsEvent(index,attr);
1432  }
1433 
1434  // InsLowlevelEvent(rName)
1435  TEMP Idx THIS::InsLowlevelEvent(const std::string& rName) {
1436  FD_DG("TcGenerator(" << this << ")::InsLowlevelEvent(" << rName << ")");
1437  EventAttr attr;
1438  attr.SetLowlevel();
1439  return BASE::InsEvent(rName,attr);
1440  }
1441 
1442  // SetHighlevel(index)
1443  TEMP void THIS::SetHighlevel(Idx index) {
1444  FD_DG("TcGenerator(" << this << ")::SetHighlevel(" << index << ")");
1445  EventAttr attr=BASE::EventAttribute(index);
1446  attr.SetHighlevel();
1447  BASE::pAlphabet->Attribute(index,attr);
1448  }
1449 
1450  // SetHighlevel(rName)
1451  TEMP void THIS::SetHighlevel(const std::string& rName) {
1452  FD_DG("TcGenerator(" << this << ")::SetHighlevel(" << rName << ")");
1453  Idx index = BASE::EventIndex(rName);
1454  SetHighlevel(index);
1455  }
1456 
1457  //SetHighlevel(rEvents)
1458  TEMP void THIS::SetHighlevel(const EventSet& rEvents) {
1459  FD_DG("TcGenerator(" << this << ")::SetHighlevel(rEvents)");
1460  EventSet::Iterator it;
1461  for(it=rEvents.Begin(); it!=rEvents.End(); it++) {
1462  SetHighlevel(*it);
1463  }
1464  }
1465 
1466  // SetLowlevel(index)
1467  TEMP void THIS::SetLowlevel(Idx index) {
1468  FD_DG("TcGenerator(" << this << ")::SetLowlevel(" << index << ")");
1469  EventAttr attr=BASE::EventAttribute(index);
1470  attr.SetLowlevel();
1471  BASE::pAlphabet->Attribute(index,attr);
1472  }
1473 
1474  // SetLowlevel(rName)
1475  TEMP void THIS::SetLowlevel(const std::string& rName) {
1476  FD_DG("TcGenerator(" << this << ")::SetLowlevel(" << rName << ")");
1477  Idx index = BASE::EventIndex(rName);
1478  SetLowlevel(index);
1479  }
1480 
1481  //SetLowlevel(rEvents)
1482  TEMP void THIS::SetLowlevel(const EventSet& rEvents) {
1483  FD_DG("TcGenerator(" << this << ")::SetLowlevel(rEvents)");
1484  EventSet::Iterator it;
1485  for(it=rEvents.Begin(); it!=rEvents.End(); it++) {
1486  SetLowlevel(*it);
1487  }
1488  }
1489 
1490  //HighlevelEvents()
1491  TEMP EventSet THIS::HighlevelEvents(void) const {
1492  FD_DG("TcGenerator(" << this << ")::HighlevelEvents()");
1493  EventSet res;
1494  EventSet::Iterator it;
1495  for(it=BASE::AlphabetBegin(); it!=BASE::AlphabetEnd(); it++) {
1496  if(Highlevel(*it)) res.Insert(*it);
1497  }
1498  return res;
1499  }
1500 
1501  //LowlevelEvents()
1502  TEMP
1503  EventSet THIS::LowlevelEvents(void) const {
1504  FD_DG("TcGenerator(" << this << ")::LowlevelEvents()");
1505  EventSet res;
1506  EventSet::Iterator it;
1507  for(it=BASE::AlphabetBegin(); it!=BASE::AlphabetEnd(); it++) {
1508  if(Lowlevel(*it)) res.Insert(*it);
1509  }
1510  return res;
1511  }
1512 
1513 
1514 
1515 #undef TEMP
1516 #undef BASE
1517 #undef THIS
1518 
1519 
1520 } // namespace faudes
1521 
1522 #endif
1523 
Attributed generator class TaGenerator.
#define TEMP
#define BASE
#define THIS
Compiletime options.
#define FD_DG(message)
Debug: optional report on generator operations.
parallel composition
#define FAUDES_API
Interface export/import symbols: windows.
Definition: cfl_platform.h:80
language projection
#define FAUDES_TYPE_DECLARATION(ftype, ctype, cbase)
faudes type declaration macro
Definition: cfl_types.h:867
Attribute class to model event controllability properties.
void SetHighlevel(void)
Set abstraction flag.
bool Lowlevel(void) const
Query abstaction flag.
void SetForcible(void)
Set forcible flag.
void ClrControllable(void)
Clear controllable flag.
bool Forcible(void) const
Query forcibility.
void ClrForcible(void)
Clear forcible flag.
virtual ~AttributeCFlags(void)
Destructor.
bool Controllable(void) const
Query controllablility.
void ClrObservable(void)
Clear observable flag.
bool Highlevel(void) const
Query abstaction flag.
virtual bool IsDefault(void) const
Test for default value.
void SetControllable(void)
Set controllable flag.
bool Observable(void) const
Query observablility.
void SetLowlevel(void)
Clear abstraction flag.
AttributeCFlags(void)
Default constructor.
void SetObservable(void)
Set observable flag.
Boolean flags Attribute.
Set of indices with symbolic names.
Definition: cfl_nameset.h:69
bool Insert(const Idx &rIndex)
Add an element by index.
Vector template.
Generator with specified attribute types.
Set of indices with symbolic names and attributes.
Definition: cfl_nameset.h:566
Generator with controllability attributes.
virtual const Type * Cast(const Type *pOther) const
Type test.
A TokenReader reads sequential tokens from a file or string.
A TokenWriter writes sequential tokens to a file, a string or stdout.
Base class of all libFAUDES objects that participate in the run-time interface.
Definition: cfl_types.h:239
Base class of all FAUDES generators.
TaNameSet< AttributeCFlags > Alphabet
Convenience typedef for event sets with controllability attributes.
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
TBaseVector< System > SystemVector
Convenience typedef for vectors of systems.
TcGenerator< AttributeVoid, AttributeVoid, AttributeCFlags, AttributeVoid > System
Convenience typedef for std System.
libFAUDES resides within the namespace faudes.
uint32_t Idx
Type definition for index type (allways 32bit)
TBaseVector< Alphabet > AlphaberVector
Convenience typedef.
TcGenerator< AttributeVoid, AttributeVoid, AttributeCFlags, AttributeVoid > cGenerator
Compatibility: pre 2.20b used cGenerator as C++ class name.
unsigned long int fType
Convenience typdef flag data.
TBaseVector< cGenerator > cGeneratorVector
TaNameSet< AttributeCFlags > cEventSet
Compatibility: pre 2.20b used cEventSet as C++ class name.
TBaseVector< cEventSet > cEventSetVector

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