Pothos  0.1.1
The Pothos dataflow programming software suite
 All Classes Namespaces Files Functions Variables Typedefs Friends Macros
CallInterface.hpp
Go to the documentation of this file.
1 
11 #pragma once
12 #include <Pothos/Config.hpp>
13 #include <Pothos/Object/Object.hpp>
14 
15 namespace Pothos {
16 
21 class POTHOS_API CallInterface
22 {
23 public:
27  virtual ~CallInterface(void);
28 
30  template <typename ReturnType>
31  ReturnType call() const;
32 
34  inline
35  Object callObject() const;
36 
38  inline
39  void callVoid() const;
40 
42  template <typename ReturnType, typename A0>
43  ReturnType call(A0 &&a0) const;
44 
46  template <typename A0>
47  Object callObject(A0 &&a0) const;
48 
50  template <typename A0>
51  void callVoid(A0 &&a0) const;
52 
54  template <typename ReturnType, typename A0, typename A1>
55  ReturnType call(A0 &&a0, A1 &&a1) const;
56 
58  template <typename A0, typename A1>
59  Object callObject(A0 &&a0, A1 &&a1) const;
60 
62  template <typename A0, typename A1>
63  void callVoid(A0 &&a0, A1 &&a1) const;
64 
66  template <typename ReturnType, typename A0, typename A1, typename A2>
67  ReturnType call(A0 &&a0, A1 &&a1, A2 &&a2) const;
68 
70  template <typename A0, typename A1, typename A2>
71  Object callObject(A0 &&a0, A1 &&a1, A2 &&a2) const;
72 
74  template <typename A0, typename A1, typename A2>
75  void callVoid(A0 &&a0, A1 &&a1, A2 &&a2) const;
76 
78  template <typename ReturnType, typename A0, typename A1, typename A2, typename A3>
79  ReturnType call(A0 &&a0, A1 &&a1, A2 &&a2, A3 &&a3) const;
80 
82  template <typename A0, typename A1, typename A2, typename A3>
83  Object callObject(A0 &&a0, A1 &&a1, A2 &&a2, A3 &&a3) const;
84 
86  template <typename A0, typename A1, typename A2, typename A3>
87  void callVoid(A0 &&a0, A1 &&a1, A2 &&a2, A3 &&a3) const;
88 
90  template <typename ReturnType, typename A0, typename A1, typename A2, typename A3, typename A4>
91  ReturnType call(A0 &&a0, A1 &&a1, A2 &&a2, A3 &&a3, A4 &&a4) const;
92 
94  template <typename A0, typename A1, typename A2, typename A3, typename A4>
95  Object callObject(A0 &&a0, A1 &&a1, A2 &&a2, A3 &&a3, A4 &&a4) const;
96 
98  template <typename A0, typename A1, typename A2, typename A3, typename A4>
99  void callVoid(A0 &&a0, A1 &&a1, A2 &&a2, A3 &&a3, A4 &&a4) const;
100 
102  template <typename ReturnType, typename A0, typename A1, typename A2, typename A3, typename A4, typename A5>
103  ReturnType call(A0 &&a0, A1 &&a1, A2 &&a2, A3 &&a3, A4 &&a4, A5 &&a5) const;
104 
106  template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5>
107  Object callObject(A0 &&a0, A1 &&a1, A2 &&a2, A3 &&a3, A4 &&a4, A5 &&a5) const;
108 
110  template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5>
111  void callVoid(A0 &&a0, A1 &&a1, A2 &&a2, A3 &&a3, A4 &&a4, A5 &&a5) const;
112 
114  template <typename ReturnType, typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6>
115  ReturnType call(A0 &&a0, A1 &&a1, A2 &&a2, A3 &&a3, A4 &&a4, A5 &&a5, A6 &&a6) const;
116 
118  template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6>
119  Object callObject(A0 &&a0, A1 &&a1, A2 &&a2, A3 &&a3, A4 &&a4, A5 &&a5, A6 &&a6) const;
120 
122  template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6>
123  void callVoid(A0 &&a0, A1 &&a1, A2 &&a2, A3 &&a3, A4 &&a4, A5 &&a5, A6 &&a6) const;
124 
126  template <typename ReturnType, typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7>
127  ReturnType call(A0 &&a0, A1 &&a1, A2 &&a2, A3 &&a3, A4 &&a4, A5 &&a5, A6 &&a6, A7 &&a7) const;
128 
130  template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7>
131  Object callObject(A0 &&a0, A1 &&a1, A2 &&a2, A3 &&a3, A4 &&a4, A5 &&a5, A6 &&a6, A7 &&a7) const;
132 
134  template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7>
135  void callVoid(A0 &&a0, A1 &&a1, A2 &&a2, A3 &&a3, A4 &&a4, A5 &&a5, A6 &&a6, A7 &&a7) const;
136 
138  template <typename ReturnType, typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8>
139  ReturnType call(A0 &&a0, A1 &&a1, A2 &&a2, A3 &&a3, A4 &&a4, A5 &&a5, A6 &&a6, A7 &&a7, A8 &&a8) const;
140 
142  template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8>
143  Object callObject(A0 &&a0, A1 &&a1, A2 &&a2, A3 &&a3, A4 &&a4, A5 &&a5, A6 &&a6, A7 &&a7, A8 &&a8) const;
144 
146  template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8>
147  void callVoid(A0 &&a0, A1 &&a1, A2 &&a2, A3 &&a3, A4 &&a4, A5 &&a5, A6 &&a6, A7 &&a7, A8 &&a8) const;
148 
149 
150 protected:
158  virtual Object opaqueCall(const Object *inputArgs, const size_t numArgs) const = 0;
159 };
160 
161 } //namespace Pothos
162 
164 {
165  return this->opaqueCall(nullptr, 0);
166 }
167 
168 inline void Pothos::CallInterface::callVoid(void) const
169 {
170  this->callObject();
171 }
virtual Object opaqueCall(const Object *inputArgs, const size_t numArgs) const =0
Object callObject() const
Call a bound method/function with an Object return and 0 args.
Definition: CallInterface.tmpl.hpp:57
#define POTHOS_API
Definition: Config.hpp:41
void callVoid() const
Call a bound method/function with a void return and 0 args.
Definition: CallInterface.tmpl.hpp:62
Definition: Object.hpp:55