Nektar++
|
Provides a generic Factory class. More...
#include <NekFactory.hpp>
Classes | |
struct | ModuleEntry |
Define a struct to hold the information about a module. More... | |
Public Types | |
typedef std::less< tKey > | tPredicator |
Comparison predicator of key. More... | |
typedef std::shared_ptr< tBase > | tBaseSharedPtr |
Shared pointer to an object of baseclass type. More... | |
typedef tBaseSharedPtr(* | CreatorFunction) (tParam...) |
CreatorFunction type which takes parameter and returns base class shared pointer. More... | |
typedef std::map< tKey, ModuleEntry, tPredicator > | TMapFactory |
Factory map between key and module data. More... | |
Public Member Functions | |
NekFactory ()=default | |
tBaseSharedPtr | CreateInstance (tKey idKey, tParam... args) |
Create an instance of the class referred to by idKey . More... | |
tKey | RegisterCreatorFunction (tKey idKey, CreatorFunction classCreator, std::string pDesc="") |
Register a class with the factory. More... | |
bool | ModuleExists (tKey idKey) |
Checks if a particular module is available. More... | |
void | PrintAvailableClasses (std::ostream &pOut=std::cout) |
Prints the available classes to stdout. More... | |
tKey | GetKey (std::string pDesc) |
Retrieves a key, given a description. More... | |
std::string | GetClassDescription (tKey idKey) |
Returns the description of a class. More... | |
Protected Member Functions | |
TMapFactory * | getMapFactory () |
Ensure the factory's map is created. More... | |
Private Member Functions | |
NekFactory (const NekFactory &rhs) | |
NekFactory & | operator= (const NekFactory &rhs) |
Private Attributes | |
TMapFactory | mMapFactory |
Provides a generic Factory class.
Implements a generic object factory. Class-types which use an arbitrary number of parameters may be used via C++ variadic templating.
To allow a class to be instantiated by the factory, the following are required in each class definition (in the case of a single parameter):
and outside the class definition in the implementation:
The assignment of the static variable className is done through the call to RegisterCreatorFunction, which registers the class with the factory prior to the start of the main() routine.
To create an instance of a derived class, for instance:
Definition at line 103 of file NekFactory.hpp.
typedef tBaseSharedPtr(* Nektar::LibUtilities::NekFactory< tKey, tBase, tParam >::CreatorFunction) (tParam...) |
CreatorFunction type which takes parameter and returns base class shared pointer.
Definition at line 112 of file NekFactory.hpp.
typedef std::shared_ptr<tBase> Nektar::LibUtilities::NekFactory< tKey, tBase, tParam >::tBaseSharedPtr |
Shared pointer to an object of baseclass type.
Definition at line 109 of file NekFactory.hpp.
typedef std::map<tKey, ModuleEntry, tPredicator> Nektar::LibUtilities::NekFactory< tKey, tBase, tParam >::TMapFactory |
Factory map between key and module data.
Definition at line 130 of file NekFactory.hpp.
typedef std::less<tKey> Nektar::LibUtilities::NekFactory< tKey, tBase, tParam >::tPredicator |
Comparison predicator of key.
Definition at line 107 of file NekFactory.hpp.
|
default |
|
private |
|
inline |
Create an instance of the class referred to by idKey
.
Searches the factory's map for the given key and returns a shared base class pointer to a new instance of the associated class.
idKey | Key of class to create. |
x | Parameter to pass to class constructor. |
Definition at line 144 of file NekFactory.hpp.
References Nektar::ErrorUtil::efatal, Nektar::LibUtilities::NekFactory< tKey, tBase, tParam >::getMapFactory(), Nektar::LibUtilities::NekFactory< tKey, tBase, tParam >::ModuleEntry::m_func, NEKERROR, and Nektar::LibUtilities::NekFactory< tKey, tBase, tParam >::PrintAvailableClasses().
Referenced by Nektar::NekMeshUtils::CADSystemOCE::AddCurve(), Nektar::NekMeshUtils::CADSystemCFI::AddCurve(), Nektar::NekMeshUtils::CADSystemOCE::AddSurf(), Nektar::NekMeshUtils::CADSystemCFI::AddSurf(), Nektar::NekMeshUtils::CADSystemOCE::AddVert(), Nektar::NekMeshUtils::CADSystemCFI::AddVert(), Nektar::SolverUtils::Advection3DHomogeneous1D::Advection3DHomogeneous1D(), Nektar::Utilities::ProcessVarOpti::Analytics(), Nektar::ArtificialDiffusion::ArtificialDiffusion(), Nektar::Utilities::ProcessBL::BoundaryLayer3D(), Nektar::NekMeshUtils::BLMesh::BuildElements(), Nektar::NekMeshUtils::FaceMesh::BuildLocalMesh(), Nektar::Collections::Collection::Collection(), Nektar::CompressibleSolver::CompressibleSolver(), Nektar::LibUtilities::SessionReader::CreateComm(), Nektar::LibUtilities::FieldIO::CreateDefault(), Nektar::LibUtilities::FieldIO::CreateForFile(), Nektar::Thread::ThreadMaster::CreateInstance(), Nektar::SolverUtils::FilterFieldConvert::CreateModules(), Nektar::MultiRegions::GlobalLinSys::CreatePrecon(), Nektar::LinearisedAdvection::DFT(), Nektar::NekMeshUtils::FaceMesh::DiagonalSwap(), Nektar::SolverUtils::Diffusion3DHomogeneous1D::Diffusion3DHomogeneous1D(), Nektar::VortexWaveInteraction::ExecuteRoll(), Nektar::VortexWaveInteraction::ExecuteStreak(), Nektar::VortexWaveInteraction::ExecuteWave(), Nektar::MultiRegions::ExpListHomogeneous1D::ExpListHomogeneous1D(), Nektar::MultiRegions::ExpListHomogeneous2D::ExpListHomogeneous2D(), Nektar::MultiRegions::ExpList::ExtractFileBCs(), Nektar::FieldUtils::Field::FieldIOForFile(), Nektar::Utilities::InputTec::GenElement2D(), Nektar::Utilities::InputStar::GenElement2D(), Nektar::Utilities::InputTec::GenElement3D(), Nektar::Utilities::InputStar::GenElement3D(), Nektar::MultiRegions::ExpList::GenGlobalBndLinSys(), Nektar::MultiRegions::ExpList::GenGlobalLinSys(), Nektar::LibUtilities::Import(), Nektar::CompressibleFlowSystem::InitAdvection(), Nektar::ForcingMovingBody::InitialiseCableModel(), Nektar::Utilities::InputSem::insertEdge(), Nektar::Utilities::ProcessLinear::Invalid(), Nektar::GlobalMapping::Mapping::Load(), main(), Nektar::NekMeshUtils::Generator2D::MakeBL(), Nektar::NekMeshUtils::TetMesh::Mesh(), Nektar::FieldUtils::OutputFld::OutputFromData(), Nektar::FieldUtils::OutputFld::OutputFromExp(), Nektar::SpatialDomains::MeshGraphHDF5::PartitionMesh(), Nektar::SpatialDomains::MeshGraphXml::PartitionMesh(), Nektar::Utilities::InputMCF::Process(), Nektar::Utilities::InputNekpp::Process(), Nektar::Utilities::InputSem::Process(), Nektar::NekMeshUtils::ProcessLoadCAD::Process(), Nektar::Utilities::InputNek5000::Process(), Nektar::NekMeshUtils::VolumeMesh::Process(), Nektar::Utilities::ProcessOptiExtract::Process(), Nektar::FieldUtils::OutputInfo::Process(), Nektar::Utilities::OutputNekpp::Process(), Nektar::Utilities::ProcessExtrude::Process(), Nektar::Utilities::InputSwan::Process(), Nektar::Utilities::InputVtk::Process(), Nektar::Utilities::ProcessSpherigon::Process(), Nektar::Utilities::ProcessLinear::Process(), Nektar::NekMeshUtils::CFIMesh::Process(), Nektar::Utilities::InputNek::Process(), Nektar::FieldUtils::ProcessPointDataToFld::Process(), Nektar::Utilities::ProcessTetSplit::Process(), Nektar::Utilities::ProcessDetectSurf::Process(), Nektar::Utilities::ProcessExtractSurf::Process(), Nektar::Utilities::ProcessInsertSurface::Process(), Nektar::Utilities::ProcessExtractTetPrismInterface::Process(), Nektar::NekMeshUtils::Generator2D::Process(), Nektar::Utilities::ProcessProjectCAD::Process(), Nektar::SpatialDomains::MeshGraph::Read(), Nektar::SpatialDomains::MeshPartition::ReadExpansions(), Nektar::Utilities::InputGmsh::ReadNextElement(), Nektar::Utilities::InputPly::ReadPly(), Nektar::NekMeshUtils::Module::ReorderPrisms(), Nektar::PulseWavePropagation::SetPulseWaveBoundaryConditions(), Nektar::VelocityCorrectionScheme::SetUpExtrapolation(), Nektar::VelocityCorrectionScheme::SetupFlowrate(), Nektar::UnsteadyAdvectionDiffusion::SetUpSubSteppingTimeIntegration(), Nektar::Stimulus::Stimulus(), Nektar::Utilities::ProcessCurve::v_GenerateEdgeNodes(), Nektar::APE::v_InitObject(), Nektar::VCSMapping::v_InitObject(), Nektar::LinearSWE::v_InitObject(), Nektar::NonlinearSWE::v_InitObject(), Nektar::BidomainRoth::v_InitObject(), Nektar::LEE::v_InitObject(), Nektar::Bidomain::v_InitObject(), Nektar::Monodomain::v_InitObject(), Nektar::MultiRegions::PreconditionerLinearWithLowEnergy::v_InitObject(), Nektar::MultiRegions::PreconditionerLinearWithBlock::v_InitObject(), Nektar::EigenValuesAdvection::v_InitObject(), Nektar::MultiRegions::PreconditionerLinearWithDiag::v_InitObject(), Nektar::NavierStokesCFE::v_InitObject(), Nektar::DiffusionLDGNS::v_InitObject(), Nektar::ImageWarpingSystem::v_InitObject(), Nektar::NonlinearPeregrine::v_InitObject(), Nektar::PulseWavePropagation::v_InitObject(), Nektar::UnsteadyInviscidBurger::v_InitObject(), Nektar::UnsteadyAdvection::v_InitObject(), Nektar::SolverUtils::Driver::v_InitObject(), Nektar::CFLtester::v_InitObject(), Nektar::CompressibleFlowSystem::v_InitObject(), Nektar::IncNavierStokes::v_InitObject(), Nektar::MMFAdvection::v_InitObject(), Nektar::CoupledLinearNS::v_InitObject(), Nektar::SubSteppingExtrapolate::v_SubSteppingTimeIntegration(), Nektar::VariableConverter::VariableConverter(), Nektar::VortexWaveInteraction::VortexWaveInteraction(), Nektar::LibUtilities::Write(), Nektar::FieldUtils::OutputFileBase::WriteFile(), and Nektar::NekMeshUtils::Octree::WriteOctree().
|
inline |
Returns the description of a class.
Definition at line 282 of file NekFactory.hpp.
References ASSERTL0, and Nektar::LibUtilities::NekFactory< tKey, tBase, tParam >::getMapFactory().
|
inline |
Retrieves a key, given a description.
Definition at line 261 of file NekFactory.hpp.
References ASSERTL0, and Nektar::LibUtilities::NekFactory< tKey, tBase, tParam >::getMapFactory().
|
inlineprotected |
Ensure the factory's map is created.
Definition at line 302 of file NekFactory.hpp.
References Nektar::LibUtilities::NekFactory< tKey, tBase, tParam >::mMapFactory, Nektar::LibUtilities::NekFactory< tKey, tBase, tParam >::NekFactory(), Nektar::LibUtilities::NekFactory< tKey, tBase, tParam >::operator=(), and Nektar::rhs.
Referenced by Nektar::LibUtilities::NekFactory< tKey, tBase, tParam >::CreateInstance(), Nektar::LibUtilities::NekFactory< tKey, tBase, tParam >::GetClassDescription(), Nektar::LibUtilities::NekFactory< tKey, tBase, tParam >::GetKey(), Nektar::LibUtilities::NekFactory< tKey, tBase, tParam >::ModuleExists(), Nektar::LibUtilities::NekFactory< tKey, tBase, tParam >::PrintAvailableClasses(), and Nektar::LibUtilities::NekFactory< tKey, tBase, tParam >::RegisterCreatorFunction().
|
inline |
Checks if a particular module is available.
Definition at line 215 of file NekFactory.hpp.
References Nektar::LibUtilities::NekFactory< tKey, tBase, tParam >::getMapFactory().
Referenced by Nektar::LibUtilities::SessionReader::CreateComm(), main(), and Nektar::SpatialDomains::MeshGraphHDF5::PartitionMesh().
|
private |
|
inline |
Prints the available classes to stdout.
Definition at line 235 of file NekFactory.hpp.
References Nektar::LibUtilities::NekFactory< tKey, tBase, tParam >::getMapFactory().
Referenced by Nektar::LibUtilities::NekFactory< tKey, tBase, tParam >::CreateInstance(), and main().
|
inline |
Register a class with the factory.
This function is called by each class in a static context (prior to the execution of main()) and creates an entry for the class in the factory's map.
idKey | Key used to reference the class. |
classCreator | Function to call to create an instance of this class. |
pDesc | Optional description of class. |
idKey
. Definition at line 199 of file NekFactory.hpp.
References Nektar::LibUtilities::NekFactory< tKey, tBase, tParam >::getMapFactory().
Referenced by Nektar::Collections::BwdTrans_IterPerExp::BwdTrans_IterPerExp(), Nektar::Collections::BwdTrans_NoCollection::BwdTrans_NoCollection(), Nektar::Collections::BwdTrans_StdMat::BwdTrans_StdMat(), Nektar::Utilities::NodeOpti::CalcMinJac(), Nektar::LibUtilities::H5::DataTypeTraits< T >::GetType(), Nektar::Collections::IProductWRTBase_IterPerExp::IProductWRTBase_IterPerExp(), Nektar::Collections::IProductWRTBase_NoCollection::IProductWRTBase_NoCollection(), Nektar::Collections::IProductWRTBase_StdMat::IProductWRTBase_StdMat(), Nektar::Collections::IProductWRTDerivBase_IterPerExp::IProductWRTDerivBase_IterPerExp(), Nektar::Collections::IProductWRTDerivBase_NoCollection::IProductWRTDerivBase_NoCollection(), Nektar::Collections::IProductWRTDerivBase_StdMat::IProductWRTDerivBase_StdMat(), Nektar::Collections::IProductWRTDerivBase_SumFac_Quad::IProductWRTDerivBase_SumFac_Quad(), Nektar::Collections::IProductWRTDerivBase_SumFac_Tri::IProductWRTDerivBase_SumFac_Tri(), Nektar::Utilities::NodeOpti1D3D::Optimise(), Nektar::Utilities::NodeOpti2D2D::Optimise(), Nektar::Collections::PhysDeriv_IterPerExp::PhysDeriv_IterPerExp(), Nektar::Collections::PhysDeriv_NoCollection::PhysDeriv_NoCollection(), Nektar::Collections::PhysDeriv_StdMat::PhysDeriv_StdMat(), Nektar::Collections::PhysDeriv_SumFac_Hex::PhysDeriv_SumFac_Hex(), Nektar::Collections::PhysDeriv_SumFac_Prism::PhysDeriv_SumFac_Prism(), Nektar::Collections::PhysDeriv_SumFac_Pyr::PhysDeriv_SumFac_Pyr(), Nektar::Collections::PhysDeriv_SumFac_Tet::PhysDeriv_SumFac_Tet(), Nektar::Collections::PhysDeriv_SumFac_Tri::PhysDeriv_SumFac_Tri(), Nektar::MultiRegions::PreconditionerDiagonal::v_DoPreconditioner(), Nektar::LibUtilities::TimeIntegrationWrapper::v_InitObject(), Nektar::LibUtilities::TimeIntegrationIMEXOrder1::v_InitObject(), Nektar::LibUtilities::TimeIntegrationIMEXOrder2::v_InitObject(), Nektar::LibUtilities::TimeIntegrationIMEXOrder3::v_InitObject(), Nektar::LibUtilities::TimeIntegrationIMEXOrder4::v_InitObject(), Nektar::LibUtilities::TimeIntegrationIMEXdirk_1_1_1::v_InitObject(), Nektar::LibUtilities::TimeIntegrationIMEXdirk_1_2_1::v_InitObject(), Nektar::LibUtilities::TimeIntegrationIMEXdirk_1_2_2::v_InitObject(), Nektar::LibUtilities::TimeIntegrationIMEXdirk_4_4_3::v_InitObject(), Nektar::LibUtilities::TimeIntegrationIMEXdirk_2_2_2::v_InitObject(), Nektar::LibUtilities::TimeIntegrationIMEXdirk_2_3_3::v_InitObject(), Nektar::LibUtilities::TimeIntegrationIMEXdirk_2_3_2::v_InitObject(), Nektar::LibUtilities::TimeIntegrationIMEXdirk_3_4_3::v_InitObject(), Nektar::LibUtilities::TimeIntegrationForwardEuler::v_InitObject(), Nektar::LibUtilities::TimeIntegrationBackwardEuler::v_InitObject(), Nektar::LibUtilities::TimeIntegrationBDFImplicitOrder1::v_InitObject(), Nektar::LibUtilities::TimeIntegrationBDFImplicitOrder2::v_InitObject(), Nektar::LibUtilities::TimeIntegrationMidpoint::v_InitObject(), Nektar::LibUtilities::TimeIntegrationRungeKutta2::v_InitObject(), Nektar::LibUtilities::TimeIntegrationRungeKutta2_ImprovedEuler::v_InitObject(), Nektar::LibUtilities::TimeIntegrationRungeKutta2_SSP::v_InitObject(), Nektar::LibUtilities::TimeIntegrationRungeKutta3_SSP::v_InitObject(), Nektar::LibUtilities::TimeIntegrationClassicalRungeKutta4::v_InitObject(), Nektar::LibUtilities::TimeIntegrationRungeKutta4::v_InitObject(), Nektar::LibUtilities::TimeIntegrationRungeKutta5::v_InitObject(), Nektar::LibUtilities::TimeIntegrationDIRKOrder2::v_InitObject(), Nektar::LibUtilities::TimeIntegrationDIRKOrder3::v_InitObject(), Nektar::LibUtilities::TimeIntegrationAdamsBashforthOrder2::v_InitObject(), Nektar::LibUtilities::TimeIntegrationAdamsBashforthOrder3::v_InitObject(), Nektar::LibUtilities::TimeIntegrationAdamsBashforthOrder4::v_InitObject(), Nektar::LibUtilities::TimeIntegrationAdamsMoultonOrder2::v_InitObject(), Nektar::LibUtilities::TimeIntegrationIMEXGear::v_InitObject(), and Nektar::LibUtilities::TimeIntegrationCNAB::v_InitObject().
|
private |
Definition at line 311 of file NekFactory.hpp.
Referenced by Nektar::LibUtilities::NekFactory< tKey, tBase, tParam >::getMapFactory().