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