cfl_basevector.h
Go to the documentation of this file.
1 /** @file cfl_basevector.h @brief Class TBaseVector */
2 
3 
4 /* FAU Discrete Event Systems Library (libfaudes)
5 
6  Copyright (C) 2009 Thomas Moor
7 
8  This library is free software; you can redistribute it and/or
9  modify it under the terms of the GNU Lesser General Public
10  License as published by the Free Software Foundation; either
11  version 2.1 of the License, or (at your option) any later version.
12 
13  This library is distributed in the hope that it will be useful,
14  but WITHOUT ANY WARRANTY; without even the implied warranty of
15  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
16  Lesser General Public License for more details.
17 
18  You should have received a copy of the GNU Lesser General Public
19  License along with this library; if not, write to the Free Software
20  Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
21 */
22 
23 
24 
25 #ifndef FAUDES_BASEVECTOR_H
26 #define FAUDES_BASEVECTOR_H
27 
28 #include "cfl_definitions.h"
29 #include "cfl_tokenwriter.h"
30 #include "cfl_tokenreader.h"
31 #include "cfl_types.h"
32 #include "cfl_attributes.h"
33 #include <vector>
34 #include <algorithm>
35 
36 // fix mingw toochain
37 #ifdef THIS
38 #undef THIS
39 #endif
40 
41 namespace faudes {
42 
43 /** @addtogroup ContainerClasses */
44 /** @{*/
45 
46 /**
47  * Vector bass class.
48  *
49  * This class is designed as a random access container for a small number of
50  * comperatively large objects, eg a vector of generators to model a decentralized DES.
51  * The API is restricted to simple positional access and there are no explicit
52  * iterators nor is there a deferred copy mechanism. As with other faudes containers,
53  * vBaseVector is the universal base class for all faudes vector data types. The latter
54  * explicitely refer to the element data type and are implemented as templates.
55  *
56  * Internally, the vBaseVector template uses STL vector of pointers to the individual entries.
57  * When adding an entry, you may either do so be refernce or by pointer. When setting
58  * by reference, the vector takes a copy and owns the new entry. When setting by a pointer,
59  * the vector only records the reference. The vector tracks ownership of each entry in order
60  * to properly destruct entries.
61  *
62  * vBaseVector serves as a base class for all libFaudes vectors:
63  * - GeneratorVector (vector or generators)
64  * - EventSetVector (vector of event sets)
65  *
66  * Token io assumes that the type parameter is a faudes type, ie. entries of the vector
67  * provide token io themselfs. To derive a vector class with non-faudes-type entries,
68  * you will need to reimplement token io. As a convenience feature, the vector keeps a record
69  * of filenames associated with individual entries. You can inspect and edit this record via
70  * the FilenameAt members. When writing the vector to a file and all entries have an associated filename,
71  * output will be to the individual files.
72  *
73  */
74 
75 class FAUDES_TAPI vBaseVector : public Type {
76 
78 
79 public:
80 
81  using Type::operator=;
82  using Type::operator==;
83  using Type::operator!=;
84 
85  /**
86  * Constructor.
87  */
88  vBaseVector(void);
89 
90  /**
91  * Copy-constructor.
92  *
93  * @param rOtherVector
94  * Source to copy from
95  */
96  vBaseVector(const vBaseVector& rOtherVector);
97 
98  /**
99  * Constructor from file.
100  *
101  * @param rFilename
102  * Name of File
103  * @param rLabel
104  * Section for the set in the file;
105  */
106  vBaseVector(const std::string& rFilename, const std::string& rLabel = "BaseVector");
107 
108  /**
109  * Virtual destructor
110  */
111  virtual ~vBaseVector(void);
112 
113  /**
114  * Prototype for vector entries.
115  * The virtual base vBaseVector will provide a plain Type object.
116  * Derived vector classes are meant to reimplement this function.
117  *
118  * @return
119  * Element protoype
120  */
121  virtual const Type* Elementp(void) const;
122 
123 
124  /**
125  * Prototype for vector entries.
126  * This is a convenience wrapper for Elementp.
127  *
128  * @return
129  * Element protoype
130  */
131  virtual const Type& Element(void) const;
132 
133 
134  /**
135  * Factory method for vector entries.
136  * This is a convenience wrapper using Elementp.
137  *
138  * @return
139  * New element allocated on heap
140  */
141  virtual Type* NewElement(void);
142 
143  /**
144  * Test whether the specified element is acceptebla for this vector.
145  * This is a convenience wrapper for Elementp.
146  *
147  * @param rElement
148  * Element to type check.
149  * @return
150  * True, if provided element is accepted by this vector.
151  */
152  virtual bool ElementTry(const Type& rElement) const;
153 
154 
155  /**
156  * Return name of vBaseVector
157  *
158  * @return
159  * Name of vBaseVector
160  */
161  const std::string& Name(void) const;
162 
163  /**
164  * Set name of vBaseVector
165  *
166  * @param rName
167  * Name to set
168  */
169  void Name(const std::string& rName);
170 
171  /**
172  * Clear all vector
173  */
174  virtual void Clear(void);
175 
176  /**
177  * Get size of vector.
178  *
179  * @return
180  * Number of entries.
181  */
182  Idx Size(void) const;
183 
184  /**
185  * Set size of vector.
186  * If the new size is smaller than the current size,
187  * the vector is truncated. If it is larger, default members
188  * are inserted at the end.
189  *
190  * @param len
191  * Number of entries in vector
192  */
193  void Size(Idx len);
194 
195  /**
196  * Check if the vBaseVector ist Empty
197  *
198  * @return
199  * True if empty
200  */
201  bool Empty(void) const;
202 
203  /**
204  * convenience typedef for positions (must be unsigned)
205  */
206  typedef size_t Position;
207 
208  /**
209  * Access element.
210  *
211  * @param pos
212  * Specify entry to access
213  * @exception Exception
214  * - Position out of range (id 69)
215  */
216  virtual const Type& At(const Position& pos) const;
217 
218  /**
219  * Access element.
220  *
221  * @param pos
222  * Specify entry to access
223  * @exception Exception
224  * - Position out of range (id 69)
225  */
226  virtual Type& At(const Position& pos);
227 
228 
229  /**
230  * Replace specified entry.
231  * This method takes a copy of the entry to replace and the
232  * vector becomes the owner of the copy.
233  *
234  * @param pos
235  * Position to replace
236  * @param rElem
237  * New entry
238  * @exception Exception
239  * - Position out of range (id 69)
240  * - Cannot cast element type (63)
241  */
242  virtual void Replace(const Position& pos, const Type& rElem);
243 
244  /**
245  * Replace specified entry.
246  * This method avoids to copy the entry to replace and only records the reference.
247  * The vector does not take ownership of the new entry. I.e., when the vector is destroyed, or the
248  * entry is deleted from the vector, the entry itself remains allocated.
249  *
250  * @param pos
251  * Position to replace
252  * @param pElem
253  * New entry
254  * @exception Exception
255  * - Position out of range (id 69)
256  * - Cannot cast element type (63)
257  */
258  virtual void Replace(const Position& pos, Type* pElem);
259 
260  /**
261  * Replace specified entry.
262  * This method reads the sepcified entry from file and the
263  * vector becomes the owner of the new entry.
264  *
265  * @param pos
266  * Position to replace
267  * @param rFileName
268  * New entry to be read from file
269  * @exception Exception
270  * - Position out of range (id 69)
271  */
272  virtual void Replace(const Position& pos, const std::string& rFileName);
273 
274 
275  /**
276  * Erase entry by position.
277  * If the vector owns the entry, it will be destructed.
278  *
279  * @param pos
280  * Specify entry to erase
281  * @exception Exception
282  * - Position out of range (id 69)
283  */
284  virtual void Erase(const Position& pos);
285 
286  /**
287  * Insert specified entry.
288  * This method takes a copy of the entry to replace and the
289  * vector becomes the owner of the copy.
290  *
291  * @param pos
292  * Position at which to insert
293  * @param rElem
294  * Element to insert
295  * @exception Exception
296  * - Position out of range (id 69)
297  * - Cannot cast element type (63)
298  */
299  virtual void Insert(const Position& pos, const Type& rElem);
300 
301  /**
302  * Insert specified entry.
303  * This method avoids to copy the entry to replace and only records the reference.
304  * The vector does not take ownership of the new entry. I.e., when the vector is destroyed, or the
305  * entry is deleted from the vector, the entry itself remains allocated.
306  *
307  *
308  * @param pos
309  * Position at which to insert
310  * @param rElem
311  * Element to insert
312  * @exception Exception
313  * - Position out of range (id 69)
314  * - Cannot cast element type (63)
315  */
316  virtual void Insert(const Position& pos, Type* rElem);
317 
318  /**
319  * Insert specified entry.
320  * This method reads the sepcified entry from file and the
321  * vector becomes the owner of the new entry.
322  *
323  * @param pos
324  * Position at which to insert
325  * @param rFileName
326  * Element to insert
327  * @exception Exception
328  * - Position out of range (id 69)
329  */
330  virtual void Insert(const Position& pos, const std::string& rFileName);
331 
332  /**
333  * Append specified entry.
334  * This method takes a copy of the entry to replace and the
335  * vector becomes the owner of the copy.
336  *
337  * @param rElem
338  * Element to append
339  * @exception Exception
340  * - Cannot cast element type (63)
341  */
342  virtual void PushBack(const Type& rElem);
343 
344  /**
345  * Append specified entry.
346  * This method avoids to copy the entry to replace and only records the reference.
347  * The vector does not take ownership of the new entry. I.e., when the vector is destroyed, or the
348  * entry is deleted from the vector, the entry itself remains allocated.
349  *
350  *
351  * @param rElem
352  * Element to insert
353  * @exception Exception
354  * - Cannot cast element type (63)
355  */
356  virtual void PushBack(Type* rElem);
357 
358  /**
359  * Append specified entry.
360  * This method reads the sepcified entry from file and the
361  * vector becomes the owner of the new entry.
362  *
363  * @param rFileName
364  * Element to insert
365  */
366  virtual void PushBack(const std::string& rFileName);
367 
368  /**
369  * Append specified entry.
370  * Synonymous for PushBack.
371  * This method takes a copy of the entry to replace and the
372  * vector becomes the owner of the copy.
373  *
374  * @param rElem
375  * Element to append
376  * @exception Exception
377  * - Cannot cast element type (63)
378  */
379  virtual void Append(const Type& rElem);
380 
381  /**
382  * Append specified entry.
383  * Synonymous for PushBack.
384  * This method avoids to copy the entry to replace and only records the reference.
385  * The vector does not take ownership of the new entry. I.e., when the vector is destroyed, or the
386  * entry is deleted from the vector, the entry itself remains allocated.
387  *
388  *
389  * @param rElem
390  * Element to insert
391  * @exception Exception
392  * - Cannot cast element type (63)
393  */
394  virtual void Append(Type* rElem);
395 
396  /**
397  * Append specified entry.
398  * Synonymous for PushBack.
399  * This method reads the sepcified entry from file and the
400  * vector becomes the owner of the new entry.
401  *
402  * @param rFileName
403  * Element to insert
404  */
405  virtual void Append(const std::string& rFileName);
406 
407  /**
408  * Specify a filename.
409  * When each entry has a filenam specified,
410  * file io of the vector will be to indivudual files.
411  *
412  * @param pos
413  * Position of entry
414  * @param rFileName
415  * Filename relative to vector file
416  * @exception Exception
417  * - Position out of range (id 69)
418  */
419  void FilenameAt(const Position& pos, const std::string& rFileName);
420 
421  /**
422  * Get filename of entry.
423  *
424  * @param pos
425  * Position of entry
426  * @return
427  * Filename assoiated with entry
428  * @exception Exception
429  * - Position out of range (id 69)
430  */
431  const std::string& FilenameAt(const Position& pos) const;
432 
433  /**
434  * Take ownership of all entries.
435  * Thsi method will take ownership of all entries, including those, that
436  * have been set by pointer reference. When the vector is destructed, all
437  * entries will be destructed, too. However, write access may invalidate
438  * element pointers.
439  *
440  */
441  void TakeOwnership(void);
442 
443  /**
444  * Take local copies of all entries.
445  * This method will construct local copies of all entries not previously
446  * owned.
447  */
448  void TakeCopies(void);
449 
450 protected:
451 
452 
453  /**
454  * Token output, debugging see Type::DWrite for public wrappers.
455  * The method assumes that the type parameter is a faudes type and uses
456  * the provide write method per entry. Reimplement this function in derived
457  * classes for non-faudes type vectors.
458  * @param rTw
459  * Reference to TokenWriter
460  * @param rLabel
461  * Label of section to write, defaults to name of set
462  * @param pContext
463  * Write context to provide contextual information
464  */
465  virtual void DoDWrite(TokenWriter& rTw,const std::string& rLabel="", const Type* pContext=0) const;
466 
467  /**
468  * Token output, see Type::SWrite for public wrappers.
469  * The method assumes that the type parameter is a faudes type and uses
470  * the provide write method per entry. Reimplement this function in derived
471  * classes for non-faudes type vectors.
472  *
473  * @param rTw
474  * Reference to TokenWriter
475  *
476  * @exception Exception
477  * - IO errors (id 2)
478  */
479  virtual void DoSWrite(TokenWriter& rTw) const;
480 
481  /**
482  * Token output, see Type::Write for public wrappers.
483  * The method assumes that the type parameter is a faudes type and uses
484  * the provide write method per entry. Reimplement this function in derived
485  * classes for non-faudes type vectors.
486  *
487  * @param rTw
488  * Reference to TokenWriter
489  * @param rLabel
490  * Label of section to write, defaults to name of set
491  * @param pContext
492  * Write context to provide contextual information
493  */
494  virtual void DoWrite(TokenWriter& rTw, const std::string& rLabel="", const Type* pContext=0) const;
495 
496  /**
497  * Token input, see Type::Read for public wrappers.
498  * The method assumes that the type parameter is a faudes type and uses
499  * the provide read method per entry. Reimplement this function in derived
500  * classes for non-faudes type vectors.
501  * By convention, the default label "" should be translated to some meaningful default,
502  * eg "GeneratorVector" for a vector of generators. The pContext pointer can be type-checked
503  * and interpreted, ie as a symboltable to provide symbolic names. It is also
504  * passed on to vector entries.
505  *
506  * @param rTr
507  * Reference to TokenReader
508  * @param rLabel
509  * Label of section to read, defaults to name of set
510  * @param pContext
511  * Read context to provide contextual information
512  */
513  virtual void DoRead(TokenReader& rTr, const std::string& rLabel = "", const Type* pContext=0);
514 
515  /** Assignment method */
516  void DoAssign(const vBaseVector& rSourceVector);
517 
518  /** Internal entry data type */
520  public:
522  std::string mFileName;
523  bool mMine;
524  };
525 
526  /** STL vector of element */
527  std::vector<ElementRecord> mVector;
528 
529  /** convenience typedef */
530  typedef std::vector<ElementRecord>::iterator iterator;
531 
532 private:
533 
534  /** Name of TBaseVector */
535  std::string mMyName;
536 
537 };
538 
539 
540 /** @} doxygen group */
541 
542 
543 /** @addtogroup ContainerClasses */
544 /** @{*/
545 
546 /**
547  * Vector template.
548  *
549  * The vector templates specializes the bass vBaseVector in that it uses the template
550  * paremeter to specify the type of its entries. See vBaseVector for element access
551  * methods.
552  *
553  * TVectorSet serves is used to implement the libFaudes vectors
554  * - GeneratorVector (vector or generators)
555  * - SytemVector (vector or generators)
556  * - EventSetVector (vector of event sets)
557  * - AlphabetVector (vector of event sets)
558  *
559  *
560  */
561 
562 template<class T>
564 
566 
567 public:
568 
569  using vBaseVector::operator=;
570  using vBaseVector::operator==;
571  using vBaseVector::operator!=;
572 
573  /**
574  * Constructor.
575  */
576  TBaseVector(void);
577 
578  /**
579  * Copy-constructor.
580  *
581  * @param rOtherSet
582  * Source to copy from
583  */
584  TBaseVector(const TBaseVector& rOtherSet);
585 
586  /**
587  * Copy-constructor. This version takes any vector as source,
588  * but throughs an exception, if element types dont match.
589  *
590  * @param rOtherSet
591  * Source to copy from
592  * @exception Exception
593  * - Cannot cast elements (63)
594  */
595  TBaseVector(const vBaseVector& rOtherSet);
596 
597  /**
598  * Constructor from file.
599  *
600  * @param rFilename
601  * Name of File
602  * @param rLabel
603  * Section for the set in the file;
604  */
605  TBaseVector(const std::string& rFilename, const std::string& rLabel = "BaseVector");
606 
607  /**
608  * Virtual destructor
609  */
610  virtual ~TBaseVector(void);
611 
612 
613  /**
614  * Prototype for vector entries.
615  * This template class uses the virtual function to know its element type.
616  *
617  * @return
618  * Element protoype
619  */
620  virtual const T* Elementp(void) const;
621 
622  /**
623  * Test whether the specified element is acceptebla for this vector.
624  * This is a convenience wrapper for Elementp.
625  *
626  * @param rElement
627  * Element to type check.
628  * @return
629  * True, if provided element is accepted by this vector.
630  */
631  virtual bool ElementTry(const Type& rElement) const;
632 
633  /**
634  * convenience typedef for positions
635  */
636  typedef std::vector<int>::size_type Position;
637 
638  /**
639  * Access element.
640  *
641  * @param pos
642  * Specify entry to access
643  * @exception Exception
644  * - Position out of range (id 69)
645  */
646  virtual const T& At(const Position& pos) const;
647 
648  /**
649  * Access element.
650  *
651  * @param pos
652  * Specify entry to access
653  * @exception Exception
654  * - Position out of range (id 69)
655  */
656  virtual T& At(const Position& pos);
657 
658 protected:
659 
660  /** Assignment method */
661  void DoAssign(const TBaseVector<T>& rSourceVector);
662 
663 
664 };
665 
666 
667 /** @} doxygen group */
668 
669 
670 
671 /*
672 ******************************************************************************************
673 ******************************************************************************************
674 ******************************************************************************************
675 
676 Implementation of TBaseVector
677 
678 ******************************************************************************************
679 ******************************************************************************************
680 ******************************************************************************************
681 */
682 
683 /* convenience access to relevant scopes */
684 #define THIS TBaseVector<T>
685 #define TEMP template<class T>
686 #define BASE vBaseVector
687 
688 
689 // faudes type std
690 FAUDES_TYPE_TIMPLEMENTATION(Void,THIS,vBaseVector,TEMP)
691 
692 // TBaseVector()
694  vBaseVector()
695 {
696  FD_DC("TBaseVector(" << this << ")::TBaseVector()");
697 }
698 
699 
700 // TBaseVector(filename)
701 TEMP THIS::TBaseVector(const std::string& rFileName, const std::string& rLabel) :
702  vBaseVector()
703 {
704  FD_DC("TBaseVector(" << this << ")::TBaseVector()");
705  // do read;
706  Read(rFileName,rLabel);
707 }
708 
709 
710 // TBaseVector(rOtherSet)
711 TEMP THIS::TBaseVector(const TBaseVector& rOtherVector) :
712  vBaseVector()
713 {
714  FD_DC("TBaseVector(" << this << ")::TBaseVector(rOtherVector " << &rOtherVector << "): copy construct");
715  DoAssign(rOtherVector);
716 }
717 
718 // TBaseVector(rOtherSet)
719 TEMP THIS::TBaseVector(const vBaseVector& rOtherVector) :
720  vBaseVector()
721 {
722  FD_DC("TBaseVector(" << this << ")::TBaseVector([v] rOtherVector " << &rOtherVector << "): copy construct");
723  Assign(rOtherVector);
724 }
725 
726 // destructor
727 TEMP THIS::~TBaseVector(void) {
728  FD_DC("TBaseVector(" << this << ")::~TBaseVector()");
729 }
730 
731 
732 // element prototype
733 TEMP const T* THIS::Elementp(void) const {
734  static T tproto;
735  return &tproto;
736 }
737 
738 // test element type
739 TEMP bool THIS::ElementTry(const Type& rElement) const {
740  FD_DC("TBaseVector::ElementTry(): casting from " << typeid(rElement).name() << " to " << typeid(*Elementp()).name());
741  return Elementp()->Cast(&rElement)!=NULL;
742 }
743 
744 
745 // assignment
746 TEMP void THIS::DoAssign(const THIS& rSourceVector) {
747  FD_DC("TBaseVector(" << this << ")::DoAssign(rOtherVector " << &rSourceVector << ")");
748  // base can do it
749  BASE::DoAssign(rSourceVector);
750  // done
751  FD_DC("TBaseVector(" << this << ")::DoAssign(rOtherVector " << &rSourceVector << "): done");
752 }
753 
754 // At()
755 TEMP const T& THIS::At(const Position& pos) const {
756 #ifdef FAUDES_CHECKED
757  if(pos >= mVector.size()) {
758  std::stringstream errstr;
759  errstr << "index out of range" << std::endl;
760  throw Exception("TBaseVector::At", errstr.str(), 62);
761  }
762 #endif
763 #ifdef FAUDES_DEBUG_CODE
764  if(!dynamic_cast<T*>(mVector[pos].pElement)){
765  std::stringstream errstr;
766  errstr << "internal type error" << std::endl;
767  throw Exception("TBaseVector::At", errstr.str(), 63);
768  }
769 #endif
770  return *dynamic_cast<T*>(mVector[pos].pElement);
771 }
772 
773 // At()
774 TEMP T& THIS::At(const Position& pos) {
775 #ifdef FAUDES_CHECKED
776  if(pos >= mVector.size()) {
777  std::stringstream errstr;
778  errstr << "index out of range" << std::endl;
779  throw Exception("TBaseVector::At", errstr.str(), 62);
780  }
781 #endif
782 #ifdef FAUDES_DEBUG_CODE
783  if(!dynamic_cast<T*>(mVector[pos].pElement)){
784  std::stringstream errstr;
785  errstr << "internal type error" << std::endl;
786  throw Exception("TBaseVector::At", errstr.str(), 63);
787  }
788 #endif
789  return *dynamic_cast<T*>(mVector[pos].pElement);
790 }
791 
792 
793 
794 
795 
796 /* undefine local shortcuts */
797 #undef THIS
798 #undef TEMP
799 #undef BASE
800 
801 
802 } // namespace faudes
803 
804 #endif
Classes AttributeVoid and AttributeFlags
#define TEMP
#define THIS
Compiletime options.
#define FD_DC(message)
Debug: optional report on container operations.
#define FAUDES_TAPI
Definition: cfl_platform.h:83
Class TokenReader.
Class TokenWriter.
Runtime interface, faudes types.
#define FAUDES_TYPE_TDECLARATION(ftype, ctype, cbase)
faudes type declaration macro, template version
Definition: cfl_types.h:878
#define FAUDES_TYPE_DECLARATION(ftype, ctype, cbase)
faudes type declaration macro
Definition: cfl_types.h:867
#define FAUDES_TYPE_TIMPLEMENTATION(ftype, ctype, cbase, ctemp)
faudes type implementation macros, overall
Definition: cfl_types.h:972
Faudes exception class.
Vector template.
std::vector< int >::size_type Position
convenience typedef for positions
TBaseVector(const std::string &rFilename, const std::string &rLabel="BaseVector")
Constructor from file.
virtual const T * Elementp(void) const
Prototype for vector entries.
virtual bool ElementTry(const Type &rElement) const
Test whether the specified element is acceptebla for this vector.
virtual const T & At(const Position &pos) const
Access element.
virtual ~TBaseVector(void)
Virtual destructor.
TBaseVector(const vBaseVector &rOtherSet)
Copy-constructor.
TBaseVector(void)
Constructor.
TBaseVector(const TBaseVector &rOtherSet)
Copy-constructor.
void DoAssign(const TBaseVector< T > &rSourceVector)
Assignment method
virtual T & At(const Position &pos)
Access element.
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
void Read(const std::string &rFileName, const std::string &rLabel="", const Type *pContext=0)
Read configuration data from file with label specified.
Definition: cfl_types.cpp:261
virtual Type & Assign(const Type &rSrc)
Assign configuration data from other object.
Definition: cfl_types.cpp:77
Internal entry data type.
Vector bass class.
size_t Position
convenience typedef for positions (must be unsigned)
std::string mMyName
Name of TBaseVector.
std::vector< ElementRecord >::iterator iterator
convenience typedef
std::vector< ElementRecord > mVector
STL vector of element.
libFAUDES resides within the namespace faudes.
uint32_t Idx
Type definition for index type (allways 32bit)

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