method_test.cpp
Go to the documentation of this file.
1 /***************************************************************************
2  tag: The SourceWorks Tue Sep 7 00:54:57 CEST 2010 method_test.cpp
3 
4  method_test.cpp - description
5  -------------------
6  begin : Tue September 07 2010
7  copyright : (C) 2010 The SourceWorks
8  email : peter@thesourceworks.com
9 
10  ***************************************************************************
11  * *
12  * This program is free software; you can redistribute it and/or modify *
13  * it under the terms of the GNU General Public License as published by *
14  * the Free Software Foundation; either version 2 of the License, or *
15  * (at your option) any later version. *
16  * *
17  ***************************************************************************/
18 
19 
20 
21 #define ORO_TEST_OPERATION_CALLER
22 
23 #include <TaskContext.hpp>
24 #include <OperationCaller.hpp>
25 #include <Operation.hpp>
26 #include <Service.hpp>
27 
28 #include "unit.hpp"
29 #include "operations_fixture.hpp"
30 
34 BOOST_FIXTURE_TEST_SUITE( OperationCallerTestSuite, OperationsFixture )
35 
36 BOOST_AUTO_TEST_CASE(testClientThreadOperationCaller)
37 {
38  // Tests using no caller, no sender
47 
49 
50  BOOST_CHECK_EQUAL( -1.0, m0() );
51  BOOST_CHECK_EQUAL( -2.0, m1(1) );
52  BOOST_CHECK_EQUAL( -3.0, m2(1, 2.0) );
53  BOOST_CHECK_EQUAL( -4.0, m3(1, 2.0, true) );
54  BOOST_CHECK_EQUAL( -5.0, m4(1, 2.0, true,"hello") );
55  BOOST_CHECK_EQUAL( -6.0, m5(1, 2.0, true,"hello",5.0) );
56  BOOST_CHECK_EQUAL( -7.0, m6(1, 2.0, true,"hello",5.0,'a') );
57  BOOST_CHECK_EQUAL( -8.0, m7(1, 2.0, true,"hello",5.0,'a',7) );
58 
59  BOOST_CHECK_THROW(m0e(), std::runtime_error);
60 }
61 
62 BOOST_AUTO_TEST_CASE(testOwnThreadOperationCallerCall)
63 {
64  // Tests using caller and sender
65  OperationCaller<double(void)> m0("m0", &OperationsFixture::m0, this, tc->engine(), caller->engine(), OwnThread);
66  OperationCaller<double(int)> m1("m1", &OperationsFixture::m1, this, tc->engine(), caller->engine(), OwnThread);
67  OperationCaller<double(int,double)> m2("m2", &OperationsFixture::m2, this, tc->engine(), caller->engine(), OwnThread);
68  OperationCaller<double(int,double,bool)> m3("m3", &OperationsFixture::m3, this, tc->engine(), caller->engine(), OwnThread);
69  OperationCaller<double(int,double,bool,std::string)> m4("m4", &OperationsFixture::m4, this, tc->engine(), caller->engine(), OwnThread);
70  OperationCaller<double(int,double,bool,std::string,float)> m5("m5", &OperationsFixture::m5, this, tc->engine(), caller->engine(), OwnThread);
73 
74  OperationCaller<void(void)> m0e("m0except", &OperationsFixture::m0except, this, tc->engine(), caller->engine(), OwnThread);
75 
76  BOOST_REQUIRE( tc->isRunning() );
77  BOOST_REQUIRE( caller->isRunning() );
78  BOOST_CHECK_EQUAL( -1.0, m0() );
79  BOOST_CHECK_EQUAL( -2.0, m1(1) );
80  BOOST_CHECK_EQUAL( -3.0, m2(1, 2.0) );
81  BOOST_CHECK_EQUAL( -4.0, m3(1, 2.0, true) );
82  BOOST_CHECK_EQUAL( -5.0, m4(1, 2.0, true,"hello") );
83  BOOST_CHECK_EQUAL( -6.0, m5(1, 2.0, true,"hello",5.0) );
84  BOOST_CHECK_EQUAL( -7.0, m6(1, 2.0, true,"hello",5.0,'a') );
85  BOOST_CHECK_EQUAL( -8.0, m7(1, 2.0, true,"hello",5.0,'a',7) );
86 
87  BOOST_CHECK_THROW( m0e(), std::runtime_error);
88  BOOST_REQUIRE( tc->inException() );
89 }
90 
91 BOOST_AUTO_TEST_CASE(testClientThreadOperationCallerSend)
92 {
93  // we set the owner engine to zero and our caller engine to be able to send.
94  OperationCaller<double(void)> m0("m0", &OperationsFixture::m0, this, 0, caller->engine());
95  OperationCaller<double(int)> m1("m1", &OperationsFixture::m1, this, 0, caller->engine());
96  OperationCaller<double(int,double)> m2("m2", &OperationsFixture::m2, this, 0, caller->engine());
97  OperationCaller<double(int,double,bool)> m3("m3", &OperationsFixture::m3, this, 0, caller->engine());
102 
103  OperationCaller<void(void)> m0e("m0except", &OperationsFixture::m0except, this, 0, caller->engine());
104 
105 
106  BOOST_REQUIRE( tc->isRunning() );
107  BOOST_REQUIRE( caller->isRunning() );
108  SendHandle<double(void)> h0 = m0.send();
109  SendHandle<double(int)> h1 = m1.send(1);
110  SendHandle<double(int,double)> h2 = m2.send(1, 2.0);
111  SendHandle<double(int,double,bool)> h3 = m3.send(1, 2.0, true);
112  SendHandle<double(int,double,bool,std::string)> h4 = m4.send(1, 2.0, true,"hello");
113  SendHandle<double(int,double,bool,std::string,float)> h5 = m5.send(1, 2.0, true,"hello",5.0);
114  SendHandle<double(int,double,bool,std::string,float,char)> h6 = m6.send(1, 2.0, true,"hello",5.0,'a');
115  SendHandle<double(int,double,bool,std::string,float,char,unsigned int)> h7 = m7.send(1, 2.0, true,"hello",5.0,'a',7);
116 
117  SendHandle<void(void)> h0e = m0e.send();
118 
119  double retn=0;
120  BOOST_CHECK_EQUAL( SendSuccess, h0.collect(retn) );
121  BOOST_CHECK_EQUAL( retn, -1.0 );
122  BOOST_CHECK_EQUAL( SendSuccess, h1.collect(retn) );
123  BOOST_CHECK_EQUAL( retn, -2.0 );
124  BOOST_CHECK_EQUAL( SendSuccess, h2.collect(retn) );
125  BOOST_CHECK_EQUAL( retn, -3.0 );
126  BOOST_CHECK_EQUAL( SendSuccess, h3.collect(retn) );
127  BOOST_CHECK_EQUAL( retn, -4.0 );
128  BOOST_CHECK_EQUAL( SendSuccess, h4.collect(retn) );
129  BOOST_CHECK_EQUAL( retn, -5.0 );
130  BOOST_CHECK_EQUAL( SendSuccess, h5.collect(retn) );
131  BOOST_CHECK_EQUAL( retn, -6.0 );
132  BOOST_CHECK_EQUAL( SendSuccess, h6.collect(retn) );
133  BOOST_CHECK_EQUAL( retn, -7.0 );
134  BOOST_CHECK_EQUAL( SendSuccess, h7.collect(retn) );
135  BOOST_CHECK_EQUAL( retn, -8.0 );
136 
137  BOOST_CHECK_THROW( h0e.collect(), std::runtime_error);
138 
139  // collectIfDone will certainly succeed after collect
140  BOOST_CHECK_EQUAL( SendSuccess, h0.collectIfDone(retn) );
141  BOOST_CHECK_EQUAL( retn, -1.0 );
142  BOOST_CHECK_EQUAL( SendSuccess, h1.collectIfDone(retn) );
143  BOOST_CHECK_EQUAL( retn, -2.0 );
144  BOOST_CHECK_EQUAL( SendSuccess, h2.collectIfDone(retn) );
145  BOOST_CHECK_EQUAL( retn, -3.0 );
146  BOOST_CHECK_EQUAL( SendSuccess, h3.collectIfDone(retn) );
147  BOOST_CHECK_EQUAL( retn, -4.0 );
148  BOOST_CHECK_EQUAL( SendSuccess, h4.collectIfDone(retn) );
149  BOOST_CHECK_EQUAL( retn, -5.0 );
150  BOOST_CHECK_EQUAL( SendSuccess, h5.collectIfDone(retn) );
151  BOOST_CHECK_EQUAL( retn, -6.0 );
152  BOOST_CHECK_EQUAL( SendSuccess, h6.collectIfDone(retn) );
153  BOOST_CHECK_EQUAL( retn, -7.0 );
154  BOOST_CHECK_EQUAL( SendSuccess, h7.collectIfDone(retn) );
155  BOOST_CHECK_EQUAL( retn, -8.0 );
156 
157  BOOST_CHECK_THROW( h0e.collectIfDone(), std::runtime_error);
158 
159  // the return value api.
160  BOOST_CHECK_EQUAL( -1.0, h0.ret() );
161  BOOST_CHECK_EQUAL( -2.0, h1.ret(1) );
162  BOOST_CHECK_EQUAL( -3.0, h2.ret(1, 2.0) );
163  BOOST_CHECK_EQUAL( -4.0, h3.ret(1, 2.0, true) );
164  BOOST_CHECK_EQUAL( -5.0, h4.ret(1, 2.0, true,"hello") );
165  BOOST_CHECK_EQUAL( -6.0, h5.ret(1, 2.0, true,"hello",5.0) );
166  BOOST_CHECK_EQUAL( -7.0, h6.ret(1, 2.0, true,"hello",5.0,'a') );
167  BOOST_CHECK_EQUAL( -8.0, h7.ret(1, 2.0, true,"hello",5.0,'a',7) );
168 
169  BOOST_CHECK_THROW( h0e.ret(), std::runtime_error);
170 
171  BOOST_CHECK_EQUAL( -2.0, h1.ret() );
172  BOOST_CHECK_EQUAL( -3.0, h2.ret() );
173  BOOST_CHECK_EQUAL( -4.0, h3.ret() );
174  BOOST_CHECK_EQUAL( -5.0, h4.ret() );
175  BOOST_CHECK_EQUAL( -6.0, h5.ret() );
176  BOOST_CHECK_EQUAL( -7.0, h6.ret() );
177  BOOST_CHECK_EQUAL( -8.0, h7.ret() );
178 }
179 
180 BOOST_AUTO_TEST_CASE(testOwnThreadOperationCallerSend)
181 {
182  OperationCaller<double(void)> m0("m0", &OperationsFixture::m0, this, tc->engine(), caller->engine(), OwnThread);
183  OperationCaller<double(int)> m1("m1", &OperationsFixture::m1, this, tc->engine(), caller->engine(), OwnThread);
184  OperationCaller<double(int,double)> m2("m2", &OperationsFixture::m2, this, tc->engine(), caller->engine(), OwnThread);
185  OperationCaller<double(int,double,bool)> m3("m3", &OperationsFixture::m3, this, tc->engine(), caller->engine(), OwnThread);
186  OperationCaller<double(int,double,bool,std::string)> m4("m4", &OperationsFixture::m4, this, tc->engine(), caller->engine(), OwnThread);
187  OperationCaller<double(int,double,bool,std::string,float)> m5("m5", &OperationsFixture::m5, this, tc->engine(), caller->engine(), OwnThread);
190 
191  OperationCaller<void(void)> m0e("m0except", &OperationsFixture::m0except, this, tc->engine(), caller->engine(), OwnThread);
192 
193  BOOST_REQUIRE( tc->isRunning() );
194  BOOST_REQUIRE( caller->isRunning() );
195  SendHandle<double(void)> h0 = m0.send();
196  SendHandle<double(int)> h1 = m1.send(1);
197  SendHandle<double(int,double)> h2 = m2.send(1, 2.0);
198  SendHandle<double(int,double,bool)> h3 = m3.send(1, 2.0, true);
199  SendHandle<double(int,double,bool,std::string)> h4 = m4.send(1, 2.0, true,"hello");
200  SendHandle<double(int,double,bool,std::string,float)> h5 = m5.send(1, 2.0, true,"hello",5.0);
201  SendHandle<double(int,double,bool,std::string,float,char)> h6 = m6.send(1, 2.0, true,"hello",5.0,'a');
202  SendHandle<double(int,double,bool,std::string,float,char,unsigned int)> h7 = m7.send(1, 2.0, true,"hello",5.0,'a',7);
203 
204  SendHandle<void(void)> h0e = m0e.send();
205 
206  double retn=0;
207  BOOST_CHECK_EQUAL( SendSuccess, h0.collect(retn) );
208  BOOST_CHECK_EQUAL( retn, -1.0 );
209  BOOST_CHECK_EQUAL( SendSuccess, h1.collect(retn) );
210  BOOST_CHECK_EQUAL( retn, -2.0 );
211  BOOST_CHECK_EQUAL( SendSuccess, h2.collect(retn) );
212  BOOST_CHECK_EQUAL( retn, -3.0 );
213  BOOST_CHECK_EQUAL( SendSuccess, h3.collect(retn) );
214  BOOST_CHECK_EQUAL( retn, -4.0 );
215  BOOST_CHECK_EQUAL( SendSuccess, h4.collect(retn) );
216  BOOST_CHECK_EQUAL( retn, -5.0 );
217  BOOST_CHECK_EQUAL( SendSuccess, h5.collect(retn) );
218  BOOST_CHECK_EQUAL( retn, -6.0 );
219  BOOST_CHECK_EQUAL( SendSuccess, h6.collect(retn) );
220  BOOST_CHECK_EQUAL( retn, -7.0 );
221  BOOST_CHECK_EQUAL( SendSuccess, h7.collect(retn) );
222  BOOST_CHECK_EQUAL( retn, -8.0 );
223 
224  BOOST_CHECK_THROW( h0e.collect(), std::runtime_error);
225  BOOST_REQUIRE( tc->inException() );
226  BOOST_REQUIRE( tc->recover() && tc->start() );
227  BOOST_REQUIRE( tc->isRunning() );
228 
229  // collectIfDone will certainly succeed after collect
230  BOOST_CHECK_EQUAL( SendSuccess, h0.collectIfDone(retn) );
231  BOOST_CHECK_EQUAL( retn, -1.0 );
232  BOOST_CHECK_EQUAL( SendSuccess, h1.collectIfDone(retn) );
233  BOOST_CHECK_EQUAL( retn, -2.0 );
234  BOOST_CHECK_EQUAL( SendSuccess, h2.collectIfDone(retn) );
235  BOOST_CHECK_EQUAL( retn, -3.0 );
236  BOOST_CHECK_EQUAL( SendSuccess, h3.collectIfDone(retn) );
237  BOOST_CHECK_EQUAL( retn, -4.0 );
238  BOOST_CHECK_EQUAL( SendSuccess, h4.collectIfDone(retn) );
239  BOOST_CHECK_EQUAL( retn, -5.0 );
240  BOOST_CHECK_EQUAL( SendSuccess, h5.collectIfDone(retn) );
241  BOOST_CHECK_EQUAL( retn, -6.0 );
242  BOOST_CHECK_EQUAL( SendSuccess, h6.collectIfDone(retn) );
243  BOOST_CHECK_EQUAL( retn, -7.0 );
244  BOOST_CHECK_EQUAL( SendSuccess, h7.collectIfDone(retn) );
245  BOOST_CHECK_EQUAL( retn, -8.0 );
246 
247  BOOST_CHECK_THROW( h0e.collectIfDone(), std::runtime_error);
248  // since tc has recover, it must be running
249  BOOST_REQUIRE( tc->isRunning() );
250 
251  // the return value api.
252  BOOST_CHECK_EQUAL( -1.0, h0.ret() );
253  BOOST_CHECK_EQUAL( -2.0, h1.ret(1) );
254  BOOST_CHECK_EQUAL( -3.0, h2.ret(1, 2.0) );
255  BOOST_CHECK_EQUAL( -4.0, h3.ret(1, 2.0, true) );
256  BOOST_CHECK_EQUAL( -5.0, h4.ret(1, 2.0, true,"hello") );
257  BOOST_CHECK_EQUAL( -6.0, h5.ret(1, 2.0, true,"hello",5.0) );
258  BOOST_CHECK_EQUAL( -7.0, h6.ret(1, 2.0, true,"hello",5.0,'a') );
259  BOOST_CHECK_EQUAL( -8.0, h7.ret(1, 2.0, true,"hello",5.0,'a',7) );
260 
261  BOOST_CHECK_THROW( h0e.ret(), std::runtime_error);
262  BOOST_REQUIRE( tc->isRunning() );
263 
264  BOOST_CHECK_EQUAL( -2.0, h1.ret() );
265  BOOST_CHECK_EQUAL( -3.0, h2.ret() );
266  BOOST_CHECK_EQUAL( -4.0, h3.ret() );
267  BOOST_CHECK_EQUAL( -5.0, h4.ret() );
268  BOOST_CHECK_EQUAL( -6.0, h5.ret() );
269  BOOST_CHECK_EQUAL( -7.0, h6.ret() );
270  BOOST_CHECK_EQUAL( -8.0, h7.ret() );
271 }
272 
273 BOOST_AUTO_TEST_CASE(testLocalOperationCallerFactory)
274 {
275  // Test the addition of 'simple' operationCallers to the operation interface,
276  // and retrieving it back in a new OperationCaller object.
277  // local operations do not use the remoting facility.
278 
279  Operation<double(void)> m0("m0");
280  m0.calls(&OperationsFixture::m0, this);
281  Operation<double(int)> m1("m1");
282  m1.calls(&OperationsFixture::m1, this);
284  m2.calls(&OperationsFixture::m2, this);
285  BOOST_CHECK( !m0.ready() );
286  BOOST_CHECK( !m1.ready() );
287  BOOST_CHECK( !m2.ready() );
288 
289  // We deliberately omit the owner 'tc' here:
290  Service::shared_ptr to = Service::Create("task");
291 
292  // allow to add an operation even if no owner is set.
293  BOOST_CHECK( to->addLocalOperation(m0) );
294  BOOST_CHECK( !m0.ready() );
295  // now set the owner and check the op:
296  to->setOwner(tc);
297  BOOST_CHECK( m0.ready() );
298 
299  // Overriding and adding:
300  BOOST_CHECK( to->addLocalOperation(m0) );
301  BOOST_CHECK( to->addLocalOperation(m0) );
302  BOOST_CHECK( to->addLocalOperation(m1) );
303  BOOST_CHECK( to->addLocalOperation(m2) );
304 
305  // test constructor
306  OperationCaller<double(void)> mm0 = to->getLocalOperation("m0");
307  BOOST_CHECK( mm0.getOperationCallerImpl() );
308  BOOST_CHECK( mm0.ready() );
309 
310  // test operator=()
312  mm1 = to->getLocalOperation("m1");
313  BOOST_CHECK( mm1.getOperationCallerImpl() );
314  BOOST_CHECK( mm1.ready() );
315 
316  OperationCaller<double(int,double)> mm2 = to->getLocalOperation("m2");
317  BOOST_CHECK( mm2.getOperationCallerImpl() );
318  BOOST_CHECK( mm2.ready() );
319 
320  // execute operationCallers and check status:
321  BOOST_CHECK_EQUAL( -1.0, mm0() );
322 
323  BOOST_CHECK_EQUAL( -2.0, mm1(1) );
324  BOOST_CHECK_EQUAL( -3.0, mm2(1, 2.0) );
325 
326  // test error cases:
327  // Add uninitialised op:
328  Operation<void(void)> ovoid("ovoid");
329  BOOST_CHECK(to->addLocalOperation( ovoid ) == true);
330  ovoid = Operation<void(void)>("ovoid");
331  BOOST_CHECK(to->addLocalOperation( ovoid ) == true);
332 
333  // wrong type 1:
335  mvoid = to->getLocalOperation("m1");
336  BOOST_CHECK( mvoid.ready() == false );
337  // wrong type 2:
338  mvoid = to->getLocalOperation("m2");
339  BOOST_CHECK( mvoid.ready() == false );
340  // wrong type 3:
341  mvoid = to->getLocalOperation("m0");
342  BOOST_CHECK( mvoid.ready() == false );
343  // non existing
344  mvoid = to->getLocalOperation("voidm");
345  BOOST_CHECK( mvoid.ready() == false );
346 
347  // this line may not crash:
348  mvoid();
349 
350 }
351 
352 BOOST_AUTO_TEST_CASE(testRefAndConstRefOperationCallerCall_ClientThread)
353 {
354  this->ret = -3.3;
355 
356  OperationCaller<double&(void)> m0r("m0r", &OperationsFixture::m0r, this, tc->engine(), caller->engine(), ClientThread );
357  OperationCaller<const double&(void)> m0cr("m0cr", &OperationsFixture::m0cr, this, tc->engine(), caller->engine(), ClientThread );
358 
359  OperationCaller<double(double&)> m1r("m1r", &OperationsFixture::m1r, this, tc->engine(), caller->engine(), ClientThread );
360  OperationCaller<double(const double&)> m1cr("m1cr", &OperationsFixture::m1cr, this, tc->engine(), caller->engine(), ClientThread );
361 
362  BOOST_CHECK_EQUAL( -3.3, m0r() );
363  BOOST_CHECK_EQUAL( -3.3, m0cr() );
364 
365  double value = 5.3;
366  BOOST_CHECK_EQUAL( 5.3*2, m1r(value) );
367  BOOST_CHECK_EQUAL( 5.3*2, value );
368  BOOST_CHECK_EQUAL( 5.3, m1cr(5.3) );
369 }
370 
371 BOOST_AUTO_TEST_CASE(testRefAndConstRefOperationCallerCall_OwnThread)
372 {
373  this->ret = -3.3;
374 
375  OperationCaller<double&(void)> m0r("m0r", &OperationsFixture::m0r, this,tc->engine(), caller->engine(), OwnThread);
376  OperationCaller<const double&(void)> m0cr("m0cr", &OperationsFixture::m0cr, this,tc->engine(), caller->engine(), OwnThread);
377 
378  OperationCaller<double(double&)> m1r("m1r", &OperationsFixture::m1r, this,tc->engine(), caller->engine(), OwnThread);
379  OperationCaller<double(const double&)> m1cr("m1cr", &OperationsFixture::m1cr, this,tc->engine(), caller->engine(), OwnThread);
380 
381  BOOST_CHECK_EQUAL( -3.3, m0r() );
382  BOOST_CHECK_EQUAL( -3.3, m0cr() );
383 
384  double value = 5.3;
385  BOOST_CHECK_EQUAL( 5.3*2, m1r(value) );
386  BOOST_CHECK_EQUAL( 5.3*2, value );
387  BOOST_CHECK_EQUAL( 5.3, m1cr(5.3) );
388 }
389 
390 BOOST_AUTO_TEST_CASE(testDSOperationCaller)
391 {
392  ServicePtr to = Service::Create("task", tc);
393 
394  // A operationCaller of which the first argument type is a pointer to the object
395  // on which it must be invoked. The pointer is internally stored as a weak_ptr,
396  // thus the object must be stored in a shared_ptr, in a DataSource. Scripting
397  // requires this for copying state machines.
398 
400  meth0.calls( boost::bind(&OperationsFixture::m0, _1));
401 
402  //method_ds("m0", &OperationsFixture::m0);
403 
405  meth1.calls(boost::bind(&OperationsFixture::m1, _1,_2));
406 
407  //method_ds("m1", &OperationsFixture::m1);
408  //method_ds("ms",&OperationsFixture::comstr );
409 
410  boost::shared_ptr<OperationsFixture> ptr( new OperationsFixture() );
412  BOOST_CHECK( to->addOperationDS( wp.get(), meth0).doc("desc" ).ready() );
413  BOOST_CHECK( to->addOperationDS( wp.get(), meth1).doc("desc").arg("a1", "d1" ).ready() );
414 
415  // this actually works ! the operationCaller will detect the deleted pointer.
416  //ptr.reset();
417 
418  double ret;
419  OperationCallerC c0 = to->create("m0", tc->engine()).ret(ret);
420  BOOST_CHECK( c0.call() );
421  BOOST_CHECK_EQUAL( -1.0, ret );
422  OperationCallerC c1 = to->create("m1", tc->engine()).argC(1).ret(ret);
423  BOOST_CHECK( c1.call() );
424  BOOST_CHECK_EQUAL( -2.0, ret );
425 
426 }
427 
#define BOOST_FIXTURE_TEST_SUITE(suite_name, F)
double m6(int i, double d, bool c, std::string s, float f, char h)
BOOST_AUTO_TEST_CASE(testClientThreadOperationCaller)
Definition: method_test.cpp:36
#define BOOST_AUTO_TEST_SUITE_END()
double m5(int i, double d, bool c, std::string s, float f)
double m1r(double &a)
const double & m0cr()
boost::shared_ptr< Service > shared_ptr
Definition: Service.hpp:101
double m4(int i, double d, bool c, std::string s)
The SendHandle is used to collect the result values of an asynchronous invocation. The template argument Signature must have the same type as the method being invoked.
Definition: rtt-fwd.hpp:79
double m1cr(const double &a)
boost::shared_ptr< Service > ServicePtr
Definition: rtt-fwd.hpp:86
OperationCallerC & ret(base::AttributeBase *r)
double m3(int i, double d, bool c)
Operation & calls(boost::function< Signature > func, ExecutionThread et=ClientThread, ExecutionEngine *ownerEngine=NULL)
Definition: Operation.hpp:147
DataSource< T >::result_t get() const
Definition: DataSources.hpp:78
double m7(int i, double d, bool c, std::string s, float f, char h, unsigned int st)
SendStatus collect() const
Definition: SendHandle.hpp:124
double m2(int i, double d)


rtt
Author(s): RTT Developers
autogenerated on Tue Jun 25 2019 19:33:25