ug4
ug::bridge::Registry Class Reference

Registry for functions and classes that are exported to scripts and visualizations. More...

#include <registry.h>

Public Member Functions

template<typename TFunc >
ExportedFunctionadd_and_get_function (std::string funcName, TFunc func, std::string group="", std::string retValInfos="", std::string paramInfos="", std::string tooltip="", std::string help="")
 Similar to add_function but returns the added function instead of the registry. More...
 
void add_callback (FuncRegistryChanged callback)
 adds a callback which is triggered whenever Registry::registry_changed is called. More...
 
template<typename TClass >
ExportedClass< TClass > & add_class_ (std::string className, std::string group="", std::string tooltip="")
 Register a class at this registry. More...
 
template<typename TClass , typename TBaseClass >
ExportedClass< TClass > & add_class_ (std::string className, std::string group="", std::string tooltip="")
 Register a class at this registry together with its base class. More...
 
template<typename TClass , typename TBaseClass1 , typename TBaseClass2 >
ExportedClass< TClass > & add_class_ (std::string className, std::string group="", std::string tooltip="")
 Register a class at this registry together with two base classes. More...
 
void add_class_to_group (std::string className, std::string groupName, std::string classTag="")
 adds the given class to the given group. More...
 
template<typename TFunc >
Registryadd_function (std::string funcName, TFunc func, std::string group="", std::string retValInfos="", std::string paramInfos="", std::string tooltip="", std::string help="")
 adds a function to the registry More...
 
bool check_consistency ()
 returns true if everything well-declared, else false More...
 
bool classname_registered (const std::string &name)
 returns true if classname is already used by a class in this registry More...
 
bool functionname_registered (const std::string &name)
 returns true if functionname is already used by a function in this registry More...
 
IExportedClassget_class (const std::string &name)
 returns an exported class More...
 
const IExportedClassget_class (const std::string &name) const
 returns an exported class More...
 
const IExportedClassget_class (size_t ind) const
 returns an exported class More...
 
template<typename TClass >
ExportedClass< TClass > & get_class_ ()
 Get Reference to already registered class. More...
 
ClassGroupDescget_class_group (const std::string &name)
 Returns the class-group with the given name. More...
 
const ClassGroupDescget_class_group (const std::string &name) const
 Returns the class-group with the given name. More...
 
ClassGroupDescget_class_group (size_t i)
 returns a pointer to the i-th class group More...
 
const ClassGroupDescget_class_group (size_t i) const
 returns a const pointer to the i-th class group More...
 
ExportedFunctionGroupget_exported_function_group (const std::string &name)
 returns an exported function group by name More...
 
ExportedFunctionget_function (size_t ind)
 returns the first overload of an exported function More...
 
const ExportedFunctionget_function (size_t ind) const
 
ExportedFunctionGroupget_function_group (size_t ind)
 returns a group which contains all overloads of a function More...
 
ExportedFunctionget_overload (size_t funcInd, size_t oInd)
 returns the i-th overload of a function More...
 
bool groupname_registered (const std::string &name)
 returns true if groupname is already used by a class in this registry More...
 
size_t num_class_groups () const
 returns the number of available class groups More...
 
size_t num_classes () const
 number of classes registered at the Registry More...
 
size_t num_functions () const
 number of functions registered at the Registry (overloads are not counted) More...
 
size_t num_overloads (size_t ind) const
 returns the number of overloads of a function More...
 
 Registry ()
 constructor More...
 
bool registry_changed ()
 call this method if to forward changes of the registry to its listeners More...
 
void set_force_construct_via_smart_pointer (bool bForceConstructionWithSmartPtr)
 requires every constructable class to be constructed via Smart-Pointer More...
 
 ~Registry ()
 destructor More...
 

Protected Member Functions

template<typename TClass , typename TBaseClass >
void check_base_class (const std::string &className)
 performs some checks, throws error if something wrong More...
 

Private Member Functions

 Registry (const Registry &reg)
 

Private Attributes

bool m_bForceConstructionWithSmartPtr
 flag if classes must be constructed via smart-pointer More...
 
std::vector< FuncRegistryChangedm_callbacksRegChanged
 Callback, that are called when registry changed is invoked. More...
 
std::vector< IExportedClass * > m_vClass
 registered classes More...
 
std::vector< ClassGroupDesc * > m_vClassGroups
 registered class groups More...
 
std::vector< ExportedFunctionGroup * > m_vFunction
 registered functions More...
 

Detailed Description

Registry for functions and classes that are exported to scripts and visualizations.

It also allows to register callbacks that are called if the registry changes.

Please note that once a class or method is registered at the registry, it can not be removed (This is important for the implementation of callbacks).

Please note, that some of the methods take std::string by copy instead of using const std::string&. This is on purpose in order to allow a call of the method using a const char* as well.

See also
ug4-Registry

Constructor & Destructor Documentation

◆ Registry() [1/2]

ug::bridge::Registry::Registry ( )

constructor

◆ ~Registry()

ug::bridge::Registry::~Registry ( )

destructor

References m_vClass, m_vClassGroups, and m_vFunction.

◆ Registry() [2/2]

ug::bridge::Registry::Registry ( const Registry reg)
private

Member Function Documentation

◆ add_and_get_function()

template<class TFunc >
ExportedFunction * ug::bridge::Registry::add_and_get_function ( std::string  funcName,
TFunc  func,
std::string  group = "",
std::string  retValInfos = "",
std::string  paramInfos = "",
std::string  tooltip = "",
std::string  help = "" 
)

◆ add_callback()

void ug::bridge::Registry::add_callback ( FuncRegistryChanged  callback)

adds a callback which is triggered whenever Registry::registry_changed is called.

References m_callbacksRegChanged.

Referenced by ug::script::GetDefaultLuaState().

◆ add_class_() [1/3]

template<typename TClass >
ExportedClass< TClass > & ug::bridge::Registry::add_class_ ( std::string  className,
std::string  group = "",
std::string  tooltip = "" 
)

Register a class at this registry.

Parameters
classNamename of the class to appear in the registry
groupregistry group. use / for subgroups e.g. ug4/mygroup/mysubgroup (optional)
toolTipdescribing text for the class (optional)

References classname_registered(), ug::GetRegistryIdentifierMessage(), groupname_registered(), ug::IsValidRegistryIdentifier(), m_vClass, and UG_THROW_REGISTRY_ERROR.

Referenced by ug::bridge::AlgebraCommon::Functionality::Algebra(), ug::bridge::Eigensolver::Functionality::Algebra(), ug::bridge::Preconditioner::Functionality::Algebra(), ug::bridge::Ordering::Functionality::Algebra(), ug::bridge::Schur::Functionality::Algebra(), ug::bridge::Solver::Functionality::Algebra(), ug::bridge::DomainDisc::Functionality::Algebra(), ug::bridge::DiscAlgebra::Functionality::Algebra(), ug::bridge::LuaUserData::Functionality::Common(), ug::bridge::AlgebraCommon::Functionality::Common(), ug::bridge::GridFunction::Functionality::Common(), ug::bridge::UserDataBridge::Functionality::Common(), ug::bridge::Domain::Functionality::Common(), ug::bridge::LoadBalancing::Functionality::Common(), ug::bridge::periodicBoundary::Functionality::Common(), ug::bridge::domain_ray_tracing::Functionality::Common(), ug::bridge::DiscAlgebra::Functionality::Common(), ug::bridge::LuaUserData::Functionality::Dimension(), ug::bridge::Output::Functionality::Dimension(), ug::bridge::UserDataBridge::Functionality::Dimension(), ug::bridge::AdaptiveTools::Functionality::Domain(), ug::bridge::DomainDisc::Functionality::Domain(), ug::bridge::ElemDiscs::Functionality::Domain(), ug::bridge::GridFunction::Functionality::Domain(), ug::bridge::UserDataBridge::Functionality::Domain(), ug::bridge::Domain::Functionality::Domain(), ug::bridge::LoadBalancing::Functionality::Domain(), ug::bridge::domain_ray_tracing::Functionality::Domain(), ug::bridge::CLI_Functionality::DomainAlgebra(), ug::bridge::Obstacle::Functionality::DomainAlgebra(), ug::bridge::Constraints::Functionality::DomainAlgebra(), ug::bridge::Preconditioner::Functionality::DomainAlgebra(), ug::bridge::DomainDisc::Functionality::DomainAlgebra(), ug::bridge::Evaluate::Functionality::DomainAlgebra(), ug::bridge::GridFunction::Functionality::DomainAlgebra(), ug::bridge::MultiGrid::Functionality::DomainAlgebra(), ug::bridge::Ordering::Functionality::DomainAlgebra(), ug::bridge::Output::Functionality::DomainAlgebra(), ug::bridge::DiscAlgebra::Functionality::DomainAlgebra(), ug::vrl::registerBasicTest(), ug::bridge::Preconditioner::Functionality::RegisterBlockGaussSeidel(), ug::bridge::Preconditioner::Functionality::RegisterBlockGaussSeidelIterative(), ug::bridge::RegisterBridge_DiscCommon(), ug::bridge::RegisterBridge_Misc(), ug::bridge::RegisterBridge_Profiler(), ug::bridge::RegisterBridge_Test(), ug::bridge::RegisterBridge_Util(), ug::bridge::LoadBalancing::RegisterClusterElementStacks(), ug::bridge::RegisterDegeneratedLayerManager(), ug::bridge::LoadBalancing::RegisterDynamicBisectionPartitioner(), ug::bridge::RegisterGeometry(), ug::bridge::RegisterGridBridge_Balancing(), ug::bridge::RegisterGridBridge_FileIO(), ug::bridge::RegisterGridBridge_Grid(), ug::bridge::RegisterGridBridge_Layers(), ug::bridge::RegisterGridBridge_Refinement(), ug::bridge::RegisterGridBridge_Selector(), ug::bridge::RegisterGridBridge_SubsetHandler(), ug::bridge::LuaUserData::RegisterLuaUserDataType(), ug::vrl::registerNumberArray(), ug::vrl::registerPlayground(), ug::bridge::RegisterRaster(), ug::bridge::RegisterRasterUserData(), ug::bridge::LoadBalancing::RegisterSmoothPartitionBounds(), ug::bridge::RegisterStandardBridges(), ug::vrl::RegisterUserData(), ug::vrl::RegisterUserDataType(), ug::bridge::RegisterUserDataTypeA(), ug::bridge::RegisterUserDataTypeB(), ug::bridge::RegisterVecMathBridge_DimIndep(), and ug::vrl::RegisterVRLFunctionality().

◆ add_class_() [2/3]

template<typename TClass , typename TBaseClass >
ExportedClass< TClass > & ug::bridge::Registry::add_class_ ( std::string  className,
std::string  group = "",
std::string  tooltip = "" 
)

Register a class at this registry together with its base class.

Parameters
classNamename of the class to appear in the registry
groupregistry group. use / for subgroups e.g. ug4/mygroup/mysubgroup (optional)
toolTipdescribing text for the class (optional)

References classname_registered(), ug::GetRegistryIdentifierMessage(), groupname_registered(), ug::IsValidRegistryIdentifier(), m_vClass, and UG_THROW_REGISTRY_ERROR.

◆ add_class_() [3/3]

template<typename TClass , typename TBaseClass1 , typename TBaseClass2 >
ExportedClass< TClass > & ug::bridge::Registry::add_class_ ( std::string  className,
std::string  group = "",
std::string  tooltip = "" 
)

Register a class at this registry together with two base classes.

Parameters
classNamename of the class to appear in the registry
groupregistry group. use / for subgroups e.g. ug4/mygroup/mysubgroup (optional)
toolTipdescribing text for the class (optional)

References classname_registered(), ug::GetRegistryIdentifierMessage(), groupname_registered(), ug::IsValidRegistryIdentifier(), m_vClass, and UG_THROW_REGISTRY_ERROR.

◆ add_class_to_group()

void ug::bridge::Registry::add_class_to_group ( std::string  className,
std::string  groupName,
std::string  classTag = "" 
)

adds the given class to the given group.

Groups are constructed automatically if required. This method is just for convenience. It is effectively the same as: get_class_group(groupName).add_class(reg.get_class(className), classTag).

References ug::bridge::ClassGroupDesc::add_class(), classname_registered(), get_class(), get_class_group(), and UG_THROW_REGISTRY_ERROR.

Referenced by ug::bridge::AlgebraCommon::Functionality::Algebra(), ug::bridge::Eigensolver::Functionality::Algebra(), ug::bridge::Preconditioner::Functionality::Algebra(), ug::bridge::Ordering::Functionality::Algebra(), ug::bridge::Schur::Functionality::Algebra(), ug::bridge::Solver::Functionality::Algebra(), ug::bridge::DomainDisc::Functionality::Algebra(), ug::bridge::DiscAlgebra::Functionality::Algebra(), ug::bridge::AlgebraCommon::Functionality::Common(), ug::bridge::LuaUserData::Functionality::Dimension(), ug::bridge::Output::Functionality::Dimension(), ug::bridge::UserDataBridge::Functionality::Dimension(), ug::bridge::AdaptiveTools::Functionality::Domain(), ug::bridge::DomainDisc::Functionality::Domain(), ug::bridge::ElemDiscs::Functionality::Domain(), ug::bridge::GridFunction::Functionality::Domain(), ug::bridge::UserDataBridge::Functionality::Domain(), ug::bridge::Domain::Functionality::Domain(), ug::bridge::LoadBalancing::Functionality::Domain(), ug::bridge::domain_ray_tracing::Functionality::Domain(), ug::bridge::CLI_Functionality::DomainAlgebra(), ug::bridge::Obstacle::Functionality::DomainAlgebra(), ug::bridge::Constraints::Functionality::DomainAlgebra(), ug::bridge::Preconditioner::Functionality::DomainAlgebra(), ug::bridge::DomainDisc::Functionality::DomainAlgebra(), ug::bridge::Evaluate::Functionality::DomainAlgebra(), ug::bridge::GridFunction::Functionality::DomainAlgebra(), ug::bridge::MultiGrid::Functionality::DomainAlgebra(), ug::bridge::Ordering::Functionality::DomainAlgebra(), ug::bridge::Output::Functionality::DomainAlgebra(), ug::bridge::DiscAlgebra::Functionality::DomainAlgebra(), ug::bridge::Preconditioner::Functionality::RegisterBlockGaussSeidel(), ug::bridge::Preconditioner::Functionality::RegisterBlockGaussSeidelIterative(), ug::bridge::LoadBalancing::RegisterClusterElementStacks(), ug::bridge::RegisterDegeneratedLayerManager(), ug::bridge::LoadBalancing::RegisterDynamicBisectionPartitioner(), ug::bridge::RegisterGeometry(), ug::bridge::RegisterGridBridge_Refinement(), ug::bridge::LuaUserData::RegisterLuaUserDataType(), ug::bridge::RegisterRaster(), ug::bridge::RegisterRasterUserData(), ug::bridge::LoadBalancing::RegisterSmoothPartitionBounds(), ug::vrl::RegisterUserData(), ug::vrl::RegisterUserDataType(), ug::bridge::RegisterUserDataTypeA(), ug::bridge::RegisterUserDataTypeB(), and ug::bridge::RegisterVecMathBridge_DimIndep().

◆ add_function()

template<class TFunc >
Registry & ug::bridge::Registry::add_function ( std::string  funcName,
TFunc  func,
std::string  group = "",
std::string  retValInfos = "",
std::string  paramInfos = "",
std::string  tooltip = "",
std::string  help = "" 
)

adds a function to the registry

Parameters
funcNamethe name of the function
funcfunction pointer of the function
groupregistry group. use / for subgroups e.g. ug4/mygroup/mysubgroup (optional)
retValInfosstring documenting what the function returns (optional)
paramInfosstring documenting the parameters of the function seperate parameters with an # e.g. "x#y#z" (don't specify the type of the values) (optional)
toolTipsmall documentation for the function (optional)
helphelp string for the function
See also
ug4-Registry
How to specify additional information

References the template function proxy_function<TFunc> and stores it with the FuntionWrapper.

References add_and_get_function(), and func().

Referenced by ug::bridge::AlgebraCommon::Functionality::Algebra(), ug::bridge::Restart::Functionality::Algebra(), ug::bridge::Functionality::Algebra(), ug::bridge::DiscAlgebra::Functionality::Algebra(), ug::vrl::Functionality::Algebra(), ug::bridge::Output::Functionality::Common(), ug::bridge::periodicBoundary::Functionality::Common(), ug::bridge::Refinement::Functionality::Common(), ug::bridge::Selection::Functionality::Common(), ug::bridge::Output::Functionality::Dimension(), ug::bridge::AdaptiveTools::Functionality::Domain(), ug::bridge::Evaluate::Functionality::Domain(), ug::bridge::Ordering::Functionality::Domain(), ug::bridge::Domain::Functionality::Domain(), ug::bridge::Domain::Functionality2d3d::Domain(), ug::bridge::LoadBalancing::Functionality::Domain(), ug::bridge::periodicBoundary::Functionality::Domain(), ug::bridge::Refinement::Functionality::Domain(), ug::bridge::Selection::Functionality::Domain(), ug::bridge::Transform::Functionality::Domain(), ug::bridge::AdaptiveTools::Functionality::DomainAlgebra(), ug::bridge::Evaluate::Functionality::DomainAlgebra(), ug::bridge::GridFunction::Functionality::DomainAlgebra(), ug::bridge::Integrate::Functionality::DomainAlgebra(), ug::bridge::Interpolate::Functionality::DomainAlgebra(), ug::bridge::MaxError::Functionality::DomainAlgebra(), ug::bridge::Output::Functionality::DomainAlgebra(), ug::bridge::FiniteVolume::Functionality::DomainFVGeom(), ug::bridge::PostRegisterTest(), ug::vrl::registerBasicTest(), ug::bridge::RegisterBridge_Integrate(), ug::bridge::RegisterBridge_Misc(), ug::bridge::RegisterBridge_OrthoPoly(), ug::bridge::RegisterBridge_PCL(), ug::bridge::RegisterBridge_Profiler(), ug::bridge::RegisterBridge_ReferenceMappingTest(), ug::bridge::RegisterBridge_Test(), ug::bridge::RegisterBridge_Util(), ug::bridge::RegisterConverter(), ug::script::RegisterDefaultLuaBridge(), ug::bridge::RegisterGridBridge_Debug(), ug::bridge::RegisterGridBridge_FileIO(), ug::bridge::RegisterGridBridge_Grid(), ug::bridge::RegisterGridBridge_Layers(), ug::bridge::RegisterGridBridge_Misc(), ug::bridge::RegisterGridBridge_Refinement(), ug::bridge::RegisterGridBridge_SubsetHandler(), ug::bridge::RegisterInfoCommands(), ug::script::RegisterLuaDebug(), ug::vrl::registerMessaging(), ug::vrl::registerPlayground(), ug::bridge::RegisterSerializationCommands(), ug::bridge::RegisterStandardBridges(), ug::vrl::registerThrowUtil(), ug::vrl::registerUGFinalize(), ug::bridge::RegisterUserDataTypeA(), and ug::bridge::RegisterVecMathBridge_DimIndep().

◆ check_base_class()

template<typename TClass , typename TBaseClass >
void ug::bridge::Registry::check_base_class ( const std::string &  className)
protected

performs some checks, throws error if something wrong

References classname_registered(), and UG_THROW_REGISTRY_ERROR.

◆ check_consistency()

◆ classname_registered()

bool ug::bridge::Registry::classname_registered ( const std::string &  name)

returns true if classname is already used by a class in this registry

References get_class(), and name.

Referenced by add_class_(), add_class_to_group(), and check_base_class().

◆ functionname_registered()

bool ug::bridge::Registry::functionname_registered ( const std::string &  name)

returns true if functionname is already used by a function in this registry

References m_vFunction, and name.

Referenced by ug::script::RegisterDefaultLuaBridge().

◆ get_class() [1/3]

IExportedClass * ug::bridge::Registry::get_class ( const std::string &  name)

returns an exported class

References m_vClass, and name.

◆ get_class() [2/3]

const IExportedClass * ug::bridge::Registry::get_class ( const std::string &  name) const

returns an exported class

References m_vClass, and name.

◆ get_class() [3/3]

◆ get_class_()

template<typename TClass >
ExportedClass< TClass > & ug::bridge::Registry::get_class_

◆ get_class_group() [1/4]

ClassGroupDesc * ug::bridge::Registry::get_class_group ( const std::string &  name)

Returns the class-group with the given name.

If no such group exists at the time of calling, it will be created.

References ug::GetRegistryIdentifierMessage(), ug::IsValidRegistryIdentifier(), m_vClassGroups, name, ug::bridge::ClassGroupDesc::set_name(), and UG_THROW_REGISTRY_ERROR.

◆ get_class_group() [2/4]

const ClassGroupDesc * ug::bridge::Registry::get_class_group ( const std::string &  name) const

Returns the class-group with the given name.

If no such group exists at the time of calling, NULL is returned.

References m_vClassGroups, and name.

◆ get_class_group() [3/4]

ClassGroupDesc * ug::bridge::Registry::get_class_group ( size_t  i)

returns a pointer to the i-th class group

References m_vClassGroups.

◆ get_class_group() [4/4]

◆ get_exported_function_group()

ExportedFunctionGroup * ug::bridge::Registry::get_exported_function_group ( const std::string &  name)

returns an exported function group by name

References m_vFunction, and name.

Referenced by add_and_get_function(), ug::vrl::invocation::getFunctionBySignature(), and ug::bridge::WriteLUAObject2().

◆ get_function() [1/2]

ExportedFunction & ug::bridge::Registry::get_function ( size_t  ind)

returns the first overload of an exported function

References m_vFunction.

Referenced by ug::bridge::ClassUsageExact(), and ug::bridge::FindFunction().

◆ get_function() [2/2]

const ExportedFunction & ug::bridge::Registry::get_function ( size_t  ind) const

References m_vFunction.

◆ get_function_group()

ExportedFunctionGroup & ug::bridge::Registry::get_function_group ( size_t  ind)

returns a group which contains all overloads of a function

References m_vFunction.

Referenced by check_consistency(), ug::bridge::lua::CreateBindings_LUA(), and ug::vrl::functions2NativeGroups().

◆ get_overload()

ExportedFunction & ug::bridge::Registry::get_overload ( size_t  funcInd,
size_t  oInd 
)

returns the i-th overload of a function

References m_vFunction.

◆ groupname_registered()

bool ug::bridge::Registry::groupname_registered ( const std::string &  name)

returns true if groupname is already used by a class in this registry

References m_vClassGroups, and name.

Referenced by add_class_().

◆ num_class_groups()

size_t ug::bridge::Registry::num_class_groups ( ) const

◆ num_classes()

◆ num_functions()

size_t ug::bridge::Registry::num_functions ( ) const

◆ num_overloads()

size_t ug::bridge::Registry::num_overloads ( size_t  ind) const

returns the number of overloads of a function

References m_vFunction.

◆ registry_changed()

bool ug::bridge::Registry::registry_changed ( )

call this method if to forward changes of the registry to its listeners

References m_callbacksRegChanged, and UG_THROW.

Referenced by ug::LoadPlugins(), ug::bridge::PostRegisterTest(), and ug::bridge::RegisterStandardBridges().

◆ set_force_construct_via_smart_pointer()

void ug::bridge::Registry::set_force_construct_via_smart_pointer ( bool  bForceConstructionWithSmartPtr)

requires every constructable class to be constructed via Smart-Pointer

References m_bForceConstructionWithSmartPtr.

Referenced by check_consistency().

Member Data Documentation

◆ m_bForceConstructionWithSmartPtr

bool ug::bridge::Registry::m_bForceConstructionWithSmartPtr
private

flag if classes must be constructed via smart-pointer

Referenced by check_consistency(), and set_force_construct_via_smart_pointer().

◆ m_callbacksRegChanged

std::vector<FuncRegistryChanged> ug::bridge::Registry::m_callbacksRegChanged
private

Callback, that are called when registry changed is invoked.

Referenced by add_callback(), and registry_changed().

◆ m_vClass

std::vector<IExportedClass*> ug::bridge::Registry::m_vClass
private

registered classes

Referenced by add_class_(), get_class(), get_class_(), num_classes(), and ~Registry().

◆ m_vClassGroups

std::vector<ClassGroupDesc*> ug::bridge::Registry::m_vClassGroups
private

registered class groups

Referenced by get_class_group(), groupname_registered(), num_class_groups(), and ~Registry().

◆ m_vFunction


The documentation for this class was generated from the following files: