libqi-api  2.8.7.4
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Pages
dynamicobjectbuilder.hxx
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 _QITYPE_DETAIL_GENERICOBJECTBUILDER_HXX_
8 #define _QITYPE_DETAIL_GENERICOBJECTBUILDER_HXX_
9 
12 #include <qi/type/metamethod.hpp>
13 
14 namespace qi {
15 
16  template <typename FUNCTION_TYPE>
17  unsigned int DynamicObjectBuilder::advertiseMethod(const std::string& name,
18  FUNCTION_TYPE function,
19  const std::string& desc,
20  MetaCallType threadingModel)
21  {
22  MetaMethodBuilder builder;
24  builder.setName(name);
25  builder.setSignature(f);
26  builder.setDescription(desc);
27  // throw on error
28  return xAdvertiseMethod(builder, f, threadingModel);
29  }
30 
31  template <typename OBJECT_TYPE, typename METHOD_TYPE>
32  inline unsigned int DynamicObjectBuilder::advertiseMethod(const std::string& name,
33  OBJECT_TYPE object,
34  METHOD_TYPE method,
35  const std::string& desc,
36  MetaCallType threadingModel)
37  {
38  MetaMethodBuilder builder;
39  AnyFunction f = AnyFunction::from(method, object).dropFirstArgument();
40  builder.setName(name);
41  builder.setSignature(f);
42  builder.setDescription(desc);
43  // throw on error
44  return xAdvertiseMethod(builder, f, threadingModel);
45  }
46 
47  template <typename FUNCTION_TYPE>
49  FUNCTION_TYPE function,
50  MetaCallType threadingModel)
51  {
53  builder.setSignature(f);
54  // throw on error
55  return xAdvertiseMethod(builder, f, threadingModel);
56  }
57 
58  template <typename OBJECT_TYPE, typename METHOD_TYPE>
60  OBJECT_TYPE object,
61  METHOD_TYPE method,
62  MetaCallType threadingModel)
63  {
64  AnyFunction f = AnyFunction::from(method, object).dropFirstArgument();
65  builder.setSignature(f);
66  // throw on error
67  return xAdvertiseMethod(builder, f, threadingModel);
68  }
69 
70  template <typename... Args>
71  unsigned int DynamicObjectBuilder::advertiseSignal(const std::string& s)
72  {
73  return advertiseSignalF<void(Args...)>(s);
74  }
75 
76  template <typename T> unsigned int DynamicObjectBuilder::advertiseSignalF(const std::string& name)
77  {
79  }
80 
81  template <typename T> unsigned int DynamicObjectBuilder::advertiseProperty(const std::string& name)
82  {
83  // we must end up with name event, get_name and set_name methods
84  unsigned int isig = advertiseSignal<const T&>(name);
85  isig = xAdvertiseProperty(name, typeOf<T>()->signature(), isig);
86  return isig;
87  }
88 
89  template<typename T> qi::AnyObject DynamicObjectBuilder::object(boost::shared_ptr<T> other)
90  {
91  DynamicObject* dobj = bareObject();
92  qi::AnyObject ao = makeDynamicSharedAnyObject(dobj, other);
93  setManageable(dobj, ao.asGenericObject());
94  return ao;
95  }
96 
97 }
98 #endif // _QITYPE_DETAIL_GENERICOBJECTBUILDER_HXX_
GenericObject * asGenericObject() const
Definition: object.hxx:652
unsigned int advertiseProperty(const std::string &name)
unsigned int xAdvertiseProperty(const std::string &name, const Signature &sig, int id=-1)
unsigned int xAdvertiseSignal(const std::string &name, const Signature &signature, bool isSignalProperty=false)
void setName(const std::string &name)
unsigned int xAdvertiseMethod(const Signature &sigret, const std::string &name, const Signature &signature, AnyFunction func, const std::string &desc="", MetaCallType threadingModel=MetaCallType_Auto)
void setDescription(const std::string &documentation)
unsigned int advertiseMethod(const std::string &name, OBJECT_TYPE object, METHOD_TYPE method, const std::string &desc="", MetaCallType threadingModel=MetaCallType_Auto)
unsigned int advertiseSignalF(const std::string &name)
Advertise a signal using a function signature.
unsigned int advertiseSignal(const std::string &name)
AnyObject makeDynamicSharedAnyObject(DynamicObject *obj, boost::shared_ptr< T > other)
MetaCallType
Definition: typeobject.hpp:24
qi::AnyObject object(boost::function< void(GenericObject *)> onDelete=boost::function< void(GenericObject *)>())
static AnyFunction from(F &&func)
const AnyFunction & dropFirstArgument() const
Change signature, drop the first argument passed to call.
void setSignature(const AnyFunction &f)