libqi-api  2.4.3.28
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Pages
dynamicobjectbuilder.hpp
Go to the documentation of this file.
1 #pragma once
2 /*
3 ** Copyright (C) 2013 Aldebaran Robotics
4 ** See COPYING for the license
5 */
6 
7 #ifndef _QI_TYPE_DYNAMICOBJECTBUILDER_HPP_
8 #define _QI_TYPE_DYNAMICOBJECTBUILDER_HPP_
9 
10 #include <boost/noncopyable.hpp>
11 #include <qi/anyobject.hpp>
12 #include <qi/property.hpp>
13 
14 namespace qi {
15 
16  class DynamicObject;
17  class DynamicObjectBuilderPrivate;
18  class QI_API DynamicObjectBuilder : private boost::noncopyable
19  {
20  public:
22  DynamicObjectBuilder(DynamicObject *dynobject, bool deleteOnDestroy = true);
23 
25 
26  // throw on error
27  template <typename OBJECT_TYPE, typename METHOD_TYPE>
28  inline unsigned int advertiseMethod(const std::string& name,
29  OBJECT_TYPE object,
30  METHOD_TYPE method,
31  const std::string& desc = "",
32  MetaCallType threadingModel = MetaCallType_Auto);
33 
34  // throw on error
35  template <typename FUNCTION_TYPE>
36  inline unsigned int advertiseMethod(const std::string& name,
37  FUNCTION_TYPE function,
38  const std::string& desc = "",
39  MetaCallType threadingModel = MetaCallType_Auto);
40 
41  // throw on error
42  template <typename OBJECT_TYPE, typename METHOD_TYPE>
43  inline unsigned int advertiseMethod(MetaMethodBuilder& builder,
44  OBJECT_TYPE object,
45  METHOD_TYPE method,
46  MetaCallType threadingModel = MetaCallType_Auto);
47 
48  // throw on error
49  template <typename FUNCTION_TYPE>
50  inline unsigned int advertiseMethod(MetaMethodBuilder& builder,
51  FUNCTION_TYPE function,
52  MetaCallType threadingModel = MetaCallType_Auto);
53 
57  #define genCall(n, ATYPEDECL, ATYPES, ADECL, AUSE, comma) \
58  template<typename T comma ATYPEDECL> \
59  inline unsigned int advertiseFactory(const std::string& name) \
60  { \
61  return advertiseMethod(name, &constructObject<T comma ATYPES>); \
62  }
64  #undef genCall
65 
66  unsigned int advertiseSignal(const std::string& name);
67  template<typename P0> unsigned int advertiseSignal(const std::string& name);
68  template<typename P0, typename P1> unsigned int advertiseSignal(const std::string& name);
69  template<typename P0, typename P1, typename P2> unsigned int advertiseSignal(const std::string& name);
70  template<typename P0, typename P1, typename P2, typename P3> unsigned int advertiseSignal(const std::string& name);
71  template<typename P0, typename P1, typename P2, typename P3,typename P4> unsigned int advertiseSignal(const std::string& name);
72  template<typename P0, typename P1, typename P2, typename P3,typename P4,typename P5> unsigned int advertiseSignal(const std::string& name);
73  template<typename P0, typename P1, typename P2, typename P3,typename P4,typename P5,typename P6> unsigned int advertiseSignal(const std::string& name);
74  template<typename P0, typename P1, typename P2, typename P3,typename P4,typename P5,typename P6, typename P7> unsigned int advertiseSignal(const std::string& name);
75 
77  template<typename T>
78  unsigned int advertiseSignalF(const std::string& name);
79 
80  unsigned int advertiseSignal(const std::string &name, qi::SignalBase *signal);
81 
82  template<typename T>
83  unsigned int advertiseProperty(const std::string& name);
85  unsigned int advertiseProperty(const std::string &name, qi::PropertyBase *sig);
86 
87  void setThreadingModel(ObjectThreadingModel model);
88 
89  unsigned int xAdvertiseMethod(const Signature &sigret,
90  const std::string &name,
91  const Signature &signature,
92  AnyFunction func, const std::string& desc = "",
93  MetaCallType threadingModel = MetaCallType_Auto);
94 
95  unsigned int xAdvertiseMethod(MetaMethodBuilder& builder, AnyFunction func,
96  MetaCallType threadingModel = MetaCallType_Auto);
97 
98  unsigned int xAdvertiseSignal(const std::string &name, const Signature &signature);
99  unsigned int xAdvertiseProperty(const std::string& name, const Signature& sig, int id=-1);
100  void setDescription(const std::string& desc);
101  qi::AnyObject object(boost::function<void (GenericObject*)> onDelete = boost::function<void (GenericObject*)>());
103  template<typename T> qi::AnyObject object(boost::shared_ptr<T> other);
104  void markProperty(unsigned int ev, unsigned int getter, unsigned int setter);
105  private:
106  DynamicObject* bareObject();
107  void setManageable(DynamicObject* obj, Manageable* m);
108  DynamicObjectBuilderPrivate *_p;
109  };
110 }
111 
113 
114 #endif // _QITYPE_DYNAMICOBJECTBUILDER_HPP_
#define QI_API
Definition: api.hpp:34
#define genCall(n, ATYPEDECL, ATYPES, ADECL, AUSE, comma)
Honor the default behavior.
Definition: typeobject.hpp:21
MetaCallType
Definition: typeobject.hpp:19
ObjectThreadingModel
Possible thread models for an object.
Definition: manageable.hpp:30
#define QI_GEN(f)
Definition: preproc.hpp:476