7 #ifndef __KVCLASSFACTORY_H
8 #define __KVCLASSFACTORY_H
10 #include "Riostream.h"
14 #include "KVNameValueList.h"
95 Bool_t fBaseClassTObject;
107 Bool_t fInlineAllMethods;
108 Bool_t fInlineAllCtors;
110 Bool_t fInheritAllCtors;
114 void WritePreProc(std::ofstream&);
115 void WriteWhoWhen(std::ofstream&);
117 void WriteClassDec(std::ofstream&);
118 void WriteClassHeader();
119 void WriteClassImp();
120 void WriteClassWithTemplateHeader();
121 void WriteClassWithTemplateImp();
122 Bool_t CheckTemplateFiles(
const Char_t* base_class,
123 const Char_t* templateFile);
126 Ssiz_t FindNextUncommentedLine(TString&, Ssiz_t beg = 0);
127 void AddTObjectCopyMethod();
128 void AddCopyConstructor();
130 void GenerateGettersAndSetters();
131 void AddAssignmentOperator();
144 Bool_t fIsFundamental=
false;
145 Bool_t fIsPointer=
false;
152 KVClassMember(
const Char_t*,
const Char_t*,
const Char_t*,
const Char_t* =
"protected");
156 void Copy(TObject& obj)
const override;
158 void Print(Option_t* =
"")
const override;
181 return !strcmp(
GetAccess(),
"protected");
191 return fIsFundamental;
231 virtual void write_method_body(
KVString& decl);
233 Bool_t fVirtual=
false;
236 Bool_t fInline=
false;
237 Bool_t fNoexcept=
false;
239 void write_doxygen_format_method_comments(
KVString& decl);
261 KVClassMethod(Bool_t Virtual = kFALSE, Bool_t Const = kFALSE, Bool_t Inline = kFALSE)
262 :
KVClassMember(), fVirtual(Virtual), fConst(Const), fNargs(0), fInline(Inline)
267 void Copy(TObject& obj)
const override;
284 void AddArgument(
const Char_t* type,
const Char_t* argname =
"",
const Char_t* defaultvalue =
"")
287 fFields.
SetValue(Form(
"Arg_%d", ++fNargs), _type);
288 if (strcmp(defaultvalue,
"")) {
290 fFields.
SetValue(Form(
"Arg_%d_default", fNargs), _s);
292 if (strcmp(argname,
"")) {
294 fFields.
SetValue(Form(
"Arg_%d_name", fNargs), _s);
297 void AddArgument(Int_t i,
const Char_t* type,
const Char_t* argname =
"",
const Char_t* defaultvalue =
"");
339 void Print(Option_t* =
"")
const override;
372 Bool_t fCopyCtor=
false;
373 Bool_t fMoveCtor=
false;
374 void write_method_body(
KVString& decl)
override;
379 :
KVClassMethod(), fCopyCtor(kFALSE), fParentClass(ParentClass) {};
409 fFields.SetValue(Form(
"Arg_%d_baseclass", i), 1);
414 fFields.SetValue(Form(
"Arg_%d_memvar", i), memvar);
421 void AddMemberInitialiserConstructor(KVClassConstructor* =
nullptr);
436 SetName(
"destructor");
449 const Char_t* classdesc,
450 const Char_t* base_class =
451 "", Bool_t withTemplate =
452 kFALSE,
const Char_t* templateFile =
"");
455 void Copy(TObject& obj)
const override;
457 static void MakeClass(
const Char_t* classname,
458 const Char_t* classdesc,
459 const Char_t* base_class =
460 "", Bool_t withTemplate =
461 kFALSE,
const Char_t* templateFile =
"");
464 KVClassMember*
AddMember(
const Char_t* name,
const Char_t* type,
const Char_t* comment,
const Char_t* access =
"protected");
465 KVClassMethod*
AddMethod(
const Char_t* name,
const Char_t* return_type,
const Char_t* access =
"public",
466 Bool_t isVirtual = kFALSE, Bool_t isConst = kFALSE);
467 KVClassConstructor*
AddConstructor(
const Char_t* argument_type =
"",
468 const Char_t* argument_name =
"",
const Char_t* default_value =
"",
const Char_t* access =
"public");
472 void AddMethod(
const KVClassMethod& kvcm);
474 const Char_t* argument_name =
"",
const Char_t* default_value =
"");
504 return fClassName.Data();
515 return fClassPath !=
"" ? Form(
"%s%s.h", fClassPath.Data(), fClassName.Data()) : Form(
"%s.h", fClassName.Data());
522 return fClassPath !=
"" ? Form(
"%s%s.cpp", fClassPath.Data(), fClassName.Data()) : Form(
"%s.cpp", fClassName.Data());
530 return fClassDesc.Data();
535 fHasBaseClass = (fBaseClassName !=
"");
536 fBaseClassTObject = kFALSE;
538 fBaseClass = TClass::GetClass(fBaseClassName);
539 fBaseClassTObject = (fBaseClass && fBaseClass->InheritsFrom(
"TObject"));
544 return fBaseClassName.Data();
548 return fBaseClassName.Contains(
",");
552 return fWithTemplate;
556 return fBaseClassTObject;
558 void SetTemplate(Bool_t temp,
const Char_t* temp_file);
561 return fTemplateBase;
565 return fMembers.GetEntries();
568 void Print(Option_t* opt =
"")
const override;
580 if (!fClassPath.EndsWith(
"/")) fClassPath.Append(
"/");
592 fInheritAllCtors = yes;
Base class for KaliVeda framework.
void SetLabel(const Char_t *lab)
const Char_t * GetLabel() const
Bool_t IsCalled(const Char_t *name, bool case_insensitive=false) const
Constructor for a class generated with KVClassFactory.
Bool_t IsDefaultCtor() const
void SetBaseClassArgument(Int_t i)
Bool_t IsCopyCtor() const
Bool_t IsMoveCtor() const
void SetCopyCtor(Bool_t c=kTRUE)
KVClassConstructor(KVClassFactory *ParentClass)
void SetMemberVariableNameForArgument(Int_t i, const Char_t *memvar)
Bool_t IsConstructor() const override
void SetMoveCtor(Bool_t c=kTRUE)
Destructor for a class generated with KVClassFactory.
Bool_t IsDestructor() const override
Member variable in a class generated with KVClassFactory.
virtual void WriteDeclaration(KVString &)
void SetComment(const Char_t *c)
set comment for variable
void Print(Option_t *="") const override
print the KVClass member
void SetAccess(const Char_t *acc="public")
set access type : public, protected or private
void Copy(TObject &obj) const override
copy this to obj
Bool_t IsFundamental() const
const Char_t * GetRealName() const
get short name without leading 'f'
const Char_t * GetComment() const
get access type : public, protected or private
const Char_t * GetAccess() const
get access type : public, protected or private
Bool_t IsProtected() const
Method in a class generated with KVClassFactory.
void SetMethodComment(const KVString &com)
void Copy(TObject &obj) const override
copy this to obj
void WriteDeclaration(KVString &) override
const Char_t * GetReturnType()
void SetNoExcept(bool yes=true)
KVClassMethod(Bool_t Virtual=kFALSE, Bool_t Const=kFALSE, Bool_t Inline=kFALSE)
virtual Bool_t IsDestructor() const
void SetConst(Bool_t c=kTRUE)
void WriteImplementation(KVString &decl)
void SetBaseClass(const Char_t *name)
void Print(Option_t *="") const override
print the KVClass method
virtual Bool_t IsConstructor() const
void AddArgument(const Char_t *type, const Char_t *argname="", const Char_t *defaultvalue="")
void SetReturnType(const Char_t *type)
const Char_t * GetClassName()
void SetClassName(const Char_t *name)
void SetVirtual(Bool_t c=kTRUE)
Bool_t IsNormalMethod() const
void SetInline(Bool_t yes=kTRUE)
void SetMethodBody(const KVString &body)
Factory class for generating skeleton files for new classes.
void Print(Option_t *opt="") const override
Print infos on object.
void Copy(TObject &obj) const override
Copy the state of this KVClassFactory to the one referenced by 'obj'.
void SetOutputPath(const KVString &p)
const Char_t * GetClassDesc() const
Bool_t HasVirtualMethods() const
Bool_t WithMultipleBaseClasses() const
void SetTemplate(Bool_t temp, const Char_t *temp_file)
void AddMethodComment(const Char_t *method_name, const KVString &comment)
Set the comments for method 'method_name' added to the class using AddMethod.
Bool_t IsBaseClassTObject() const
void GenerateCode()
Generate header and implementation file for currently-defined class.
KVClassMethod * GetMethod(const Char_t *name) const
const Char_t * GetTemplateBase() const
void SetClassName(const Char_t *n)
void SetInheritAllConstructors(Bool_t yes=kTRUE)
const Char_t * GetImpFileName() const
const KVList * GetListOfMethods() const
const KVList * GetListOfMembers() const
Bool_t WithTemplate() const
const Char_t * GetHeaderFileName() const
KVClassFactory()
Default ctor.
KVClassConstructor * GetDefaultCtor() const
static void MakeClass(const Char_t *classname, const Char_t *classdesc, const Char_t *base_class="", Bool_t withTemplate=kFALSE, const Char_t *templateFile="")
void AddHeaderIncludeFile(const Char_t *filename)
void AddDestructor(const TString &access="public")
void AddImplIncludeFile(const Char_t *filename)
void AddDefaultConstructor()
const Char_t * GetClassName() const
void SetClassDesc(const Char_t *d)
Int_t GetNumberOfMemberVariables() const
void AddMethodBody(const Char_t *method_name, const KVString &body)
const Char_t * GetBaseClass() const
void InlineAllMethods(bool yes=true)
const Char_t * GetOutputPath() const
void AddMethodArgument(const Char_t *method_name, const Char_t *argument_type, const Char_t *argument_name="", const Char_t *default_value="")
void InlineAllConstructors(bool yes=true)
KVClassDestructor * GetDestructor() const
void SetBaseClass(const Char_t *b)
void AddGetSetMethods(const KVNameValueList &)
For each named parameter in the list, we add protected member variables with the name and type of the...
KVClassConstructor * AddConstructor(const Char_t *argument_type="", const Char_t *argument_name="", const Char_t *default_value="", const Char_t *access="public")
KVClassMember * AddMember(const Char_t *name, const Char_t *type, const Char_t *comment, const Char_t *access="protected")
void AddAllBaseConstructors()
KVClassMethod * AddMethod(const Char_t *name, const Char_t *return_type, const Char_t *access="public", Bool_t isVirtual=kFALSE, Bool_t isConst=kFALSE)
Extended TList class which owns its objects by default.
Handles lists of named parameters with different types, a list of KVNamedParameter objects.
void SetValue(const Char_t *name, value_type value)
const Char_t * GetStringValue(const Char_t *name) const
Bool_t HasParameter(const Char_t *name) const
T * get_object(const TString &name) const
Extension of ROOT TString class which allows backwards compatibility with ROOT v3....