ENH: runTimeSelection with addRemovable

This commit is contained in:
Mark Olesen
2011-02-28 16:39:35 +01:00
parent 5c5b82f289
commit 344a4500cb
5 changed files with 145 additions and 34 deletions

View File

@ -2,7 +2,7 @@
========= | ========= |
\\ / F ield | OpenFOAM: The Open Source CFD Toolbox \\ / F ield | OpenFOAM: The Open Source CFD Toolbox
\\ / O peration | \\ / O peration |
\\ / A nd | Copyright (C) 2004-2010 OpenCFD Ltd. \\ / A nd | Copyright (C) 2004-2011 OpenCFD Ltd.
\\/ M anipulation | \\/ M anipulation |
------------------------------------------------------------------------------- -------------------------------------------------------------------------------
License License
@ -21,9 +21,6 @@ License
You should have received a copy of the GNU General Public License You should have received a copy of the GNU General Public License
along with OpenFOAM. If not, see <http://www.gnu.org/licenses/>. along with OpenFOAM. If not, see <http://www.gnu.org/licenses/>.
InClass
Foam::runTimeSelectionTables
Description Description
Macros for easy insertion into run-time selection tables Macros for easy insertion into run-time selection tables
@ -53,6 +50,26 @@ Description
add_##lookup##_##thisType##argNames##ConstructorTo##baseType##Table_ \ add_##lookup##_##thisType##argNames##ConstructorTo##baseType##Table_ \
(#lookup) (#lookup)
// add to hash-table of functions with typename as the key
#define addRemovableToRunTimeSelectionTable\
(baseType,thisType,argNames) \
\
/* Add the thisType constructor function to the table */ \
baseType::addRemovable##argNames##ConstructorToTable< thisType > \
addRemovable##thisType##argNames##ConstructorTo##baseType##Table_
// add to hash-table of functions with 'lookup' as the key
#define addRemovableNamedToRunTimeSelectionTable\
(baseType,thisType,argNames,lookup) \
\
/* Add the thisType constructor function to the table, find by lookup */ \
baseType::addRemovable##argNames##ConstructorToTable< thisType > \
addRemovable_##lookup##_##thisType##argNames##ConstructorTo \
##baseType##Table_(#lookup)
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //

View File

@ -2,7 +2,7 @@
========= | ========= |
\\ / F ield | OpenFOAM: The Open Source CFD Toolbox \\ / F ield | OpenFOAM: The Open Source CFD Toolbox
\\ / O peration | \\ / O peration |
\\ / A nd | Copyright (C) 2004-2010 OpenCFD Ltd. \\ / A nd | Copyright (C) 2004-2011 OpenCFD Ltd.
\\/ M anipulation | \\/ M anipulation |
------------------------------------------------------------------------------- -------------------------------------------------------------------------------
License License
@ -21,11 +21,8 @@ License
You should have received a copy of the GNU General Public License You should have received a copy of the GNU General Public License
along with OpenFOAM. If not, see <http://www.gnu.org/licenses/>. along with OpenFOAM. If not, see <http://www.gnu.org/licenses/>.
Class
Foam::runTimeSelectionTables
Description Description
Macros to enable the easy declaration of run-time selection tables. Macros to ease declaration of run-time selection tables.
declareRunTimeSelectionTable is used to create a run-time selection table declareRunTimeSelectionTable is used to create a run-time selection table
for a base-class which holds constructor pointers on the table. for a base-class which holds constructor pointers on the table.
@ -62,6 +59,12 @@ Description
/* Construct from argList function pointer table pointer */ \ /* Construct from argList function pointer table pointer */ \
static argNames##ConstructorTable* argNames##ConstructorTablePtr_; \ static argNames##ConstructorTable* argNames##ConstructorTablePtr_; \
\ \
/* Table constructor called from the table add function */ \
static void construct##argNames##ConstructorTables(); \
\
/* Table destructor called from the table add function destructor */ \
static void destroy##argNames##ConstructorTables(); \
\
/* Class to add constructor from argList to table */ \ /* Class to add constructor from argList to table */ \
template< class baseType##Type > \ template< class baseType##Type > \
class add##argNames##ConstructorToTable \ class add##argNames##ConstructorToTable \
@ -88,11 +91,41 @@ Description
} \ } \
}; \ }; \
\ \
/* Table constructor called from the table add function */ \ /* Class to add constructor from argList to table */ \
static void construct##argNames##ConstructorTables(); \ /* Remove only the entry (not the table) upon destruction */ \
template< class baseType##Type > \
class addRemovable##argNames##ConstructorToTable \
{ \
/* retain lookup name for later removal */ \
const word& lookup_; \
\ \
/* Table destructor called from the table add function destructor */ \ public: \
static void destroy##argNames##ConstructorTables() \
static autoPtr< baseType > New argList \
{ \
return autoPtr< baseType >(new baseType##Type parList); \
} \
\
addRemovable##argNames##ConstructorToTable \
( \
const word& lookup = baseType##Type::typeName \
) \
: \
lookup_(lookup) \
{ \
construct##argNames##ConstructorTables(); \
argNames##ConstructorTablePtr_->set(lookup, New); \
} \
\
~addRemovable##argNames##ConstructorToTable() \
{ \
if (argNames##ConstructorTablePtr_) \
{ \
argNames##ConstructorTablePtr_->erase(lookup_); \
} \
} \
};
// external use: // external use:
@ -111,6 +144,12 @@ Description
/* Construct from argList function pointer table pointer */ \ /* Construct from argList function pointer table pointer */ \
static argNames##ConstructorTable* argNames##ConstructorTablePtr_; \ static argNames##ConstructorTable* argNames##ConstructorTablePtr_; \
\ \
/* Table constructor called from the table add function */ \
static void construct##argNames##ConstructorTables(); \
\
/* Table destructor called from the table add function destructor */ \
static void destroy##argNames##ConstructorTables(); \
\
/* Class to add constructor from argList to table */ \ /* Class to add constructor from argList to table */ \
template< class baseType##Type > \ template< class baseType##Type > \
class add##argNames##ConstructorToTable \ class add##argNames##ConstructorToTable \
@ -141,11 +180,43 @@ Description
} \ } \
}; \ }; \
\ \
/* Table constructor called from the table add function */ \ /* Class to add constructor from argList to table */ \
static void construct##argNames##ConstructorTables(); \ template< class baseType##Type > \
class addRemovable##argNames##ConstructorToTable \
{ \
/* retain lookup name for later removal */ \
const word& lookup_; \
\ \
/* Table destructor called from the table add function destructor */ \ public: \
static void destroy##argNames##ConstructorTables() \
static autoPtr< baseType > New##baseType argList \
{ \
return autoPtr< baseType >(baseType##Type::New parList.ptr()); \
} \
\
addRemovable##argNames##ConstructorToTable \
( \
const word& lookup = baseType##Type::typeName \
) \
: \
lookup_(lookup) \
{ \
construct##argNames##ConstructorTables(); \
argNames##ConstructorTablePtr_->set \
( \
lookup, \
New##baseType \
); \
} \
\
~addRemovable##argNames##ConstructorToTable() \
{ \
if (argNames##ConstructorTablePtr_) \
{ \
argNames##ConstructorTablePtr_->erase(lookup_); \
} \
} \
};
// internal use: // internal use:
@ -157,13 +228,11 @@ Description
void baseType::construct##argNames##ConstructorTables() \ void baseType::construct##argNames##ConstructorTables() \
{ \ { \
static bool constructed = false; \ static bool constructed = false; \
\
if (!constructed) \ if (!constructed) \
{ \ { \
constructed = true; \
baseType::argNames##ConstructorTablePtr_ \ baseType::argNames##ConstructorTablePtr_ \
= new baseType::argNames##ConstructorTable; \ = new baseType::argNames##ConstructorTable; \
\
constructed = true; \
} \ } \
} }
@ -244,13 +313,11 @@ Description
void baseType< Targ >::construct##argNames##ConstructorTables() \ void baseType< Targ >::construct##argNames##ConstructorTables() \
{ \ { \
static bool constructed = false; \ static bool constructed = false; \
\
if (!constructed) \ if (!constructed) \
{ \ { \
constructed = true; \
baseType< Targ >::argNames##ConstructorTablePtr_ \ baseType< Targ >::argNames##ConstructorTablePtr_ \
= new baseType< Targ >::argNames##ConstructorTable; \ = new baseType< Targ >::argNames##ConstructorTable; \
\
constructed = true; \
} \ } \
} }

View File

@ -85,13 +85,14 @@ Description
} \ } \
} }
// internal use: // internal use:
// constructor/destructor aid // constructor/destructor aid
#define defineGlobalFunctionSelectionTableConstructDestruct\ #define defineGlobalFunctionSelectionTableConstructDestruct\
(memberFunction,argNames) \ (memberFunction,argNames) \
\ \
/* Table constructor called from the table add function */ \ /* Table constructor called from the table add function */ \
void construct##memberFunction##argNames##MemberFunctionTables()\ void construct##memberFunction##argNames##MemberFunctionTables() \
{ \ { \
static bool constructed = false; \ static bool constructed = false; \
if (!constructed) \ if (!constructed) \
@ -103,7 +104,7 @@ Description
} \ } \
\ \
/* Table destructor called from the table add function destructor */ \ /* Table destructor called from the table add function destructor */ \
void destroy##memberFunction##argNames##MemberFunctionTables()\ void destroy##memberFunction##argNames##MemberFunctionTables() \
{ \ { \
if (memberFunction##argNames##MemberFunctionTablePtr_) \ if (memberFunction##argNames##MemberFunctionTablePtr_) \
{ \ { \

View File

@ -2,7 +2,7 @@
========= | ========= |
\\ / F ield | OpenFOAM: The Open Source CFD Toolbox \\ / F ield | OpenFOAM: The Open Source CFD Toolbox
\\ / O peration | \\ / O peration |
\\ / A nd | Copyright (C) 2004-2010 OpenCFD Ltd. \\ / A nd | Copyright (C) 2004-2011 OpenCFD Ltd.
\\/ M anipulation | \\/ M anipulation |
------------------------------------------------------------------------------- -------------------------------------------------------------------------------
License License
@ -98,13 +98,11 @@ Description
void baseType::construct##memberFunction##argNames##MemberFunctionTables()\ void baseType::construct##memberFunction##argNames##MemberFunctionTables()\
{ \ { \
static bool constructed = false; \ static bool constructed = false; \
\
if (!constructed) \ if (!constructed) \
{ \ { \
constructed = true; \
baseType::memberFunction##argNames##MemberFunctionTablePtr_ \ baseType::memberFunction##argNames##MemberFunctionTablePtr_ \
= new baseType::memberFunction##argNames##MemberFunctionTable;\ = new baseType::memberFunction##argNames##MemberFunctionTable;\
\
constructed = true; \
} \ } \
} }
@ -191,14 +189,12 @@ Description
MemberFunctionTables() \ MemberFunctionTables() \
{ \ { \
static bool constructed = false; \ static bool constructed = false; \
\
if (!constructed) \ if (!constructed) \
{ \ { \
constructed = true; \
baseType<Targ>::memberFunction##argNames##MemberFunctionTablePtr_ \ baseType<Targ>::memberFunction##argNames##MemberFunctionTablePtr_ \
= new baseType<Targ>::memberFunction##argNames## \ = new baseType<Targ>::memberFunction##argNames## \
MemberFunctionTable; \ MemberFunctionTable; \
\
constructed = true; \
} \ } \
} }
@ -254,6 +250,7 @@ Description
defineTemplatedMemberFunctionSelectionTableDestructor \ defineTemplatedMemberFunctionSelectionTableDestructor \
(baseType,memberFunction,argNames,Targ) (baseType,memberFunction,argNames,Targ)
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
#endif #endif

View File

@ -2,7 +2,7 @@
========= | ========= |
\\ / F ield | OpenFOAM: The Open Source CFD Toolbox \\ / F ield | OpenFOAM: The Open Source CFD Toolbox
\\ / O peration | \\ / O peration |
\\ / A nd | Copyright (C) 2004-2010 OpenCFD Ltd. \\ / A nd | Copyright (C) 2004-2011 OpenCFD Ltd.
\\/ M anipulation | \\/ M anipulation |
------------------------------------------------------------------------------- -------------------------------------------------------------------------------
License License
@ -73,7 +73,7 @@ Ostream& operator<<(Ostream&, const fvPatchField<Type>&);
/*---------------------------------------------------------------------------*\ /*---------------------------------------------------------------------------*\
Class patch Declaration Class fvPatchField Declaration
\*---------------------------------------------------------------------------*/ \*---------------------------------------------------------------------------*/
template<class Type> template<class Type>
@ -516,11 +516,40 @@ public:
); );
// use with caution
#define addRemovableToPatchFieldRunTimeSelection\
(PatchTypeField, typePatchTypeField) \
\
addRemovableToRunTimeSelectionTable \
( \
PatchTypeField, \
typePatchTypeField, \
patch \
); \
addRemovableToRunTimeSelectionTable \
( \
PatchTypeField, \
typePatchTypeField, \
patchMapper \
); \
addRemovableToRunTimeSelectionTable \
( \
PatchTypeField, \
typePatchTypeField, \
dictionary \
);
// for non-templated patch fields // for non-templated patch fields
#define makePatchTypeField(PatchTypeField, typePatchTypeField) \ #define makePatchTypeField(PatchTypeField, typePatchTypeField) \
defineTypeNameAndDebug(typePatchTypeField, 0); \ defineTypeNameAndDebug(typePatchTypeField, 0); \
addToPatchFieldRunTimeSelection(PatchTypeField, typePatchTypeField) addToPatchFieldRunTimeSelection(PatchTypeField, typePatchTypeField)
// for non-templated patch fields - use with caution
#define makeRemovablePatchTypeField(PatchTypeField, typePatchTypeField) \
defineTypeNameAndDebug(typePatchTypeField, 0); \
addRemovableToPatchFieldRunTimeSelection(PatchTypeField, typePatchTypeField)
// for templated patch fields // for templated patch fields
#define makeTemplatePatchTypeField(PatchTypeField, typePatchTypeField) \ #define makeTemplatePatchTypeField(PatchTypeField, typePatchTypeField) \