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)
150
151// constructor
153
154// copy constructor
156{
157 DoCopy(rSrc);
158}
159
160// std faudes type
161void Signature::DoCopy(const Signature& rSrc) {
162 // assign my members
163 mName=rSrc.mName;
165}
166
167// std faudes type
168bool Signature::DoEqual(const Signature& rOther) const {
169 // test my members
170 if(mName!=rOther.mName) return false;
171 if(mParameters!=rOther.mParameters) return false;
172 return true;
173}
174
175
176// clear signature
178 FD_DRTI("Signature::Clear()");
179 mName="";
180 mParameters.clear();
181}
182
183// get name
184const std::string& Signature::Name(void) const{
185 return mName;
186}
187
188// set name
189void Signature::Name(const std::string& rName){
190 mName = rName;
191}
192
193// get size
194int Signature::Size() const{
195 return mParameters.size();
196}
197
198// get parameter
199const Parameter& Signature::At(int n) const{
200 // check range
201 if((n < 0) || (n >= Size())){
202 std::stringstream err;
203 err << "Index out of range: " << n << std::endl;
204 throw Exception("Signature::At()", err.str(), 47);
205 }
206 // return const ref
207 return mParameters.at(n);
208}
209
210// set parameter
211void Signature::At(int n, const Parameter& rParam) {
212 // check range
213 if((n < 0) || (n >= Size())){
214 std::stringstream err;
215 err << "Index out of range: " << n << std::endl;
216 throw Exception("Signature::At()", err.str(), 47);
217 }
218 // set ref
219 mParameters[n]=rParam;
220}
221
222// append parameter
223void Signature::Append(const Parameter& rParam){
224 mParameters.push_back(rParam);
225}
226
227
228
229// token io
230void Signature::DoWrite(TokenWriter& rTw, const std::string& rLabel, const Type* pContext) const{
231 // ignore
232 (void) rLabel;
233 (void) pContext;
234 // write my tag
235 Token btag;
236 btag.SetBegin("Signature");
237 btag.InsAttribute("name",mName);
238 rTw << btag;
239 // parameter specs
240 for(int i=0; i<Size(); i++){
241 Token par;
242 par.SetEmpty("Parameter");
243 par.InsAttribute("name",mParameters.at(i).Name());
244 par.InsAttribute("ftype",mParameters.at(i).Type());
245 switch(mParameters.at(i).Attribute()){
246 case Parameter::In: par.InsAttribute("access","In"); break;
247 case Parameter::Out: par.InsAttribute("access","Out"); break;
248 case Parameter::InOut: par.InsAttribute("access","InOut"); break;
249 default: break;
250 }
251 if(mParameters.at(i).CReturn()) par.InsAttribute("creturn","true");
252 rTw << par ;
253 }
254 // end section
255 rTw.WriteEnd("Signature");
256}
257
258// token io
259void Signature::DoRead(TokenReader& rTr, const std::string& rLabel, const Type* pContext){
260 // ignore
261 (void) rLabel;
262 (void) pContext;
263 // read my section
264 FD_DRTI("Signature::DoRead(): file " << rTr.FileName());
265 Token token;
266 rTr.ReadBegin("Signature",token);
267
268 // detect and digest old pre 2.16b file format
269 // note: this section will eventually be removed
270 if(!token.ExistsAttributeString("name")) {
271 mName=rTr.ReadString();
272 FD_DRTI("Signature::DoRead(): found (pre 2.16b file)" << mName);
273 while(!rTr.Eos("Signature")) {
274 std::string pname=rTr.ReadString();
275 std::string ptype=rTr.ReadString();
277 bool cret=false;
278 Token token;
279 rTr.Peek(token);
280 while(token.Type()==Token::Option) {
281 rTr.Get(token);
282 if(token.StringValue()=="In") pattr= Parameter::In;
283 if(token.StringValue()=="Out") pattr= Parameter::Out;
284 if(token.StringValue()=="InOut") pattr= Parameter::InOut;
285 if(token.StringValue()=="OutIn") pattr= Parameter::InOut;
286 if(token.StringValue()=="CReturn") cret=true;
287 rTr.Peek(token);
288 }
289 Append(Parameter(pname,ptype,pattr,cret));
290 }
291 rTr.ReadEnd("Signature");
292 return;
293 } // end pre 2.16b file format
294
295 // extract name
296 mName=token.AttributeStringValue("name");
297 FD_DRTI("Signature::DoRead(): found " << mName);
298 // loop parameters
299 while(!rTr.Eos("Signature")) {
300 Token par;
301 rTr.ReadBegin("Parameter",par);
302 // parameter name
303 std::string pname=par.AttributeStringValue("name");
304 // parameter type
305 std::string ptype=par.AttributeStringValue("ftype");
306 // parameter access
308 if(par.ExistsAttributeString("access")){
309 std::string paccess = par.AttributeStringValue("access");
310 if(paccess=="In") pattr= Parameter::In;
311 if(paccess=="Out") pattr= Parameter::Out;
312 if(paccess=="InOut") pattr= Parameter::InOut;
313 if(paccess=="OutIn") pattr= Parameter::InOut;
314 }
315 // parameter cret
316 bool cret=false;
317 if(par.ExistsAttributeString("creturn")){
318 std::string pcret = par.AttributeStringValue("creturn");
319 if(pcret=="true") cret=true;
320 if(pcret=="True") cret=true;
321 if(pcret=="Yes") cret=true;
322 if(pcret=="yes") cret=true;
323 }
324 // insert
325 Append(Parameter(pname,ptype,pattr,cret));
326 rTr.ReadEnd("Parameter");
327 }
328 // done
329 rTr.ReadEnd("Signature");
330 FD_DRTI("Signature::DoRead(): done");
331}
332
333
334
335
336/*
337********************************************************************
338********************************************************************
339********************************************************************
340
341Implementation of class FunctionDefinition
342
343********************************************************************
344********************************************************************
345********************************************************************
346*/
347
348// faudes type (cannot do autoregister)
355
356
357// constructor
358FunctionDefinition::FunctionDefinition(const std::string& name) :
359 Documentation(),
360 mpFunction(NULL)
361{
362 Name(name);
363}
364
365// copy constructor
367 Documentation(),
368 mpFunction(NULL)
369{
370 DoCopy(rSrc);
371}
372
373// std faudes type
375 // assign base members
377 // assign my members
378 mVariants=rSrc.mVariants;
380 // special member
381 if(mpFunction) delete mpFunction;
382 mpFunction=0;
383 if(rSrc.mpFunction) {
384 mpFunction=rSrc.mpFunction->New();
385 mpFunction->Definition(this);
386 }
387}
388
389// std faudes type
391 // test base members
392 if(!Documentation::DoEqual(rOther)) return false;
393 // test my members
394 if(mVariants!=rOther.mVariants) return false;
395 return true;
396}
397
398// clear (all but prototype)
400 FD_DRTI("FunctionDefinition::Clear(): " << Name());
401 // call base
403 // clear my variants
404 mVariants.clear();
405 mVariantIndexMap.clear();
406}
407
408// clear (variants only)
410 FD_DRTI("FunctionDefinition::ClearVariants(): " << Name());
411 // clear my variants
412 mVariants.clear();
413 mVariantIndexMap.clear();
414}
415
416
417// get prototype object
419 return(mpFunction);
420}
421
422// set prototype object
424 // delte any existing prototype
425 if(mpFunction) delete mpFunction;
426 // record new prototype
427 mpFunction = pFunc;
428 // bail out
429 if(!mpFunction) return;
430 // ensure that our prototype uses us as function definition
431 mpFunction->Definition(this);
432}
433
434// construct function on head
436 FD_DRTI("FunctionDefinition::NewFunction(): name " << Name());
437 if(!mpFunction) return NULL;
438 return(mpFunction->New());
439}
440
441
442// # of variants
444 return(mVariants.size());
445}
446
447// existence of variant by name
448bool FunctionDefinition::ExistsVariant(const std::string& varname) const {
449 return mVariantIndexMap.find(varname)!= mVariantIndexMap.end();
450}
451
452// get index by variant name
453int FunctionDefinition::VariantIndex(const std::string& rName) const {
454 std::map<std::string,int>::const_iterator vit= mVariantIndexMap.find(rName);
455 if(vit==mVariantIndexMap.end()) return -1;
456 return vit->second;
457}
458
459// extend variants
461 FD_DRTI("FunctionDefinition::AppendVariant()");
462 // assure that no variant with the same name is yet contained in the list
463 if(ExistsVariant(rVariant.Name())) {
464 std::stringstream err;
465 err << "Attempt to append variant with existing name: " << rVariant.Name() << " in " << Name() << std::endl;
466 throw Exception("FunctionDefinition::AppendVariant()", err.str(), 47);
467 }
468 // do append
469 mVariantIndexMap[rVariant.Name()]=mVariants.size();
470 mVariants.push_back(rVariant);
471}
472
473
474// get signature by variant name
475const Signature& FunctionDefinition::Variant(const std::string& rName) const{
476 std::map<std::string,int>::const_iterator vit= mVariantIndexMap.find(rName);
477 if(vit==mVariantIndexMap.end()) {
478 std::stringstream err;
479 err << "Access to non existing variant " << rName << " in fnct " << Name() << std::endl;
480 throw Exception("FunctionDefinition::Variant()", err.str(), 47);
481 }
482 return mVariants.at(vit->second);
483}
484
485
486// get signature by variant index
488 // check range
489 if((n < 0) || (n >= VariantsSize())){
490 std::stringstream err;
491 err << "Index out of range: " << n << std::endl;
492 throw Exception("FunctionDefinition::Variant()", err.str(), 47);
493 }
494 return mVariants.at(n);
495}
496
497
498// token io
499void FunctionDefinition::DoRead(TokenReader& rTr, const std::string& rLabel, const Type* pContext) {
500 FD_DRTI("FunctionDefinition::DoRead()");
501 // ignore
502 (void) pContext;
503 // label
504 std::string label=rLabel;
505 if(label=="") label="FunctionDefinition";
506 // base can handle this
507 Documentation::DoRead(rTr,label,pContext);
508}
509
510
511// token io
513 FD_DRTI("FunctionDefinition::DoReadCore()");
514 // call base
516 // do variants
517 rTr.ReadBegin("VariantSignatures");
518 while(!rTr.Eos("VariantSignatures")) {
519 Signature sig;
520 sig.Read(rTr);
521 // no doublets
522 if(ExistsVariant(sig.Name())) continue;
523 // append variant signature
524 AppendVariant(sig);
525 } // end: !EOS
526 rTr.ReadEnd("VariantSignatures");
527}
528
529
530// token io
531void FunctionDefinition::DoWrite(TokenWriter& rTw, const std::string& rLabel, const Type* pContext) const {
532 // label
533 std::string label=rLabel;
534 if(label=="") label="FunctionDefinition";
535 // base can handle
536 Documentation::DoWrite(rTw,label,pContext);
537}
538
539// token io
541 FD_DRTI("FunctionDefinition::DoWriteCore(): file " << rTw.FileName());
542 // call base core
544 // write signatures
545 rTw.WriteBegin("VariantSignatures");
546 if(mVariants.size()>1) rTw << "\n";
547 for(unsigned int i=0; i<mVariants.size(); i++) {
548 mVariants.at(i).Write(rTw);
549 if(mVariants.size()>1) rTw << "\n";
550 }
551 rTw.WriteEnd("VariantSignatures");
552 rTw << "\n";
553}
554
555
556/*
557********************************************************************
558********************************************************************
559********************************************************************
560
561Implementation of class Function
562
563********************************************************************
564********************************************************************
565********************************************************************
566*/
567
568// Constructor
570 pFuncDef(fdef),
571 mVariantIndex(-1)
572{
573#ifdef FAUDES_DEBUG_RUNTIMEINTERFACE
574 if(!pFuncDef)
575 {FD_DRTI("Function::Function(): prototype object");}
576 else
577 {FD_DRTI("Function::Function(): " << pFuncDef->Name());}
578#endif
579 // have default variant
580 if(pFuncDef)
581 if(pFuncDef->VariantsSize()>0)
582 Variant(0);
583}
584
585// set function definition
587 // invalidate variant
588 mVariantIndex = -1;
589 mParameterValues.clear();
590 // set
591 pFuncDef=fdef;
592 // report
593#ifdef FAUDES_DEBUG_RUNTIMEINTERFACE
594 if(!pFuncDef)
595 {FD_DRTI("Function::Definition(): prototype object");}
596 else
597 {FD_DRTI("Function::Definition(): " << pFuncDef->Name());}
598#endif
599}
600
601// get function definition
603 return pFuncDef;
604}
605
606
607// get signature size
608int Function::VariantsSize(void) const {
609 if(!pFuncDef) return 0;
610 return pFuncDef->VariantsSize();
611}
612
613// set variant signature
614void Function::Variant(int n) {
615 // pass on t o virtual interface
616 DoVariant(n);
617}
618
619// set variant signature
621 // clear recent variant
622 mVariantIndex=-1;
623 mParameterValues.clear();
624 // prototype object can not have a variant
625 if(!pFuncDef) {
626 std::stringstream err;
627 err << "No valid function definition available" << std::endl;
628 throw Exception("Function::Variant(n)", err.str(), 47);
629 }
630 // index out of range
631 if(n<0 || n >= VariantsSize()) {
632 std::stringstream err;
633 err << "Variant index out of range" << std::endl;
634 throw Exception("Function::Variant(n)", err.str(), 48);
635 }
636 // set variant
638 int nparam = pFuncDef->Variant(mVariantIndex).Size();
639 while((int) mParameterValues.size()<nparam)
640 mParameterValues.push_back(0);
641}
642
643// set variant signature
644void Function::Variant(const std::string& rVariantName) {
645 // prototype object can not have a variant
646 if(!pFuncDef) {
647 std::stringstream err;
648 err << "No valid function definition available" << std::endl;
649 throw Exception("Function::Variant(name)", err.str(), 47);
650 }
651 // get index
652 int varid = pFuncDef->VariantIndex(rVariantName);
653 // detect invalid name
654 if(varid<0) {
655 std::stringstream err;
656 err << "Unknown variant name " << rVariantName << std::endl;
657 throw Exception("Function::Variant(name)", err.str(), 48);
658 }
659 // set by index
660 DoVariant(varid);
661}
662
663// get signature
664const Signature* Function::Variant(void) const {
665 if(!pFuncDef) return 0;
666 if(mVariantIndex<0) return 0;
668}
669
670// get signature size
671int Function::ParamsSize(void) const {
672 return mParameterValues.size();
673}
674
675// set parameter value
676void Function::ParamValue(int n, Type* pVal){
677 if((n < 0) || (n >= ParamsSize())){
678 std::stringstream err;
679 err << "Parameter index out of range: " << n << std::endl;
680 throw Exception("Function::ParamValue()", err.str(), 47);
681 }
682 mParameterValues.at(n) = pVal;
683}
684
685// get parameter
687 if((n < 0) || (n >= ParamsSize())){
688 std::stringstream err;
689 err << "Parameter index out of range: " << n << std::endl;
690 throw Exception("Function::ParamValue()", err.str(), 47);
691 }
692 return(mParameterValues.at(n));
693}
694
695
696// allocate parameter value
698 FD_DRTI("Function::AllocateValue()");
699 if(!Variant()) {
700 std::stringstream err;
701 err << "No variant specified";
702 throw Exception("Function::AllocateValue()", err.str(), 47);
703 }
704 if((n < 0) || (n >= ParamsSize())){
705 std::stringstream err;
706 err << "Parameter index out of range: " << n << std::endl;
707 throw Exception("Function::AllocateValue()", err.str(), 47);
708 }
709 ParamValue(n,TypeRegistry::G()->NewObject(Variant()->At(n).Type()));
710}
711
712// allocate parameter value
714 FD_DRTI("Function::AllocateValues()");
715 for(int i = 0; i < ParamsSize(); i++)
716 AllocateValue(i);
717}
718
719// allocate parameter value
721 FD_DRTI("Function::FreeValues()");
722 for(int i = 0; i < ParamsSize(); i++) {
723 delete mParameterValues.at(i);
724 mParameterValues.at(i) =0;
725 }
726}
727
728
729// type check wrapper
731 FD_DRTI("Function::TypeCheck()");
732 if(mVariantIndex<0) {
733 std::stringstream err;
734 err << "Variant not set" << std::endl;
735 throw Exception("Function::TypeCheck(n)", err.str(), 48);
736 }
737 if(n<0 || n>= ParamsSize()) {
738 std::stringstream err;
739 err << "Parameter out of range" << std::endl;
740 throw Exception("Function::Typechek(n)", err.str(), 48);
741 }
742 bool res=DoTypeCheck(n);
743 FD_DRTI("Function::TypeCheck() done, ok=" << res);
744 return res;
745}
746
747// type check wrapper
749 FD_DRTI("Function::TypeCheck()");
750 if(mVariantIndex<0) {
751 std::stringstream err;
752 err << "Variant not set" << std::endl;
753 throw Exception("Function::TypeCheck()", err.str(), 48);
754 }
755 for(int i=0; i<ParamsSize(); i++)
756 if(!DoTypeCheck(i)) return false;
757 FD_DRTI("Function::TypeCheck() done, ok");
758 return true;
759}
760
761// exec wrapper
763 FD_DRTI("Function::Execute()");
764 if(!Variant()) {
765 std::stringstream err;
766 err << "Variant not set" << std::endl;
767 throw Exception("Function::Execute()", err.str(), 48);
768 }
769 for(int n=0; n<ParamsSize(); n++) {
770 if(!DoTypeCheck(n)) {
771 std::stringstream err;
772 err << "Cannot cast parameter \"" << Variant()->At(n).Name() <<
773 "\" to type \"" << Variant()->At(n).Type() << "\"";
774 throw Exception("Function::Execute()", err.str(), 48);
775 }
776 }
777 DoExecute();
778 FD_DRTI("Function::Execute() done");
779}
780
781
782// token io (informative/debug)
783void Function::DoWrite(TokenWriter& rTw, const std::string& rLabel, const Type* pContext) const{
784 (void) pContext;
785 std::string label = rLabel;
786 if(label == "") label = "Function";
787 FD_DRTI("Function::DoWrite(): file " << rTw.FileName() << " section " << label);
788 rTw.Columns(1);
789 rTw.WriteBegin(label);
790 rTw << "\n";
791 rTw.WriteBegin("Parameters");
792 for(int i = 0; i < ParamsSize(); i++){
793 rTw << typeid(ParamValue(i)).name();
794 rTw << "\n";
795 }
796 rTw.WriteEnd("Parameters");
797 rTw << "\n";
798 rTw.WriteEnd(label);
799 FD_DRTI("Function::DoWrite(): done");
800}
801
802
803} // namespace
804
#define FD_DRTI(message)
#define FAUDES_TYPE_IMPLEMENTATION_MOVE(ftype, ctype, cbase)
Definition cfl_types.h:959
#define FAUDES_TYPE_IMPLEMENTATION_EQUAL(ftype, ctype, cbase)
Definition cfl_types.h:967
#define FAUDES_TYPE_IMPLEMENTATION_CAST(ftype, ctype, cbase)
Definition cfl_types.h:948
#define FAUDES_TYPE_IMPLEMENTATION_ASSIGN(ftype, ctype, cbase)
Definition cfl_types.h:951
#define FAUDES_TYPE_IMPLEMENTATION_NEW(ftype, ctype, cbase)
Definition cfl_types.h:944
#define FAUDES_TYPE_IMPLEMENTATION_NEWCOPY(ftype, ctype, cbase)
Definition cfl_types.h:946
virtual void DoWriteCore(TokenWriter &rTw) const
bool DoEqual(const Documentation &rOther) const
const std::string & Name(void) const
void DoCopy(const Documentation &rSrc)
virtual void DoWrite(TokenWriter &rTw, const std::string &rLabel="", const Type *pContext=0) const
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
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
void DoCopy(const FunctionDefinition &rSrc)
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
void DoCopy(const Signature &rSrc)
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
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.34d --- 2026.03.11 --- c++ api documentaion by doxygen