|
|
Go to the documentation of this file.
25#ifndef FAUDES_TRANSSET_H
26#define FAUDES_TRANSSET_H
74 X1(x1), Ev(ev), X2(x2) {}
77 inline bool operator < ( const Transition& othertrans) const {
78 if (X1 < othertrans. X1) return true;
79 if (X1 > othertrans. X1) return false;
80 if (Ev < othertrans. Ev) return true;
81 if (Ev > othertrans. Ev) return false;
82 if (X2 < othertrans. X2) return true;
87 inline bool operator == ( const Transition& othertrans) const {
88 return ((X1 == othertrans. X1) && (Ev == othertrans. Ev) && (X2 == othertrans. X2));
92 inline bool operator != ( const Transition& othertrans) const {
93 return ((X1 != othertrans. X1) || (Ev != othertrans. Ev) || (X2 != othertrans. X2));
98 return (X1!=0) && (Ev!=0) && (X2!=0);
111 std::string Str( void) const {
130 if (left. Ev < right. Ev) return true;
131 if (left. Ev > right. Ev) return false;
132 if (left. X1 < right. X1) return true;
133 if (left. X1 > right. X1) return false;
134 if (left. X2 < right. X2) return true;
142 if (left. Ev < right. Ev) return true;
143 if (left. Ev > right. Ev) return false;
144 if (left. X2 < right. X2) return true;
145 if (left. X2 > right. X2) return false;
146 if (left. X1 < right. X1) return true;
154 if (left. X2 < right. X2) return true;
155 if (left. X2 > right. X2) return false;
156 if (left. Ev < right. Ev) return true;
157 if (left. Ev > right. Ev) return false;
158 if (left. X1 < right. X1) return true;
166 if (left. X2 < right. X2) return true;
167 if (left. X2 > right. X2) return false;
168 if (left. X1 < right. X1) return true;
169 if (left. X1 > right. X1) return false;
170 if (left. Ev < right. Ev) return true;
178 if (left. X1 < right. X1) return true;
179 if (left. X1 > right. X1) return false;
180 if (left. X2 < right. X2) return true;
181 if (left. X2 > right. X2) return false;
182 if (left. Ev < right. Ev) return true;
190 if (left. X1 < right. X1) return true;
191 if (left. X1 > right. X1) return false;
192 if (left. Ev < right. Ev) return true;
193 if (left. Ev > right. Ev) return false;
194 if (left. X2 < right. X2) return true;
241template < class Cmp=TransSort::X1EvX2>
268 template< class OtherCmp>
832 template< class OtherCmp>
982 virtual std::string Str( void) const;
1062template < class Attr>
1069 using TransSet::operator=;
1070 using TransSet::operator==;
1071 using TransSet::operator!=;
1162 bool Insert( const Transition& rTransition, const Attr& rAttr);
1174 virtual void InsertSet( const TransSet& rOtherSet);
1221 virtual void EraseSet( const TransSet& rOtherSet);
1246 void RestrictSet( const TransSet& rOtherSet);
1328#define THIS TTransSet<Cmp>
1329#define TEMP template<class Cmp>
1330#define BASE TBaseSet<Transition,Cmp>
1338 FD_DC( "TTransSet(" << this << ")::TTransSet()");
1346 FD_DC( "TTransSet(" << this << ")::TTransSet(rOtherSet "<< &rOtherSet << ")");
1351TEMP template< class OtherCmp>
1355 FD_DC( "TTransSet(" << this << ")::TTransSet(rOtherSet/ReSort "<< &rOtherSet << ")");
1361 FD_DC( "TTransSet(" << this << ")::DoCopy(..)");
1363 BASE::DoCopy(rSourceSet);
1368 FD_DC( "TTransSet(" << this << ")::DoMove(..): not implemented");
1370 BASE::DoMove(rSourceSet);
1374TEMP typename THIS::Iterator THIS::Begin( void) const {
1375 return BASE::Begin();
1379TEMP typename THIS::Iterator THIS::End( void) const {
1385#define SORT_EXCEPTION { std::stringstream errstr; \
1386 errstr << "Transition set order mismatch " << std::endl; \
1387 throw Exception("TransSet::Iterator()", errstr.str(), 68); }
1391TEMP typename THIS::Iterator THIS::Begin( Idx x1) const {
1392#ifdef FAUDES_CHECKED
1398 return THIS::ThisIterator(BASE::pSet->lower_bound(tlx));
1402TEMP typename THIS::Iterator THIS::End( Idx x1) const {
1403#ifdef FAUDES_CHECKED
1409 return THIS::ThisIterator(BASE::pSet->lower_bound(tlx));
1414#ifdef FAUDES_CHECKED
1419 return THIS::ThisIterator(BASE::pSet->lower_bound(tlx));
1424#ifdef FAUDES_CHECKED
1429 return THIS::ThisIterator(BASE::pSet->lower_bound(tlx));
1433TEMP typename THIS::Iterator THIS::BeginByEv( Idx ev) const {
1434#ifdef FAUDES_CHECKED
1440 return THIS::ThisIterator(BASE::pSet->lower_bound(tlx));
1444TEMP typename THIS::Iterator THIS::EndByEv( Idx ev) const {
1445#ifdef FAUDES_CHECKED
1451 return THIS::ThisIterator(BASE::pSet->lower_bound(tlx));
1455TEMP typename THIS::Iterator THIS::BeginByEvX1( Idx ev, Idx x1) const {
1456#ifdef FAUDES_CHECKED
1461 return THIS::ThisIterator(BASE::pSet->lower_bound(tlx));
1465TEMP typename THIS::Iterator THIS::EndByEvX1( Idx ev, Idx x1) const {
1466#ifdef FAUDES_CHECKED
1471 return THIS::ThisIterator(BASE::pSet->lower_bound(tlx));
1475TEMP typename THIS::Iterator THIS::BeginByEvX2( Idx ev, Idx x2) const {
1476#ifdef FAUDES_CHECKED
1481 return THIS::ThisIterator(BASE::pSet->lower_bound(tlx));
1485TEMP typename THIS::Iterator THIS::EndByEvX2( Idx ev, Idx x2) const {
1486#ifdef FAUDES_CHECKED
1491 return THIS::ThisIterator(BASE::pSet->lower_bound(tlx));
1495TEMP typename THIS::Iterator THIS::BeginByX2( Idx x2) const {
1496#ifdef FAUDES_CHECKED
1502 return THIS::ThisIterator(BASE::pSet->lower_bound(tlx));
1506TEMP typename THIS::Iterator THIS::EndByX2( Idx x2) const {
1507#ifdef FAUDES_CHECKED
1513 return THIS::ThisIterator(BASE::pSet->lower_bound(tlx));
1517TEMP typename THIS::Iterator THIS::BeginByX2Ev( Idx x2, Idx ev) const {
1518#ifdef FAUDES_CHECKED
1523 return THIS::ThisIterator(BASE::pSet->lower_bound(tlx));
1527TEMP typename THIS::Iterator THIS::EndByX2Ev( Idx x2, Idx ev) const {
1528#ifdef FAUDES_CHECKED
1533 return THIS::ThisIterator(BASE::pSet->lower_bound(tlx));
1563 std::string label=rLabel;
1564 if(label== "") label=BASE::Name();
1566 int oldcolumns = rTw. Columns();
1570 for (tit = Begin(); tit != End(); ++tit) {
1571 rTw << tit->X1; rTw << tit->Ev; rTw << tit->X2;
1581 return BASE::Insert(t);
1586 FD_DC( "TTransSet(" << this << ")::Insert(" << x1 << "-" << ev << "-" << x2 << ")");
1592 return BASE::Inject(pos,t);
1603 FD_DC( "TTransSet(" << this << ")::Erase(" << t. Str() << " [t])");
1604 return BASE::Erase(t);
1609 FD_DC( "TTransSet(" << this << ")::Erase(" << x1 << "-" << ev << "-" << x2 << ")");
1615 FD_DC( "TTransSet(" << this << ")::Erase(" << this->EStr(*it) << " [it])");
1616 return BASE::Erase(it);
1621 FD_DC( "TTransSet(" << this << ")::EraseByX1(" << x1 << ")");
1622#ifdef FAUDES_CHECKED
1628 typename BASE::iterator lower, upper, it;
1631 lower = BASE::pSet->lower_bound(tl);
1632 upper = BASE::pSet->upper_bound(tu);
1633 if(this->AttributesSize()!=0)
1634 for(it=lower; it!=upper; ++it)
1635 BASE::ClrAttribute(*it);
1636 BASE::pSet->erase(lower, upper);
1641 FD_DC( "TTransSet(" << this << ")::EraseByX1Ev(" << x1 << "," << ev << ")");
1642#ifdef FAUDES_CHECKED
1647 typename BASE::iterator lower, upper, it;
1650 lower = BASE::pSet->lower_bound(tl);
1651 upper = BASE::pSet->upper_bound(tu);
1652 if(this->AttributesSize()!=0)
1653 for(it=lower; it!=upper; ++it)
1654 BASE::ClrAttribute(*it);
1655 BASE::pSet->erase(lower, upper);
1660 FD_DC( "TTransSet(" << this << ")::EraseByX2(" << x2 << ")");
1662 bool doattr = (this->AttributesSize()!=0);
1663 typename BASE::iterator it;
1664 for(it = BASE::pSet->begin(); it != BASE::pSet->end();) {
1666 if(doattr) BASE::ClrAttribute(*it);
1667 BASE::pSet->erase(it++);
1676 FD_DC( "TTransSet(" << this << ")::EraseByEv(" << ev << ")");
1678 bool doattr = (this->AttributesSize()!=0);
1679 typename BASE::iterator it;
1680 for(it = BASE::pSet->begin(); it != BASE::pSet->end();) {
1682 if(doattr) BASE::ClrAttribute(*it);
1683 BASE::pSet->erase(it++);
1693 FD_DC( "TTransSet(" << this << ")::EraseByX1OrX2(" << x << ")");
1695 bool doattr = (this->AttributesSize()!=0);
1696 typename BASE::iterator it;
1697 for(it = BASE::pSet->begin(); it != BASE::pSet->end();) {
1698 if ((it->X1 == x) || (it->X2 == x)) {
1699 if(doattr) BASE::ClrAttribute(*it);
1700 BASE::pSet->erase(it++);
1705 FD_DC( "TTransSet(" << this << ")::EraseByX1OrX2(" << x << "): done");
1711 FD_DC( "TTransSet(" << this << ")::EraseByX1OrX2(#" << rStates. Size() << ")");
1713 bool doattr = (this->AttributesSize()!=0);
1714 typename BASE::iterator it=BASE::pSet->begin();
1715 while(it != BASE::pSet->end()) {
1716 if(!rStates. Exists(it->X1) && !rStates. Exists(it->X2)) { ++it; continue;}
1717 if(doattr) BASE::ClrAttribute(*it);
1718 BASE::pSet->erase(it++);
1720 FD_DC( "TTransSet(" << this << ")::EraseByX1OrX2(): done");
1726 FD_DC( "TTransSet(" << this << ")::RestrictByX1AndX2(#" << rStates. Size() << ")");
1728 bool doattr = (this->AttributesSize()!=0);
1729 typename BASE::iterator it;
1730 it = BASE::pSet->begin();
1731 while(it != BASE::pSet->end()) {
1732 if(rStates. Exists(it->X1) && rStates. Exists(it->X2)) { ++it; continue;}
1733 if(doattr) BASE::ClrAttribute(*it);
1734 BASE::pSet->erase(it++);
1736 FD_DC( "TTransSet(" << this << ")::EraseByX1OrX2(): done");
1742 FD_DC( "TTransSet(" << this << ")::RestrictEvents(#" << rEvents. Size() << ")");
1744 bool doattr = (this->AttributesSize()!=0);
1745 typename BASE::iterator it;
1746 it = BASE::pSet->begin();
1747 while(it != BASE::pSet->end()) {
1748 if(rEvents. Exists(it->Ev)) { ++it; continue;}
1749 if(doattr) BASE::ClrAttribute(*it);
1750 BASE::pSet->erase(it++);
1752 FD_DC( "TTransSet(" << this << ")::RestrictEvents(): done");
1764 return BASE::Find(t);
1769 return BASE::Exists(t);
1779 typename BASE::iterator it;
1780 for(it = BASE::pSet->begin(); it != BASE::pSet->end(); ++it) {
1781 if ((it->X1 == x) || (it->X2 == x)) {
1790 FD_DC( "TTransSet(" << this << ")::ExistsByX1Ev(" << x1 << "," << ev << ")");
1791#ifdef FAUDES_CHECKED
1796 typename BASE::iterator lower, upper, it;
1799 lower = BASE::pSet->lower_bound(tl);
1800 upper = BASE::pSet->upper_bound(tu);
1801 return lower != upper;
1806 FD_DC( "TTransSet(" << this << ")::ExistsByX1(" << x1 << ")");
1807#ifdef FAUDES_CHECKED
1813 typename BASE::iterator lower, upper, it;
1816 lower = BASE::pSet->lower_bound(tl);
1817 upper = BASE::pSet->upper_bound(tu);
1818 return lower != upper;
1823TEMP template< class OtherCmp>
1827 for (it = Begin(); it != End(); ++it) {
1836 for (it=Begin(); it!=End(); ++it) {
1845#ifdef FAUDES_CHECKED
1853 while (it != it_end) {
1862#ifdef FAUDES_CHECKED
1868 StateSet::Iterator sit= rX1Set. Begin();
1869 StateSet::Iterator sit_end= rX1Set. End();
1870 for(;sit!=sit_end; ++sit) {
1873 while(tit!=tit_end) {
1883#ifdef FAUDES_CHECKED
1890 while (it != it_end) {
1899#ifdef FAUDES_CHECKED
1904 if(rEvSet. Empty()) return states;
1905 StateSet::Iterator sit= rX1Set. Begin();
1906 StateSet::Iterator sit_end= rX1Set. End();
1907 for(;sit!=sit_end; ++sit) {
1908 EventSet::Iterator eit= rEvSet. Begin();
1909 EventSet::Iterator eit_end= rEvSet. End();
1912 while(tit!=tit_end) {
1914 if(tit->Ev == *eit) {
1920 if(tit->Ev < *eit) {
1926 if(eit==eit_end) break;
1934#ifdef FAUDES_CHECKED
1942 while (it != it_end) {
1952#ifdef FAUDES_CHECKED
1958 StateSet::Iterator sit= rX2Set. Begin();
1959 StateSet::Iterator sit_end= rX2Set. End();
1960 for(;sit!=sit_end; ++sit) {
1963 while(tit!=tit_end) {
1973#ifdef FAUDES_CHECKED
1979 Iterator it_end = EndByX2Ev(x2, ev);
1980 while (it != it_end) {
1989#ifdef FAUDES_CHECKED
1994 if(rEvSet. Empty()) return states;
1995 StateSet::Iterator sit= rX2Set. Begin();
1996 StateSet::Iterator sit_end= rX2Set. End();
1997 for(;sit!=sit_end; ++sit) {
1998 EventSet::Iterator eit= rEvSet. Begin();
1999 EventSet::Iterator eit_end= rEvSet. End();
2000 Iterator tit = BeginByX2Ev(*sit,*eit);
2002 while(tit!=tit_end) {
2004 if(tit->Ev == *eit) {
2010 if(tit->Ev < *eit) {
2016 if(eit==eit_end) break;
2029 for (; it != it_end; ++it) {
2037 return rTrans. Str();
2041TEMP std::string THIS::Str( void) const {
2042 std::stringstream str;
2043 str << "[" << THIS::Name() << "]" << std::endl;
2046 if(THIS::Size()>0) while( true) {
2047 str << Str(*(eit++));
2048 if(eit==eit_end) break;
2070#define THIS TaTransSet<Attr>
2071#define TEMP template <class Attr>
2072#define BASE TTransSet<TransSort::X1EvX2>
2073#define ABASE TAttrMap<Transition,Attr,TransSort::X1EvX2>
2083 FD_DC( "TaTransSet(" << this << ")::TaTransSet()");
2091 FD_DC( "TaTransSet(" << this << ")::TaTransSet(rOtherSet "<< &rOtherSet << ")");
2101 FD_DC( "TaTransSet(" << this << ")::TaTransSet(rOtherSet "<< &rOtherSet << ")");
2109 BASE::DoCopy(rSourceSet);
2114 FD_WARN( "TaTransSet(" << this << ")::DoMove(" << &rSourceSet<< "): fallback to DoCopy");
2116 BASE::DoCopy(rSourceSet);
2121 FD_DC( "TaTransSet(" << this << ")::Copy([v] " << &rSourceSet<< ")");
2122#ifdef FAUDES_CHECKED
2123 FD_DC( "TaTransSet(" << this << ")::Copy(): src at " << &rSourceSet);
2124 FD_DC( "TaTransSet(" << this << ")::Copy(): src type " << typeid(rSourceSet).name());
2125 FD_DC( "TaTransSet(" << this << ")::Copy(): dst type " << typeid(*this).name());
2128 std::stringstream errstr;
2129 errstr << "cannot cast " << typeid(rSourceSet).name() << " to TransSet" << std::endl;
2130 throw Exception( "TaTransSet::Copy", errstr.str(), 67);
2134 ABASE::CopyWithAttributes(rSourceSet);
2142 FD_DC( "TaTransSet(" << this << ")::Insert(" << t. Str() << ")");
2143 return ABASE::Insert(t);
2148 FD_DC( "TaTransSet(" << this << ")::Insert(" << x1 << "-" << ev << "-" << x2 << ")");
2150 return ABASE::Insert(t);
2155 return ABASE::Insert(t,attr);
2161 FD_DC( "TaTransSet(" << this << ")::InsertSet( [a] " << &rOtherSet << ")");
2162 ABASE::InsertSet(rOtherSet);
2167#ifdef FAUDES_CHECKED
2168 FD_DC( "TaTransSet(" << this << ")::InsertSet(" << rOtherSet. ToString() << ")");
2171 std::stringstream errstr;
2172 errstr << "cannot cast " << typeid(rOtherSet).name() << " to TransSet" << std::endl;
2173 throw Exception( "TaTransSet::InsertSet", errstr.str(), 67);
2176 ABASE::InsertSet(rOtherSet);
2182 return ABASE::Erase(t);
2187 FD_DC( "TaTransSet(" << this << ")::Erase(" << x1 << "-" << ev << "-" << x2 << ")");
2189 return ABASE::Erase(t);
2194#ifdef FAUDES_CHECKED
2196 std::stringstream errstr;
2197 errstr << "iterator out of range " << std::endl;
2198 throw Exception( "TTransSet::Erase", errstr.str(), 69);
2201 return ABASE::Erase(it);
2206 FD_DC( "TaTransSet(" << this << ")::RestrictSet( [a] " << &rOtherSet << ")");
2207 ABASE::EraseSet(rOtherSet);
2212#ifdef FAUDES_CHECKED
2213 FD_DC( "TaTransSet(" << this << ")::EraseSet(" << rOtherSet. ToString() << ")");
2216 std::stringstream errstr;
2217 errstr << "cannot cast " << typeid(rOtherSet).name() << " to TransSet" << std::endl;
2218 throw Exception( "TaTransSet::EraseSet", errstr.str(), 67);
2221 ABASE::EraseSet(rOtherSet);
2226 FD_DC( "TaTransSet(" << this << ")::RestrictSet( [a] " << &rOtherSet << ")");
2227 ABASE::RestrictSet(rOtherSet);
2233#ifdef FAUDES_CHECKED
2234 FD_DC( "TaTransSet(" << this << ")::RestrictSet(" << rOtherSet. ToString() << ")");
2237 std::stringstream errstr;
2238 errstr << "cannot cast " << typeid(rOtherSet).name() << " to TransSet" << std::endl;
2239 throw Exception( "TaTransSet::RestrictSet", errstr.str(), 67);
2242 ABASE::RestrictSet(rOtherSet);
2252#undef SORT_EXECPTION
Classes IndexSet, TaIndexSet.
Classes NameSet, TaNameSet.
#define FAUDES_TYPE_DECLARATION(ftype, ctype, cbase)
#define FAUDES_TYPE_TIMPLEMENTATION(ftype, ctype, cbase, ctemp)
bool Exists(const Idx &rIndex) const
SymbolTable * SymbolTablep(void) const
bool Insert(const Idx &rIndex)
StateSet PredecessorStates(Idx x2) const
Iterator EndByEvX2(Idx ev, Idx x2) const
void DoMove(TTransSet &rSource)
Iterator Begin(void) const
bool ExistsByX1OrX2(Idx x) const
bool Insert(Idx x1, Idx ev, Idx x2)
Iterator Find(Idx x1, Idx ev, Idx x2) const
bool Erase(Idx x1, Idx ev, Idx x2)
Iterator Find(const Transition &t) const
Iterator BeginByX2Ev(Idx x2, Idx ev) const
TBaseSet< Transition, Cmp >::Iterator Iterator
Iterator Begin(Idx x1) const
virtual void DoWrite(TokenWriter &rTw, const std::string &rLabel="", const Type *pContext=0) const
EventSet ActiveEvents(Idx x1, SymbolTable *pSymTab=NULL) const
Iterator Begin(Idx x1, Idx ev) const
StateSet SuccessorStates(const StateSet &rX1Set) const
TTransSet(const TTransSet< Cmp > &rOtherSet)
virtual std::string Str(void) const
StateSet PredecessorStates(const StateSet &rX2Set) const
bool Exists(const Transition &t) const
Iterator BeginByEvX1(Idx ev, Idx x1) const
Iterator End(Idx x1, Idx ev) const
StateSet SuccessorStates(Idx x1, Idx ev) const
void RestrictStates(const StateSet &rStateSet)
Iterator EndByEv(Idx ev) const
Iterator EndByEvX1(Idx ev, Idx x1) const
Iterator EndByX2Ev(Idx x2, Idx ev) const
StateSet States(void) const
Iterator BeginByX2(Idx x2) const
TTransSet(const TTransSet< OtherCmp > &res)
void EraseByX1Ev(Idx x1, Idx ev)
Iterator BeginByEv(Idx ev) const
bool Insert(const Transition &rTransition)
Iterator EndByX2(Idx x2) const
bool ExistsByX1Ev(Idx x1, Idx ev) const
Iterator Inject(const Iterator &pos, const Transition &rTransition)
bool Exists(Idx x1, Idx ev, Idx x2) const
Iterator Erase(const Iterator &it)
void Inject(const Transition &rTransition)
bool Erase(const Transition &t)
StateSet SuccessorStates(Idx x1) const
void DoCopy(const TTransSet &rSource)
void EraseByX1OrX2(const StateSet &rStates)
void RestrictEvents(const EventSet &rEventSet)
void EraseByX1OrX2(Idx x)
StateSet PredecessorStates(Idx x2, Idx ev) const
Iterator End(Idx x1) const
StateSet SuccessorStates(const StateSet &rX1Set, const EventSet &rEvSet) const
virtual std::string Str(const Transition &rTrans) const
void ReSort(TTransSet< OtherCmp > &res) const
StateSet PredecessorStates(const StateSet &rX2Set, const EventSet &rEvSet) const
bool ExistsByX1(Idx x1) const
Iterator BeginByEvX2(Idx ev, Idx x2) const
virtual TaTransSet & Copy(const TBaseSet< Transition, TransSort::X1EvX2 > &rSrc)
TTransSet< TransSort::X1EvX2 >::Iterator Iterator
const Attr * AttributeType(void) const
void AttributeTry(const Transition &rElem, const Type &rAttr)
void Attribute(const Transition &rElem, const Attr &rAttr)
virtual TaTransSet & operator=(const TransSet &rSrc)
Attr * Attributep(const Transition &rElem)
const Attr & Attribute(const Transition &rElem) const
void Attribute(const Transition &rElem, const Type &rAttr)
void DoCopy(const TaTransSet &rSource)
void WriteEnd(const std::string &rLabel)
void WriteBegin(const std::string &rLabel)
Transition(Idx x1, Idx ev, Idx x2)
std::string Str(void) const
std::string ToString(const std::string &rLabel="", const Type *pContext=0) const
virtual Type & Copy(const Type &rSrc)
TTransSet< TransSort::EvX2X1 > TransSetEvX2X1
TTransSet< TransSort::X1EvX2 > TransSetX1EvX2
bool Exists(const T &rElem) const
TTransSet< TransSort::X1EvX2 > TransSet
TTransSet< TransSort::X2EvX1 > TransSetX2EvX1
TTransSet< TransSort::X1X2Ev > TransSetX1X2Ev
virtual void RestrictSet(const TBaseSet &rOtherSet)
virtual void InsertSet(const TBaseSet &rOtherSet)
Iterator Begin(void) const
TTransSet< TransSort::EvX1X2 > TransSetEvX1X2
TTransSet< TransSort::X2X1Ev > TransSetX2X1Ev
virtual void EraseSet(const TBaseSet &rOtherSet)
void ApplyRelabelMap(const RelabelMap &rMap, const vGenerator &rGen, vGenerator &rRes)
std::string ToStringInteger(Int number)
libFAUDES 2.34e
--- 2026.03.16
--- c++ api documentaion by doxygen
|