34#ifndef __H__UG_BRIDGE__CLASS__
35#define __H__UG_BRIDGE__CLASS__
44#include <boost/optional.hpp>
55 #error "You need to define UG_PROFILER to use PROFILE_BRIDGE"
73 template <
typename TMethod>
76 size =
sizeof(TMethod);
100 delete reinterpret_cast<const TClass*
>(ptr);
105 UG_THROW(
"Can't delete instance of class 'void'");
121 const std::string&
name,
const std::string& className,
122 const std::string& methodOptions,
123 const std::string& retValInfos,
const std::string& paramInfos,
124 const std::string&
tooltip,
const std::string&
help)
147 template <
typename TFunc>
150 ExportedFunctionBase::create_parameter_stack<TFunc>();
173 mutable RuntimeProfileInfo m_dpi;
200 template <
class TFunc>
202 const std::string& className,
203 const std::string& methodOptions,
const std::string& retValInfos,
204 const std::string& paramInfos,
const std::string& tooltip,
205 const std::string& help)
207 size_t typeID = GetUniqueTypeID<TFunc>();
216 methodOptions, retValInfos,
217 paramInfos, tooltip, help);
223 func->create_parameter_stack<TFunc>();
234 template <
class TType>
237 size_t typeID = GetUniqueTypeID<TType>();
241 template <
class TType>
244 size_t typeID = GetUniqueTypeID<TType>();
282template <
typename TClass,
typename TMethod,
293 TClass* objPtr = (TClass*) (obj);
307template <
typename TClass,
typename TMethod>
317 TClass* objPtr = (TClass*) (obj);
328template <
typename TClass,
typename TMethod>
338 TClass* objPtr = (TClass*) (obj);
363 const std::string& className,
const std::string& options,
364 const std::string& paramInfos,
365 const std::string& tooltip,
const std::string& help);
374 void *pRet = m_proxy_func(paramsIn);
383 const std::string&
options()
const {
return m_options;}
389 size_t num_infos(
size_t i)
const {
return m_vvParamInfo.at(i).size();}
395 const std::string&
parameter_info(
size_t i,
size_t j)
const {
return m_vvParamInfo.at(i).at(j);}
404 const std::string&
tooltip()
const {
return m_tooltip;}
407 const std::string&
help()
const {
return m_help;}
416 bool check_consistency(std::string classname)
const;
418 template <
typename TFunc>
426 const size_t MinNumInfos = 3;
429 m_vvParamInfo.resize(m_paramsIn.size());
432 for(
int i = 0; i < (int)m_vvParamInfo.size(); ++i)
433 for(
size_t j = m_vvParamInfo.at(i).size(); j < MinNumInfos; ++j)
434 m_vvParamInfo.at(i).push_back(std::string(
""));
439 void tokenize(
const std::string& str, std::vector<std::string>& tokens,
440 const char delimiter);
465 mutable RuntimeProfileInfo m_dpi;
469template <
typename TClass,
typename TMethod>
482 return (
void*) newInst;
486template <
typename TClass>
489 TClass* pObj = (TClass*)obj;
508 virtual const std::string&
name()
const = 0;
511 virtual const std::string&
group()
const = 0;
517 virtual const std::string&
tooltip()
const = 0;
604 virtual const std::string&
tooltip()
const;
660 virtual void destroy(
void* obj)
const;
700template <
typename TClass>
740 return t.add_to(*
this);
754 template <
typename TMethod>
756 std::string retValInfos =
"", std::string paramInfos =
"",
757 std::string
tooltip =
"", std::string help =
"")
762 std::string strippedMethodName = methodName;
763 std::string methodOptions;
764 std::string::size_type pos = strippedMethodName.find(
"|");
765 if(pos != std::string::npos){
766 methodOptions = strippedMethodName.substr(pos + 1, strippedMethodName.length() - pos);
767 strippedMethodName = strippedMethodName.substr(0, pos);
771 strippedMethodName =
TrimString(strippedMethodName);
775 if(strippedMethodName.empty())
778 "Trying to register empty method name.");
784 "Trying to register method '"<< strippedMethodName <<
"' that"
785 <<
" contains illegal characters. "
807 methodOptions, retValInfos, paramInfos,
813 "Trying to register method name '" << strippedMethodName
814 <<
"' to class '" <<
name() <<
"', but another method with this name "
815 <<
" and the same function signature is already registered for this class.");
825 add_constructor<void (*)()>();
842 template <
typename TFunc>
844 std::string
tooltip =
"", std::string help =
"",
845 std::string options =
"")
851 "Trying to register constructor of class "
852 <<
name()<<
"with non-void return value in signature function.");
856 size_t typeID = GetUniqueTypeID<TFunc>();
862 "Trying to register constructor of class "
863 <<
name()<<
" with same signature twice.");
870 options, paramInfos,
tooltip, help);
885 return CastAndDelete<TClass>;
node for class names
Definition class_name_provider.h:65
provides the name for a class
Definition class_name_provider.h:102
static const ClassNameNode & class_name_node()
return the class name node in the class hierarchy
Definition class_name_provider.h:136
static const std::string & group()
groups
Definition class_name_provider.h:130
static const std::string & name()
name of this class
Definition class_name_provider_impl.h:152
static void set_name(const std::string &nameIn, const std::string &group, bool newName=false)
set name of class and copy parent names
Definition class_name_provider_impl.h:51
static const std::vector< const char * > & names()
returns vector of all names including parent class names
Definition class_name_provider_impl.h:162
Definition function_traits.h:56
A base implementation with non-template methods.
Definition class.h:591
virtual size_t num_constructors() const
number of registered constructors
Definition class.cpp:256
void(* DestructorFunc)(void *)
Definition class.h:688
ExportedClassBaseImpl()
Definition class.cpp:159
std::string m_tooltip
Definition class.h:693
std::vector< ExportedMethodGroup * > m_vConstMethod
Definition class.h:692
virtual bool construct_as_smart_pointer() const
returns whether the class shall be wrapped in a SmartPtr on construction
Definition class.cpp:281
virtual size_t num_const_methods() const
number of registered const-methods (overloads are not counted)
Definition class.cpp:202
virtual void destroy(void *obj) const
destructur for object
Definition class.cpp:299
virtual size_t num_overloads(size_t funcInd) const
returns the number of overloads of a method
Definition class.cpp:220
virtual const ExportedConstructor & get_constructor(size_t i) const
get exported constructor
Definition class.cpp:262
virtual const ExportedMethod & get_method(size_t i) const
returns the first overload of an exported function
Definition class.cpp:208
virtual size_t num_const_overloads(size_t funcInd) const
returns the number of overloads of a const method
Definition class.cpp:226
bool constmethodname_registered(const std::string &name)
returns true if methodname is already used by a method in this class
Definition class.cpp:316
virtual bool is_instantiable() const
is instantiable
Definition class.cpp:293
std::vector< ExportedMethodGroup * > m_vMethod
Definition class.h:691
virtual size_t num_methods() const
number of registered methods (overloads are not counted)
Definition class.cpp:196
virtual void set_construct_as_smart_pointer(bool enable)
sets whether the class shall be wrapped in a SmartPtr
Definition class.cpp:287
virtual const ExportedMethodGroup * get_exported_method_group(const std::string &name) const
Definition class.cpp:346
bool constructor_type_id_registered(size_t typeID)
returns if a constructor overload is registered
Definition class.cpp:306
virtual const ExportedMethodGroup & get_const_method_group(size_t ind) const
returns the i-th method group (all overloads of the i-th function)
Definition class.cpp:250
virtual const boost::optional< ExportedConstructor & > get_json_constructor() const
get constructor for construction from json
Definition class.cpp:268
virtual ~ExportedClassBaseImpl()
destructor
Definition class.cpp:175
virtual const ExportedMethod & get_const_method(size_t i) const
returns the first overload of an exported const function
Definition class.cpp:214
virtual const ExportedMethodGroup * get_const_exported_method_group(const std::string &name) const
Definition class.cpp:366
virtual const ExportedMethodGroup & get_method_group(size_t ind) const
returns the i-th method group (all overloads of the i-th function)
Definition class.cpp:244
virtual const ExportedMethod & get_const_overload(size_t funcInd, size_t oInd) const
returns the i-th overload of a const method
Definition class.cpp:238
std::vector< ConstructorOverload > m_vConstructor
Definition class.h:686
bool m_constructAsSmartPtr
Definition class.h:695
bool methodname_registered(const std::string &name)
returns true if methodname is already used by a method in this class
Definition class.cpp:326
DestructorFunc m_destructor
Definition class.h:689
virtual const std::string & tooltip() const
tooltip
Definition class.cpp:190
virtual const ExportedMethod & get_overload(size_t funcInd, size_t oInd) const
returns the i-th overload of a method
Definition class.cpp:232
This template class represents real c++ classes in the registry.
Definition class.h:702
virtual const ClassNameNode & class_name_node() const
name node of class
Definition class.h:725
virtual const std::string & group() const
get groups
Definition class.h:728
virtual DeleteFunction get_delete_function() const
return pointer to the delete method
Definition class.h:883
virtual bool is_json_constructible() const
is json constructible
Definition class.h:731
ExportedClass(const std::string &name, const std::string &group, const std::string &tooltip)
Definition class.h:710
ExportedClass()
Definition class.h:705
virtual ~ExportedClass()
destructor
Definition class.h:719
ExportedClass< TClass > & add_(T t)
Definition class.h:738
ExportedClass< TClass > & add_constructor()
Make default constructor accessible.
Definition class.h:822
virtual const std::vector< const char * > * class_names() const
class-hierarchy
Definition class.h:735
virtual const std::string & name() const
name of class
Definition class.h:722
ExportedClass< TClass > & add_method(std::string methodName, TMethod func, std::string retValInfos="", std::string paramInfos="", std::string tooltip="", std::string help="")
Method registration.
Definition class.h:755
ExportedClass< TClass > & add_constructor(std::string paramInfos="", std::string tooltip="", std::string help="", std::string options="")
constructor registration
Definition class.h:843
ExportedClass(const ExportedClass &other)
describing information for constructor
Definition class.h:356
std::string m_options
options
Definition class.h:451
std::string m_paramInfos
string with Infos about parameter
Definition class.h:454
std::vector< std::vector< std::string > > m_vvParamInfo
tokenized strings for each Parameter and each Info (name | style | options | ...)
Definition class.h:457
std::string m_className
name of class constructed
Definition class.h:448
ParameterInfo m_paramsIn
Definition class.h:462
ProxyFunc m_proxy_func
proxy function to call method
Definition class.h:445
size_t num_infos(size_t i) const
number of info strings for one parameter
Definition class.h:389
const std::vector< std::string > & parameter_info_vec(size_t i) const
type info of i th parameters
Definition class.h:398
std::string m_help
Definition class.h:460
const std::string & parameter_info_string() const
whole string of all type infos for of all parameters
Definition class.h:401
const std::string & help() const
help informations
Definition class.h:407
void * create(const ParameterStack ¶msIn) const
executes the function
Definition class.h:368
size_t num_parameter() const
number of parameters.
Definition class.h:386
ParameterInfo & params_in()
non-const export of param list
Definition class.h:413
const std::string & parameter_name(size_t i) const
name of parameter i
Definition class.h:392
const std::string & parameter_info(size_t i, size_t j) const
type info of all parameters
Definition class.h:395
const std::string & options() const
options
Definition class.h:383
void create_parameter_stack()
Definition class.h:419
std::string m_tooltip
Definition class.h:459
const ParameterInfo & params_in() const
parameter list for input values
Definition class.h:410
const std::string & tooltip() const
gives some information to the exported functions
Definition class.h:404
Base class for function/method export.
Definition global_function.h:66
const std::string & help() const
help informations
Definition global_function.h:112
const std::string & tooltip() const
gives some information to the exported functions
Definition global_function.h:109
const std::string & name() const
name of function
Definition global_function.h:73
Groups of methods - useful to realize overloaded methods.
Definition class.h:183
bool add_overload(const TFunc &m, ProxyFunc pf, const std::string &className, const std::string &methodOptions, const std::string &retValInfos, const std::string ¶mInfos, const std::string &tooltip, const std::string &help)
adds an overload. Returns false if the overload already existed.
Definition class.h:201
~ExportedMethodGroup()
Definition class.h:190
const ExportedMethod * get_overload(size_t index) const
Definition class.h:232
ExportedMethod * get_overload_by_type_id(size_t typeID)
Definition class.h:248
ExportedMethodGroup(const std::string &name)
Definition class.h:187
size_t get_overload_type_id(size_t index) const
Definition class.h:266
const ExportedMethod * get_overload_by_type() const
Definition class.h:242
std::string m_name
Definition class.h:278
const std::string & name() const
name of function group
Definition class.h:197
const ExportedMethod * get_overload_by_type_id(size_t typeID) const
Definition class.h:257
ExportedMethod::ProxyFunc ProxyFunc
Definition class.h:184
size_t num_overloads() const
Definition class.h:228
ExportedMethod * get_overload(size_t index)
Definition class.h:230
std::vector< Overload > m_overloads
Definition class.h:279
ExportedMethod * get_overload_by_type()
Definition class.h:235
std::string m_className
name of class this method belongs to
Definition class.h:168
bool has_custom_return() const
returns true if this method handles its own return of values to lua
Definition class.h:158
bool m_customReturn
Definition class.h:170
void create_parameter_stack()
Definition class.h:148
const std::string & class_name() const
returns the class name this method belongs to
Definition class.h:155
MethodPtrWrapper m_ptrWrapper
pointer to function (stored in a wrapper)
Definition class.h:162
void execute(void *obj, const ParameterStack ¶msIn, ParameterStack ¶msOut) const
executes the function
Definition class.h:134
ProxyFunc m_proxy_func
proxy function to call method
Definition class.h:165
ExportedMethod(const MethodPtrWrapper &m, ProxyFunc pf, const std::string &name, const std::string &className, const std::string &methodOptions, const std::string &retValInfos, const std::string ¶mInfos, const std::string &tooltip, const std::string &help)
Definition class.h:120
void(* ProxyFunc)(const MethodPtrWrapper &func, void *obj, const ParameterStack &in, ParameterStack &out)
Definition class.h:116
Base class for exported Classes.
Definition class.h:502
virtual bool check_consistency() const
returns false is consistency-check failed
Definition class.cpp:114
virtual void destroy(void *obj) const =0
destructur for object
virtual bool is_instantiable() const =0
virtual const ExportedConstructor & get_constructor(size_t i) const =0
get exported constructor
virtual const ExportedMethod & get_const_method(size_t i) const =0
get exported const-method
virtual const ExportedMethod & get_method(size_t i) const =0
get exported method
virtual const boost::optional< ExportedConstructor & > get_json_constructor() const =0
get constructor for construction from json
virtual const ExportedMethodGroup * get_exported_method_group(const std::string &name) const =0
virtual size_t num_methods() const =0
number of method of the class
virtual const ClassNameNode & class_name_node() const =0
name node of class
virtual size_t num_constructors() const =0
number of registered constructors
virtual const ExportedMethodGroup * get_const_exported_method_group(const std::string &name) const =0
virtual size_t num_overloads(size_t funcInd) const =0
returns the number of overloads of a method
virtual const std::string & group() const =0
get groups
void(* DeleteFunction)(const void *)
Definition class.h:504
virtual size_t num_const_methods() const =0
number of registered const-methods
virtual size_t num_const_overloads(size_t funcInd) const =0
returns the number of overloads of a const method
virtual const ExportedMethodGroup & get_const_method_group(size_t ind) const =0
returns the i-th method group (all overloads of the i-th function)
virtual const std::vector< const char * > * class_names() const =0
name-list of class hierarchy
virtual DeleteFunction get_delete_function() const =0
returns a function which will call delete on the object
virtual const std::string & name() const =0
name of class
virtual ~IExportedClass()
virtual destructor
Definition class.h:585
virtual const ExportedMethod & get_const_overload(size_t funcInd, size_t oInd) const =0
returns the i-th overload of a const method
virtual bool is_json_constructible() const =0
get constructor for construction from json
virtual const std::string & tooltip() const =0
get tooltip
virtual const ExportedMethodGroup & get_method_group(size_t ind) const =0
returns the i-th method group (all overloads of the i-th function)
virtual bool construct_as_smart_pointer() const =0
true if the class shall be wrapped in a SmartPtr on construction
virtual const ExportedMethod & get_overload(size_t funcInd, size_t oInd) const =0
returns the i-th overload of a method
int size
Definition class.h:94
MethodPtrWrapper(TMethod m)
Definition class.h:74
MethodPtrWrapper(const MethodPtrWrapper &mpw)
Definition class.h:81
~MethodPtrWrapper()
Definition class.h:88
void * data
Definition class.h:93
void * get_raw_ptr() const
Definition class.h:90
a stack holding parameter infos about a parameter stack
Definition parameter_stack.h:73
A stack that can hold values together with their type-id.
Definition parameter_stack.h:270
void push(void *ptr, const ClassNameNode *classNameNode)
Definition parameter_stack.h:367
void CastAndDelete< void >(const void *ptr)
Definition class.h:103
void DestructorProxy(void *obj)
Definition class.h:487
void CastAndDelete(const void *ptr)
Performs a reinterpret cast on the given pointer, then calls delete on it.
Definition class.h:98
bool IsValidRegistryIdentifier(const std::string &name)
Definition registry_util.cpp:54
std::string GetRegistryIdentifierMessage()
Definition registry_util.cpp:62
#define UG_THROW(msg)
Definition error.h:57
#define UG_API
Definition ug_config.h:65
string TrimString(const string &str)
Definition string_util.cpp:104
function func(x, y, z, t, si)
#define UG_THROW_REGISTRY_ERROR(cls, msg)
Definition error.h:76
static void * create(const ParameterStack &in)
Definition class.h:472
Definition param_to_type_value_list.h:88
size_t m_typeID
Definition class.h:683
ConstructorOverload(ExportedConstructor *func, size_t typeID)
Definition class.h:679
ConstructorOverload()
Definition class.h:678
ExportedConstructor * m_constructor
Definition class.h:682
size_t m_typeID
Definition class.h:275
Overload()
Definition class.h:270
ExportedMethod * m_func
Definition class.h:274
Overload(ExportedMethod *func, size_t typeID)
Definition class.h:271
static void apply(const MethodPtrWrapper &method, void *obj, const ParameterStack &in, ParameterStack &out)
Definition class.h:331
static void apply(const MethodPtrWrapper &method, void *obj, const ParameterStack &in, ParameterStack &out)
Definition class.h:310
static void apply(const MethodPtrWrapper &method, void *obj, const ParameterStack &in, ParameterStack &out)
Definition class.h:286
Definition param_to_type_value_list.h:71
Definition function_traits.h:525
Definition function_traits.h:59