1 #ifndef CARMA_CONTROL_REMOTE_OBJ_METHOD_FUNCTOR_H
2 #define CARMA_CONTROL_REMOTE_OBJ_METHOD_FUNCTOR_H
15 template <
typename T >
16 class RemoteObjMethodFunctorBase {
18 RemoteObjMethodFunctorBase(
19 RemoteObjHandleT< T > * remoteObjHandle,
20 const ::std::string & remoteCallString );
22 virtual ~RemoteObjMethodFunctorBase( ) { }
27 virtual void makeRemoteCall(
typename T::_ptr_type remoteObj ) = 0;
29 RemoteObjHandleT< T > *
const remoteObjHandle_;
30 const ::std::string remoteCallString_;
34 template <
typename T >
35 class RemoteObjMethodFunctor0 :
public RemoteObjMethodFunctorBase< T > {
37 RemoteObjMethodFunctor0(
38 RemoteObjHandleT< T > * remoteObjHandle,
39 const ::std::string & remoteCallString,
40 void (T::*methodPtr)( ) );
43 virtual void makeRemoteCall(
typename T::_ptr_type remoteObj );
45 void (T::*methodPtr_)( );
49 template <
typename T,
51 class RemoteObjMethodFunctor1 :
public RemoteObjMethodFunctorBase< T > {
53 RemoteObjMethodFunctor1(
54 RemoteObjHandleT< T > * remoteObjHandle,
55 const ::std::string & remoteCallString,
56 void (T::*methodPtr)( A0 ),
60 virtual void makeRemoteCall(
typename T::_ptr_type remoteObj );
62 void (T::*methodPtr_)( A0 );
67 template <
typename T,
70 class RemoteObjMethodFunctor2 :
public RemoteObjMethodFunctorBase< T > {
72 RemoteObjMethodFunctor2(
73 RemoteObjHandleT< T > * remoteObjHandle,
74 const ::std::string & remoteCallString,
75 void (T::*methodPtr)( A0, A1 ),
80 virtual void makeRemoteCall(
typename T::_ptr_type remoteObj );
82 void (T::*methodPtr_)( A0, A1 );
88 template <
typename T,
92 class RemoteObjMethodFunctor3 :
public RemoteObjMethodFunctorBase< T > {
94 RemoteObjMethodFunctor3(
95 RemoteObjHandleT< T > * remoteObjHandle,
96 const ::std::string & remoteCallString,
97 void (T::*methodPtr)( A0, A1, A2 ),
103 virtual void makeRemoteCall(
typename T::_ptr_type remoteObj );
105 void (T::*methodPtr_)( A0, A1, A2 );
112 template <
typename T,
117 class RemoteObjMethodFunctor4 :
public RemoteObjMethodFunctorBase< T > {
119 RemoteObjMethodFunctor4(
120 RemoteObjHandleT< T > * remoteObjHandle,
121 const ::std::string & remoteCallString,
122 void (T::*methodPtr)( A0, A1, A2, A3 ),
129 virtual void makeRemoteCall(
typename T::_ptr_type remoteObj );
131 void (T::*methodPtr_)( A0, A1, A2, A3 );
139 template <
typename T,
145 class RemoteObjMethodFunctor5 :
public RemoteObjMethodFunctorBase< T > {
147 RemoteObjMethodFunctor5(
148 RemoteObjHandleT< T > * remoteObjHandle,
149 const ::std::string & remoteCallString,
150 void (T::*methodPtr)( A0, A1, A2, A3, A4 ),
158 virtual void makeRemoteCall(
typename T::_ptr_type remoteObj );
160 void (T::*methodPtr_)( A0, A1, A2, A3, A4 );
169 template <
typename T,
179 class RemoteObjMethodFunctor9 :
public RemoteObjMethodFunctorBase< T > {
181 RemoteObjMethodFunctor9(
182 RemoteObjHandleT< T > * remoteObjHandle,
183 const ::std::string & remoteCallString,
184 void (T::*methodPtr)( A0, A1, A2, A3, A4, A5, A6, A7, A8 ),
196 virtual void makeRemoteCall(
typename T::_ptr_type remoteObj );
198 void (T::*methodPtr_)( A0, A1, A2, A3, A4, A5, A6, A7, A8 );
212 template <
typename T >
213 RemoteObjMethodFunctorBase< T >::RemoteObjMethodFunctorBase(
214 RemoteObjHandleT< T > * remoteObjHandle,
215 const ::std::string & remoteCallString ) :
216 remoteObjHandle_( remoteObjHandle ),
217 remoteCallString_( remoteCallString ) {
221 template <
typename T >
223 RemoteObjMethodFunctorBase< T >::operator()( ) {
224 if ( (remoteObjHandle_ != 0) && remoteObjHandle_->isObjReachable( ) ) {
226 typename T::_var_type remoteObject = remoteObjHandle_->remoteObj( );
228 if ( CORBA::is_nil( remoteObject ) ==
false ) {
231 makeRemoteCall( remoteObject );
233 remoteObjHandle_->logSentCommandIfNeeded( remoteCallString_,
236 }
catch (
const CORBA::Exception & ex ) {
237 remoteObjHandle_->processException( remoteCallString_, ex );
243 template <
typename T >
244 RemoteObjMethodFunctor0< T >::RemoteObjMethodFunctor0(
245 RemoteObjHandleT< T > * remoteObjHandle,
246 const ::std::string & remoteCallString,
247 void (T::*methodPtr)( ) ) :
248 RemoteObjMethodFunctorBase< T >( remoteObjHandle, remoteCallString ),
249 methodPtr_( methodPtr ) {
253 template <
typename T,
255 RemoteObjMethodFunctor1< T, A0 >::RemoteObjMethodFunctor1(
256 RemoteObjHandleT< T > * remoteObjHandle,
257 const ::std::string & remoteCallString,
258 void (T::*methodPtr)( A0 ),
260 RemoteObjMethodFunctorBase< T >( remoteObjHandle, remoteCallString ),
261 methodPtr_( methodPtr ),
266 template <
typename T,
269 RemoteObjMethodFunctor2< T, A0, A1 >::RemoteObjMethodFunctor2(
270 RemoteObjHandleT< T > * remoteObjHandle,
271 const ::std::string & remoteCallString,
272 void (T::*methodPtr)( A0, A1 ),
275 RemoteObjMethodFunctorBase< T >( remoteObjHandle, remoteCallString ),
276 methodPtr_( methodPtr ),
282 template <
typename T,
286 RemoteObjMethodFunctor3< T, A0, A1, A2 >::RemoteObjMethodFunctor3(
287 RemoteObjHandleT< T > * remoteObjHandle,
288 const ::std::string & remoteCallString,
289 void (T::*methodPtr)( A0, A1, A2 ),
293 RemoteObjMethodFunctorBase< T >( remoteObjHandle, remoteCallString ),
294 methodPtr_( methodPtr ),
301 template <
typename T,
306 RemoteObjMethodFunctor4< T, A0, A1, A2, A3 >::RemoteObjMethodFunctor4(
307 RemoteObjHandleT< T > * remoteObjHandle,
308 const ::std::string & remoteCallString,
309 void (T::*methodPtr)( A0, A1, A2, A3 ),
314 RemoteObjMethodFunctorBase< T >( remoteObjHandle, remoteCallString ),
315 methodPtr_( methodPtr ),
323 template <
typename T,
329 RemoteObjMethodFunctor5< T, A0, A1, A2, A3, A4 >::RemoteObjMethodFunctor5(
330 RemoteObjHandleT< T > * remoteObjHandle,
331 const ::std::string & remoteCallString,
332 void (T::*methodPtr)( A0, A1, A2, A3, A4 ),
338 RemoteObjMethodFunctorBase< T >( remoteObjHandle, remoteCallString ),
339 methodPtr_( methodPtr ),
348 template <
typename T,
358 RemoteObjMethodFunctor9< T, A0, A1, A2, A3, A4, A5, A6, A7, A8 >::RemoteObjMethodFunctor9(
359 RemoteObjHandleT< T > * remoteObjHandle,
360 const ::std::string & remoteCallString,
361 void (T::*methodPtr)( A0, A1, A2, A3, A4, A5, A6, A7, A8 ),
371 RemoteObjMethodFunctorBase< T >( remoteObjHandle, remoteCallString ),
372 methodPtr_( methodPtr ),
384 template <
typename T >
386 RemoteObjMethodFunctor0< T >::makeRemoteCall(
387 typename T::_ptr_type remoteObj ) {
388 (remoteObj->*methodPtr_)( );
392 template <
typename T,
395 RemoteObjMethodFunctor1< T, A0 >::makeRemoteCall(
396 typename T::_ptr_type remoteObj ) {
397 (remoteObj->*methodPtr_)( arg0_ );
401 template <
typename T,
405 RemoteObjMethodFunctor2< T, A0, A1 >::makeRemoteCall(
406 typename T::_ptr_type remoteObj ) {
407 (remoteObj->*methodPtr_)( arg0_, arg1_ );
411 template <
typename T,
416 RemoteObjMethodFunctor3< T, A0, A1, A2 >::makeRemoteCall(
417 typename T::_ptr_type remoteObj ) {
418 (remoteObj->*methodPtr_)( arg0_, arg1_, arg2_ );
422 template <
typename T,
428 RemoteObjMethodFunctor4< T, A0, A1, A2, A3 >::makeRemoteCall(
429 typename T::_ptr_type remoteObj ) {
430 (remoteObj->*methodPtr_)( arg0_, arg1_, arg2_, arg3_ );
434 template <
typename T,
441 RemoteObjMethodFunctor5< T, A0, A1, A2, A3, A4 >::makeRemoteCall(
442 typename T::_ptr_type remoteObj ) {
443 (remoteObj->*methodPtr_)( arg0_, arg1_, arg2_, arg3_, arg4_ );
446 template <
typename T,
457 RemoteObjMethodFunctor9< T, A0, A1, A2, A3, A4, A5, A6, A7, A8 >::makeRemoteCall(
458 typename T::_ptr_type remoteObj ) {
459 (remoteObj->*methodPtr_)( arg0_, arg1_, arg2_, arg3_,
460 arg4_, arg5_, arg6_, arg7_, arg8_ );
Manages connection to remote DO.
static double MJD()
Get current MJD.