mirror of
https://develop.openfoam.com/Development/openfoam.git
synced 2025-11-28 03:28:01 +00:00
ENH: runTimeSelection with addRemovable
This commit is contained in:
@ -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)
|
||||||
|
|
||||||
|
|
||||||
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
|
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@ -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; \
|
|
||||||
} \
|
} \
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@ -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_) \
|
||||||
{ \
|
{ \
|
||||||
|
|||||||
@ -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
|
||||||
|
|||||||
@ -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) \
|
||||||
|
|||||||
Reference in New Issue
Block a user