cfl_functions.cpp
Go to the documentation of this file.
1/** @file cfl_functions.cpp Runtime interface, operations on faudes types */
2
3 /* FAU Discrete Event Systems Library (libfaudes)
4
5 Copyright (C) 2009 Ruediger Berndt
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#include "cfl_functions.h"
24#include "cfl_registry.h"
25
26
27namespace faudes{
28
29/*
30********************************************************************
31********************************************************************
32********************************************************************
33
34Implementation of class Parameter
35
36********************************************************************
37********************************************************************
38********************************************************************
39*/
40
41// constructor, default
43 mName(""), mTDName(""), mAttr(Parameter::UnDef), mCReturn(false)
44{}
45
46// constructor, by member values
47 Parameter::Parameter(const std::string& rName, const std::string& rTypeName, ParamAttr attr, bool cret) :
48 mName(rName), mTDName(rTypeName), mAttr(attr), mCReturn(cret)
49{}
50
51// Desctructor
53
54// get name
55const std::string& Parameter::Name(void) const
56 { return mName;}
57
58// set name
59void Parameter::Name(const std::string& rName)
60 { mName=rName;}
61
62// get type
63const std::string& Parameter::Type(void) const
64 { return mTDName;}
65
66// set type
67void Parameter::Type(const std::string& rTypeName)
68 { mTDName=rTypeName;}
69
70// get attribute
72 { return mAttr; }
73
74// set attribute
76 { mAttr=rAttr;}
77
78// get c ret flag
79bool Parameter::CReturn(void) const
80 { return mCReturn; }
81
82// set c ret flag
83void Parameter::CReturn(bool cret)
84{ mCReturn=cret;}
85
86// set attribute
87void Parameter::Attribute(const std::string& rAttrStr) {
89 if(rAttrStr=="In") mAttr=Parameter::In;
90 if(rAttrStr=="Out") mAttr=Parameter::Out;
91 if(rAttrStr=="InOut") mAttr=Parameter::InOut;
92}
93
94// textual attribute
96 switch(attr){
97 case Parameter::In: return "In";
98 case Parameter::Out: return "Out";
99 case Parameter::InOut: return "InOut";
100 default: break;
101 }
102 return "UnDef";
103}
104
105// textual parameter
106std::string Parameter::Str(void) const {
107 std::string res = "+" + AStr(mAttr)+ "+ " + mTDName + " " + mName;
108 return res;
109}
110
111// set to "undefined"
113 mName = "";
114 mTDName = "";
116 mCReturn=false;
117}
118
119// test equality
120bool Parameter::operator==(const Parameter& rOther) const {
121 if(mName!=rOther.mName) return false;
122 if(mTDName!=rOther.mTDName) return false;
123 if(mAttr!=rOther.mAttr) return false;
124 if(mCReturn!=rOther.mCReturn) return false;
125 return true;
126}
127
128
129
130/*
131********************************************************************
132********************************************************************
133********************************************************************
134
135Implementation of class Signature
136
137********************************************************************
138********************************************************************
139********************************************************************
140*/
141
142
143// faudes type (cannot do autoregister)
149
150// constructor
152
153// copy constructor
155{
156 DoAssign(rSrc);
157}
158
159// std faudes type
161 // assign my members
162 mName=rSrc.mName;
164}
165
166// std faudes type
167bool Signature::DoEqual(const Signature& rOther) const {
168 // test my members
169 if(mName!=rOther.mName) return false;
170 if(mParameters!=rOther.mParameters) return false;
171 return true;
172}
173
174
175// clear signature
177 FD_DRTI("Signature::Clear()");
178 mName="";
179 mParameters.clear();
180}
181
182// get name
183const std::string& Signature::Name(void) const{
184 return mName;
185}
186
187// set name
188void Signature::Name(const std::string& rName){
189 mName = rName;
190}
191
192// get size
193int Signature::Size() const{
194 return mParameters.size();
195}
196
197// get parameter
198const Parameter& Signature::At(int n) const{
199 // check range
200 if((n < 0) || (n >= Size())){
201 std::stringstream err;
202 err << "Index out of range: " << n << std::endl;
203 throw Exception("Signature::At()", err.str(), 47);
204 }
205 // return const ref
206 return mParameters.at(n);
207}
208
209// set parameter
210void Signature::At(int n, const Parameter& rParam) {
211 // check range
212 if((n < 0) || (n >= Size())){
213 std::stringstream err;
214 err << "Index out of range: " << n << std::endl;
215 throw Exception("Signature::At()", err.str(), 47);
216 }
217 // set ref
218 mParameters[n]=rParam;
219}
220
221// append parameter
222void Signature::Append(const Parameter& rParam){
223 mParameters.push_back(rParam);
224}
225
226
227
228// token io
229void Signature::DoWrite(TokenWriter& rTw, const std::string& rLabel, const Type* pContext) const{
230 // ignore
231 (void) rLabel;
232 (void) pContext;
233 // write my tag
234 Token btag;
235 btag.SetBegin("Signature");
236 btag.InsAttribute("name",mName);
237 rTw << btag;
238 // parameter specs
239 for(int i=0; i<Size(); i++){
240 Token par;
241 par.SetEmpty("Parameter");
242 par.InsAttribute("name",mParameters.at(i).Name());
243 par.InsAttribute("ftype",mParameters.at(i).Type());
244 switch(mParameters.at(i).Attribute()){
245 case Parameter::In: par.InsAttribute("access","In"); break;
246 case Parameter::Out: par.InsAttribute("access","Out"); break;
247 case Parameter::InOut: par.InsAttribute("access","InOut"); break;
248 default: break;
249 }
250 if(mParameters.at(i).CReturn()) par.InsAttribute("creturn","true");
251 rTw << par ;
252 }
253 // end section
254 rTw.WriteEnd("Signature");
255}
256
257// token io
258void Signature::DoRead(TokenReader& rTr, const std::string& rLabel, const Type* pContext){
259 // ignore
260 (void) rLabel;
261 (void) pContext;
262 // read my section
263 FD_DRTI("Signature::DoRead(): file " << rTr.FileName());
264 Token token;
265 rTr.ReadBegin("Signature",token);
266
267 // detect and digest old pre 2.16b file format
268 // note: this section will eventually be removed
269 if(!token.ExistsAttributeString("name")) {
270 mName=rTr.ReadString();
271 FD_DRTI("Signature::DoRead(): found (pre 2.16b file)" << mName);
272 while(!rTr.Eos("Signature")) {
273 std::string pname=rTr.ReadString();
274 std::string ptype=rTr.ReadString();
276 bool cret=false;
277 Token token;
278 rTr.Peek(token);
279 while(token.Type()==Token::Option) {
280 rTr.Get(token);
281 if(token.StringValue()=="In") pattr= Parameter::In;
282 if(token.StringValue()=="Out") pattr= Parameter::Out;
283 if(token.StringValue()=="InOut") pattr= Parameter::InOut;
284 if(token.StringValue()=="OutIn") pattr= Parameter::InOut;
285 if(token.StringValue()=="CReturn") cret=true;
286 rTr.Peek(token);
287 }
288 Append(Parameter(pname,ptype,pattr,cret));
289 }
290 rTr.ReadEnd("Signature");
291 return;
292 } // end pre 2.16b file format
293
294 // extract name
295 mName=token.AttributeStringValue("name");
296 FD_DRTI("Signature::DoRead(): found " << mName);
297 // loop parameters
298 while(!rTr.Eos("Signature")) {
299 Token par;
300 rTr.ReadBegin("Parameter",par);
301 // parameter name
302 std::string pname=par.AttributeStringValue("name");
303 // parameter type
304 std::string ptype=par.AttributeStringValue("ftype");
305 // parameter access
307 if(par.ExistsAttributeString("access")){
308 std::string paccess = par.AttributeStringValue("access");
309 if(paccess=="In") pattr= Parameter::In;
310 if(paccess=="Out") pattr= Parameter::Out;
311 if(paccess=="InOut") pattr= Parameter::InOut;
312 if(paccess=="OutIn") pattr= Parameter::InOut;
313 }
314 // parameter cret
315 bool cret=false;
316 if(par.ExistsAttributeString("creturn")){
317 std::string pcret = par.AttributeStringValue("creturn");
318 if(pcret=="true") cret=true;
319 if(pcret=="True") cret=true;
320 if(pcret=="Yes") cret=true;
321 if(pcret=="yes") cret=true;
322 }
323 // insert
324 Append(Parameter(pname,ptype,pattr,cret));
325 rTr.ReadEnd("Parameter");
326 }
327 // done
328 rTr.ReadEnd("Signature");
329 FD_DRTI("Signature::DoRead(): done");
330}
331
332
333
334
335/*
336********************************************************************
337********************************************************************
338********************************************************************
339
340Implementation of class FunctionDefinition
341
342********************************************************************
343********************************************************************
344********************************************************************
345*/
346
347// faudes type (cannot do autoregister)
353
354
355// constructor
356FunctionDefinition::FunctionDefinition(const std::string& name) :
357 Documentation(),
358 mpFunction(NULL)
359{
360 Name(name);
361}
362
363// copy constructor
365 Documentation(),
366 mpFunction(NULL)
367{
368 DoAssign(rSrc);
369}
370
371// std faudes type
373 // assign base members
375 // assign my members
376 mVariants=rSrc.mVariants;
378 // special member
379 if(mpFunction) delete mpFunction;
380 mpFunction=0;
381 if(rSrc.mpFunction) {
382 mpFunction=rSrc.mpFunction->New();
383 mpFunction->Definition(this);
384 }
385}
386
387// std faudes type
389 // test base members
390 if(!Documentation::DoEqual(rOther)) return false;
391 // test my members
392 if(mVariants!=rOther.mVariants) return false;
393 return true;
394}
395
396// clear (all but prototype)
398 FD_DRTI("FunctionDefinition::Clear(): " << Name());
399 // call base
401 // clear my variants
402 mVariants.clear();
403 mVariantIndexMap.clear();
404}
405
406// clear (variants only)
408 FD_DRTI("FunctionDefinition::ClearVariants(): " << Name());
409 // clear my variants
410 mVariants.clear();
411 mVariantIndexMap.clear();
412}
413
414
415// get prototype object
417 return(mpFunction);
418}
419
420// set prototype object
422 // delte any existing prototype
423 if(mpFunction) delete mpFunction;
424 // record new prototype
425 mpFunction = pFunc;
426 // bail out
427 if(!mpFunction) return;
428 // ensure that our prototype uses us as function definition
429 mpFunction->Definition(this);
430}
431
432// construct function on head
434 FD_DRTI("FunctionDefinition::NewFunction(): name " << Name());
435 if(!mpFunction) return NULL;
436 return(mpFunction->New());
437}
438
439
440// # of variants
442 return(mVariants.size());
443}
444
445// existence of variant by name
446bool FunctionDefinition::ExistsVariant(const std::string& varname) const {
447 return mVariantIndexMap.find(varname)!= mVariantIndexMap.end();
448}
449
450// get index by variant name
451int FunctionDefinition::VariantIndex(const std::string& rName) const {
452 std::map<std::string,int>::const_iterator vit= mVariantIndexMap.find(rName);
453 if(vit==mVariantIndexMap.end()) return -1;
454 return vit->second;
455}
456
457// extend variants
459 FD_DRTI("FunctionDefinition::AppendVariant()");
460 // assure that no variant with the same name is yet contained in the list
461 if(ExistsVariant(rVariant.Name())) {
462 std::stringstream err;
463 err << "Attempt to append variant with existing name: " << rVariant.Name() << " in " << Name() << std::endl;
464 throw Exception("FunctionDefinition::AppendVariant()", err.str(), 47);
465 }
466 // do append
467 mVariantIndexMap[rVariant.Name()]=mVariants.size();
468 mVariants.push_back(rVariant);
469}
470
471
472// get signature by variant name
473const Signature& FunctionDefinition::Variant(const std::string& rName) const{
474 std::map<std::string,int>::const_iterator vit= mVariantIndexMap.find(rName);
475 if(vit==mVariantIndexMap.end()) {
476 std::stringstream err;
477 err << "Access to non existing variant " << rName << " in fnct " << Name() << std::endl;
478 throw Exception("FunctionDefinition::Variant()", err.str(), 47);
479 }
480 return mVariants.at(vit->second);
481}
482
483
484// get signature by variant index
486 // check range
487 if((n < 0) || (n >= VariantsSize())){
488 std::stringstream err;
489 err << "Index out of range: " << n << std::endl;
490 throw Exception("FunctionDefinition::Variant()", err.str(), 47);
491 }
492 return mVariants.at(n);
493}
494
495
496// token io
497void FunctionDefinition::DoRead(TokenReader& rTr, const std::string& rLabel, const Type* pContext) {
498 FD_DRTI("FunctionDefinition::DoRead()");
499 // ignore
500 (void) pContext;
501 // label
502 std::string label=rLabel;
503 if(label=="") label="FunctionDefinition";
504 // base can handle this
505 Documentation::DoRead(rTr,label,pContext);
506}
507
508
509// token io
511 FD_DRTI("FunctionDefinition::DoReadCore()");
512 // call base
514 // do variants
515 rTr.ReadBegin("VariantSignatures");
516 while(!rTr.Eos("VariantSignatures")) {
517 Signature sig;
518 sig.Read(rTr);
519 // no doublets
520 if(ExistsVariant(sig.Name())) continue;
521 // append variant signature
522 AppendVariant(sig);
523 } // end: !EOS
524 rTr.ReadEnd("VariantSignatures");
525}
526
527
528// token io
529void FunctionDefinition::DoWrite(TokenWriter& rTw, const std::string& rLabel, const Type* pContext) const {
530 // label
531 std::string label=rLabel;
532 if(label=="") label="FunctionDefinition";
533 // base can handle
534 Documentation::DoWrite(rTw,label,pContext);
535}
536
537// token io
539 FD_DRTI("FunctionDefinition::DoWriteCore(): file " << rTw.FileName());
540 // call base core
542 // write signatures
543 rTw.WriteBegin("VariantSignatures");
544 if(mVariants.size()>1) rTw << "\n";
545 for(unsigned int i=0; i<mVariants.size(); i++) {
546 mVariants.at(i).Write(rTw);
547 if(mVariants.size()>1) rTw << "\n";
548 }
549 rTw.WriteEnd("VariantSignatures");
550 rTw << "\n";
551}
552
553
554/*
555********************************************************************
556********************************************************************
557********************************************************************
558
559Implementation of class Function
560
561********************************************************************
562********************************************************************
563********************************************************************
564*/
565
566// Constructor
568 pFuncDef(fdef),
569 mVariantIndex(-1)
570{
571#ifdef FAUDES_DEBUG_RUNTIMEINTERFACE
572 if(!pFuncDef)
573 {FD_DRTI("Function::Function(): prototype object");}
574 else
575 {FD_DRTI("Function::Function(): " << pFuncDef->Name());}
576#endif
577 // have default variant
578 if(pFuncDef)
579 if(pFuncDef->VariantsSize()>0)
580 Variant(0);
581}
582
583// set function definition
585 // invalidate variant
586 mVariantIndex = -1;
587 mParameterValues.clear();
588 // set
589 pFuncDef=fdef;
590 // report
591#ifdef FAUDES_DEBUG_RUNTIMEINTERFACE
592 if(!pFuncDef)
593 {FD_DRTI("Function::Definition(): prototype object");}
594 else
595 {FD_DRTI("Function::Definition(): " << pFuncDef->Name());}
596#endif
597}
598
599// get function definition
601 return pFuncDef;
602}
603
604
605// get signature size
606int Function::VariantsSize(void) const {
607 if(!pFuncDef) return 0;
608 return pFuncDef->VariantsSize();
609}
610
611// set variant signature
612void Function::Variant(int n) {
613 // pass on t o virtual interface
614 DoVariant(n);
615}
616
617// set variant signature
619 // clear recent variant
620 mVariantIndex=-1;
621 mParameterValues.clear();
622 // prototype object can not have a variant
623 if(!pFuncDef) {
624 std::stringstream err;
625 err << "No valid function definition available" << std::endl;
626 throw Exception("Function::Variant(n)", err.str(), 47);
627 }
628 // index out of range
629 if(n<0 || n >= VariantsSize()) {
630 std::stringstream err;
631 err << "Variant index out of range" << std::endl;
632 throw Exception("Function::Variant(n)", err.str(), 48);
633 }
634 // set variant
636 int nparam = pFuncDef->Variant(mVariantIndex).Size();
637 while((int) mParameterValues.size()<nparam)
638 mParameterValues.push_back(0);
639}
640
641// set variant signature
642void Function::Variant(const std::string& rVariantName) {
643 // prototype object can not have a variant
644 if(!pFuncDef) {
645 std::stringstream err;
646 err << "No valid function definition available" << std::endl;
647 throw Exception("Function::Variant(name)", err.str(), 47);
648 }
649 // get index
650 int varid = pFuncDef->VariantIndex(rVariantName);
651 // detect invalid name
652 if(varid<0) {
653 std::stringstream err;
654 err << "Unknown variant name " << rVariantName << std::endl;
655 throw Exception("Function::Variant(name)", err.str(), 48);
656 }
657 // set by index
658 DoVariant(varid);
659}
660
661// get signature
662const Signature* Function::Variant(void) const {
663 if(!pFuncDef) return 0;
664 if(mVariantIndex<0) return 0;
666}
667
668// get signature size
669int Function::ParamsSize(void) const {
670 return mParameterValues.size();
671}
672
673// set parameter value
674void Function::ParamValue(int n, Type* pVal){
675 if((n < 0) || (n >= ParamsSize())){
676 std::stringstream err;
677 err << "Parameter index out of range: " << n << std::endl;
678 throw Exception("Function::ParamValue()", err.str(), 47);
679 }
680 mParameterValues.at(n) = pVal;
681}
682
683// get parameter
685 if((n < 0) || (n >= ParamsSize())){
686 std::stringstream err;
687 err << "Parameter index out of range: " << n << std::endl;
688 throw Exception("Function::ParamValue()", err.str(), 47);
689 }
690 return(mParameterValues.at(n));
691}
692
693
694// allocate parameter value
696 FD_DRTI("Function::AllocateValue()");
697 if(!Variant()) {
698 std::stringstream err;
699 err << "No variant specified";
700 throw Exception("Function::AllocateValue()", err.str(), 47);
701 }
702 if((n < 0) || (n >= ParamsSize())){
703 std::stringstream err;
704 err << "Parameter index out of range: " << n << std::endl;
705 throw Exception("Function::AllocateValue()", err.str(), 47);
706 }
707 ParamValue(n,TypeRegistry::G()->NewObject(Variant()->At(n).Type()));
708}
709
710// allocate parameter value
712 FD_DRTI("Function::AllocateValues()");
713 for(int i = 0; i < ParamsSize(); i++)
714 AllocateValue(i);
715}
716
717// allocate parameter value
719 FD_DRTI("Function::FreeValues()");
720 for(int i = 0; i < ParamsSize(); i++) {
721 delete mParameterValues.at(i);
722 mParameterValues.at(i) =0;
723 }
724}
725
726
727// type check wrapper
729 FD_DRTI("Function::TypeCheck()");
730 if(mVariantIndex<0) {
731 std::stringstream err;
732 err << "Variant not set" << std::endl;
733 throw Exception("Function::TypeCheck(n)", err.str(), 48);
734 }
735 if(n<0 || n>= ParamsSize()) {
736 std::stringstream err;
737 err << "Parameter out of range" << std::endl;
738 throw Exception("Function::Typechek(n)", err.str(), 48);
739 }
740 bool res=DoTypeCheck(n);
741 FD_DRTI("Function::TypeCheck() done, ok=" << res);
742 return res;
743}
744
745// type check wrapper
747 FD_DRTI("Function::TypeCheck()");
748 if(mVariantIndex<0) {
749 std::stringstream err;
750 err << "Variant not set" << std::endl;
751 throw Exception("Function::TypeCheck()", err.str(), 48);
752 }
753 for(int i=0; i<ParamsSize(); i++)
754 if(!DoTypeCheck(i)) return false;
755 FD_DRTI("Function::TypeCheck() done, ok");
756 return true;
757}
758
759// exec wrapper
761 FD_DRTI("Function::Execute()");
762 if(!Variant()) {
763 std::stringstream err;
764 err << "Variant not set" << std::endl;
765 throw Exception("Function::Execute()", err.str(), 48);
766 }
767 for(int n=0; n<ParamsSize(); n++) {
768 if(!DoTypeCheck(n)) {
769 std::stringstream err;
770 err << "Cannot cast parameter \"" << Variant()->At(n).Name() <<
771 "\" to type \"" << Variant()->At(n).Type() << "\"";
772 throw Exception("Function::Execute()", err.str(), 48);
773 }
774 }
775 DoExecute();
776 FD_DRTI("Function::Execute() done");
777}
778
779
780// token io (informative/debug)
781void Function::DoWrite(TokenWriter& rTw, const std::string& rLabel, const Type* pContext) const{
782 (void) pContext;
783 std::string label = rLabel;
784 if(label == "") label = "Function";
785 FD_DRTI("Function::DoWrite(): file " << rTw.FileName() << " section " << label);
786 rTw.Columns(1);
787 rTw.WriteBegin(label);
788 rTw << "\n";
789 rTw.WriteBegin("Parameters");
790 for(int i = 0; i < ParamsSize(); i++){
791 rTw << typeid(ParamValue(i)).name();
792 rTw << "\n";
793 }
794 rTw.WriteEnd("Parameters");
795 rTw << "\n";
796 rTw.WriteEnd(label);
797 FD_DRTI("Function::DoWrite(): done");
798}
799
800
801} // namespace
802
#define FD_DRTI(message)
#define FAUDES_TYPE_IMPLEMENTATION_EQUAL(ftype, ctype, cbase)
Definition cfl_types.h:916
#define FAUDES_TYPE_IMPLEMENTATION_COPY(ftype, ctype, cbase)
Definition cfl_types.h:903
#define FAUDES_TYPE_IMPLEMENTATION_CAST(ftype, ctype, cbase)
Definition cfl_types.h:905
#define FAUDES_TYPE_IMPLEMENTATION_ASSIGN(ftype, ctype, cbase)
Definition cfl_types.h:908
#define FAUDES_TYPE_IMPLEMENTATION_NEW(ftype, ctype, cbase)
Definition cfl_types.h:901
virtual void DoWriteCore(TokenWriter &rTw) const
bool DoEqual(const Documentation &rOther) const
const std::string & Name(void) const
virtual void DoWrite(TokenWriter &rTw, const std::string &rLabel="", const Type *pContext=0) const
void DoAssign(const Documentation &rSrc)
virtual void DoReadCore(TokenReader &rTr)
virtual void DoRead(TokenReader &rTr, const std::string &rLabel="", const Type *pContext=0)
const Signature & Variant(const std::string &rName) const
void DoAssign(const FunctionDefinition &rSrc)
virtual void ClearVariants(void)
Function * NewFunction() const
const Function * Prototype(void) const
virtual void DoRead(TokenReader &rTr, const std::string &rLabel="", const Type *pContext=0)
virtual void DoReadCore(TokenReader &rTr)
bool DoEqual(const FunctionDefinition &rOther) const
int VariantIndex(const std::string &rName) const
virtual void AppendVariant(const Signature &pVar)
std::map< std::string, int > mVariantIndexMap
FunctionDefinition(const std::string &name="")
virtual void DoWrite(TokenWriter &rTw, const std::string &rLabel="", const Type *pContext=0) const
virtual void DoWriteCore(TokenWriter &rTw) const
std::vector< faudes::Signature > mVariants
bool ExistsVariant(const std::string &varname) const
virtual Function * New() const =0
virtual bool DoTypeCheck(int n)=0
virtual void Definition(const FunctionDefinition *fdef)
void AllocateValue(int i)
const FunctionDefinition * pFuncDef
const Signature * Variant(void) const
const FunctionDefinition * Definition(void) const
Function(const FunctionDefinition *fdef)
void AllocateValues(void)
virtual void DoVariant(int n)
std::vector< Type * > mParameterValues
void DoWrite(TokenWriter &rTw, const std::string &rLabel="", const Type *pContext=0) const
void ParamValue(int n, Type *param)
virtual void DoExecute()=0
int ParamsSize(void) const
int VariantsSize(void) const
std::string Str(void) const
std::string mTDName
bool operator==(const Parameter &rOther) const
bool CReturn(void) const
const std::string & Type(void) const
const ParamAttr & Attribute(void) const
static std::string AStr(Parameter::ParamAttr attr)
const std::string & Name(void) const
int Size(void) const
bool DoEqual(const Signature &rOther) const
const std::string & Name(void) const
const Parameter & At(int n) const
virtual void DoRead(TokenReader &rTr, const std::string &rLabel="", const Type *pContext=0)
void Append(const Parameter &rParam)
virtual void DoWrite(TokenWriter &rTw, const std::string &rLabel="", const Type *pContext=0) const
std::vector< Parameter > mParameters
void DoAssign(const Signature &rSrc)
bool Eos(const std::string &rLabel)
void ReadEnd(const std::string &rLabel)
std::string ReadString(void)
void ReadBegin(const std::string &rLabel)
bool Get(Token &token)
bool Peek(Token &token)
std::string FileName(void) const
std::string FileName(void) const
void Write(Token &rToken)
void WriteEnd(const std::string &rLabel)
int Columns(void) const
void WriteBegin(const std::string &rLabel)
const std::string & StringValue(void) const
@ Option
+xyZ+ (option string, may not contain a "+")
Definition cfl_token.h:87
bool ExistsAttributeString(const std::string &name)
void SetEmpty(const std::string &rName)
void InsAttribute(const std::string &name, const std::string &value)
void SetBegin(const std::string &rName)
Definition cfl_token.cpp:92
const std::string & AttributeStringValue(const std::string &name)
TokenType Type(void) const
static TypeRegistry * G()
void Read(const std::string &rFileName, const std::string &rLabel="", const Type *pContext=0)

libFAUDES 2.33k --- 2025.09.16 --- c++ api documentaion by doxygen