Baptiste Lepilleur's template file. (@)Copyright 2001, Baptiste Lepilleur . [-ExtractPath] !!Memo Extract the path from a full filename. path is the filename we need to extract the path from. returns: extracted path. Algo: we iterates the filename from the end until we found a character '\'. !!End !!Params path @@(ProjectPath)@@ !!End !!Code Input path: "@@path@@" !!Set index @@(Strlen @@path@@)@@ !!// !!Set finalpath !!Label LoopExtractPath !!Sub index 1 !!If @@index@@ < 0 !!Goto EndExtractPath !!Endif !!// !!Set lastchar @@(StrSub @@path@@ @@index@@ 1)@@ !!If @@lastchar@@ != "\" !!Goto LoopExtractPath !!Endif !!// !!Add index 1 !!Set finalpath @@(StrSub @@path@@ 0 @@index@@)@@ !!// !!Label EndExtractPath !!Return @@finalpath@@ !!End --------------------------------------------------------------------------------- --------------------------------------------------------------------------------- --------------------------------------------------------------------------------- --------------------------------------------------------------------------------- [+01 Create Class in file] !!Memo Creates a new class in new files (.h/.cpp) and adds them to the project. !!End !!Params classname Ttr parentclassname = classdesc This class represents objectkind Reference Object hasserialize 0 isrefobj 0 inlinectordtor 0 createfile 1 isunittest 0 !!End !!Dialog Class name:
Brief description:
Object Kind:
Parent class name:
Create a new file ? (otherwise Insert in current file).

Has: virtual void Serialize( CArchive &ar )
Is a reference counted object (inherit ERefObj)
Inline ctor/dtor, copy ctor/operator.
Is a CppUnit unit test.
!!End !!Code !!// Set variable that indicates the kind of object we are working on. !!Set defvalobject 0 !!If @@objectkind@@ == "Default Value Object" !!Set defvalobject 1 !!Endif !!// !!Set valobject 0 !!If @@objectkind@@ == "Explicit Value Object" !!Set valobject 1 !!Endif !!// !!Set refobject 0 !!If @@objectkind@@ == "Reference Object" !!Set refobject 1 !!Endif !!// !!// Set class filename (relative to dsp) !!Set headerfn @@classname@@.h !!Set implfn @@classname@@.cpp !!Set headerdefine @@(String @@(Call -MakeHeaderDefined fn @@headerfn@@)@@:U)@@ !!// !!// hasparentclass indicates if a parent class has been defined. !!Set hasparentclass 0 !!If @@parentclassname@@ != = !!Set hasparentclass 1 !!Else !!If @@isunittest@@ !!Set parentclassname CppUnit::TestFixture !!Set hasparentclass 1 !!Endif !!Endif !!// !!// hasparent is set to 1 if the class has some parent (ERefObj or parentclass). !!Set hasparent @@hasparentclass@@ !!If @@isrefobj@@ !!Set hasparent 1 !!Endif !!// !!// !!// All variables are set, we can now generates the class. !!// !!// !!// !!// !!// ---------------------------------------------------------------------------- !!// ------------------------------ header file --------------------------------- !!// ---------------------------------------------------------------------------- !!// !!// !!// !!If @@createfile@@ !!FileNew @@headerfn@@ dsp !!Set headerpath @@(FilePath)@@ // ////////////////////////////////////////////////////////////////////////// // Header file @@headerfn@@ for class @@classname@@ // (c)Copyright 2000, Baptiste Lepilleur. // Created: @@(Date "yyyy/MM/dd")@@ // ////////////////////////////////////////////////////////////////////////// #ifndef @@headerdefine@@ #define @@headerdefine@@ !!Else // ////////////////////////////////////////////////////////////////////////// // ////////////////////////////////////////////////////////////////////////// // Definition of class @@classname@@ // ////////////////////////////////////////////////////////////////////////// // ////////////////////////////////////////////////////////////////////////// !!Endif !!If @@hasparentclass@@ !!If @@isunittest@@ #include !!Else #include "@@parentclassname@@.h" !!Endif !!Endif !!If @@isrefobj@@ /*! Declare @@classname@@Ref as a reference pointer on @@classname@@. */ EDECL_REF( @@classname@@ ); !!Endif /*! \class @@classname@@ * \brief @@classdesc@@ */ class @@classname@@@@\ !!// Write inherited class list (parent class first, then ERefObj if inherited). !!If @@hasparent@@ : @@\ !!// xpos contains the indentation level for inheritance declarations... !!GetPos xpos ypos !!Sub xpos 1 public @@\ !!Else !!Endif !!If @@hasparentclass@@ @@parentclassname@@@@\ !!If @@isrefobj@@ , @@(Call -MakeFiller filler " " count @@xpos@@)@@@@\ public @@\ !!Else !!Endif !!Endif !!If @@isrefobj@@ ERefObj !!Endif { !!// !!// !!// ------------ Done with inheritance, declare the class body... ---------- !!// !!// !!If @@isunittest@@ CPPUNIT_TEST_SUITE( @@classname@@ ); CPPUNIT_TEST( putTestMethodNameHere ); CPPUNIT_TEST_SUITE_END(); !!Endif public: !!If !@@defvalobject@@ /*! Constructs a @@classname@@ object. */ @@classname@@(); !!Endif !!If @@valobject@@ /*! Copy constructor. * @param copy Object to copy. */ @@classname@@( const @@classname@@ © ); !!Endif /// Destructor. virtual ~@@classname@@(); !!If @@valobject@@ /*! Copy operator. * @param copy Object to copy. * @return Reference on this object. */ @@classname@@ &operator =( const @@classname@@ © ); !!Endif !!If @@isunittest@@ void setUp(); void tearDown(); !!Endif !!// Private for methods !!If @@refobject@@ private: /// Prevents the use of the copy constructor. @@classname@@( const @@classname@@ © ); /// Prevents the use of the copy operator. void operator =( const @@classname@@ © ); !!Endif !!// Private for member datas private: }; !!If @@createfile@@ // Inlines methods for @@classname@@:@@\ !!GetPos xpos ypos !!Sub xpos 4 // @@(Call -MakeFiller filler - count @@xpos@@)@@ !!Endif //@@createfile@@ !!If @@inlinectordtor@@ !!If !@@defvalobject@@ inline @@classname@@::@@classname@@()@@\ !!If @@hasparentclass@@ : @@parentclassname@@() !!Else !!Endif { } !!Endif //!@@defvalobject@@ !!If @@valobject@@ inline @@classname@@::@@classname@@( const @@classname@@ © )@@\ !!If @@hasparentclass@@ : @@parentclassname@@( copy ) !!Else !!Endif !!Endif //@@valobject@@ inline @@classname@@::~@@classname@@() { } !!If @@valobject@@ inline @@classname@@ & @@classname@@::operator =( const @@classname@@ © ) { return *this; } !!Endif //@@valobject@@ !!Endif //@@inlinectordtor@@ !!If @@createfile@@ #endif // @@headerdefine@@ !!FileSave !!ProjectFileAdd !!Endif !!// !!// !!// !!// ---------------------------------------------------------------------------- !!// -------------------------- Implementation file ----------------------------- !!// ---------------------------------------------------------------------------- !!// !!// !!// !!If @@createfile@@ !!FileNew @@implfn@@ dsp // ////////////////////////////////////////////////////////////////////////// // Implementation file @@implfn@@ for class @@classname@@ // (c)Copyright 2000, Baptiste Lepilleur. // Created: @@(Date "yyyy/MM/dd")@@ // ////////////////////////////////////////////////////////////////////////// #include "StdAfx.h" #include "@@headerfn@@" !!Else // ////////////////////////////////////////////////////////////////////////// // Implementation of class @@classname@@ // ////////////////////////////////////////////////////////////////////////// !!Endif !!If @@isunittest@@ CPPUNIT_TEST_SUITE_REGISTRATION( @@classname@@ ); !!Endif !!If !@@inlinectordtor@@ !!If !@@defvalobject@@ @@classname@@::@@classname@@()@@\ !!If @@hasparentclass@@ : @@parentclassname@@() !!Else !!Endif { } !!Endif !!If @@valobject@@ @@classname@@::@@classname@@( const @@classname@@ © )@@\ !!If @@hasparentclass@@ : @@parentclassname@@( copy ) !!Else !!Endif { } !!Endif @@classname@@::~@@classname@@() { } !!If @@valobject@@ @@classname@@ & @@classname@@::operator =( const @@classname@@ © ) { return *this; } !!Endif !!Endif !!If @@isunittest@@ void @@classname@@::setUp() { } void @@classname@@::tearDown() { } !!Endif !!If @@createfile@@ !!FileSave !!ProjectFileAdd !!//ExecuteCommand FileOpen "@@headerpath@@" !!Endif !!End --------------------------------------------------------------------------------- --------------------------------------------------------------------------------- [-Dummy] !!Code !!End --------------------------------------------------------------------------------- ------------------------ [-MakeHeaderDefined] ------------------------------- --------------------------------------------------------------------------------- [-MakeHeaderDefined] !!Memo This template replace all occurences of '.' in the specified filename "fn" by '_'. This is typically used to make the #ifndef at the beginning of header files. Parameters: "fn" filename in which each occurence of '.' is replaced by '_'. Returns: Transformed filename. !!End !!Params fn TestDoIt !!End !!Code !!Set result @@fn@@ !!Label LoopMakeHeaderDefined !!Set fn @@result@@ !!// Check if there is any occurence left of '.' !!Set index @@(StrFind @@fn@@ ".")@@ !!If @@index@@ < 0 !!Goto EndMakeHeaderDefined !!Endif !!// Replace occurences of '.' in fb by '_' and set to result. !!Set result @@(StrSub @@fn@@ 0 @@index@@ )@@_ !!Add index 1 !!Set result @@result@@@@(StrSub @@fn@@ @@index@@)@@ !!Goto LoopMakeHeaderDefined !!Label EndMakeHeaderDefined !!Return @@result@@ !!End --------------------------------------------------------------------------------- ---------------------------- [-MakeFiller] ---------------------------------- --------------------------------------------------------------------------------- [-MakeFiller] !!Memo Make a string that contains "count" occurrence of "filler". Parameters: "filler" String that is repeated. "count" Number of times the "filler" is repeated. Returns: A string that contains "count" times the string "filler". !!End !!Params filler - count 10 !!End !!Code !!Set result !!Label LoopMakerFiller !!If @@count@@ > 0 !!Set result @@result@@@@filler@@ !!Sub count 1 !!Goto LoopMakerFiller !!Endif !!Return @@result@@ !!End