Orocos Real-Time Toolkit  2.9.0
SendHandle.hpp
Go to the documentation of this file.
1 /***************************************************************************
2  tag: The SourceWorks Tue Sep 7 00:55:18 CEST 2010 SendHandle.hpp
3 
4  SendHandle.hpp - description
5  -------------------
6  begin : Tue September 07 2010
7  copyright : (C) 2010 The SourceWorks
8  email : peter@thesourceworks.com
9 
10  ***************************************************************************
11  * This library is free software; you can redistribute it and/or *
12  * modify it under the terms of the GNU General Public *
13  * License as published by the Free Software Foundation; *
14  * version 2 of the License. *
15  * *
16  * As a special exception, you may use this file as part of a free *
17  * software library without restriction. Specifically, if other files *
18  * instantiate templates or use macros or inline functions from this *
19  * file, or you compile this file and link it with other files to *
20  * produce an executable, this file does not by itself cause the *
21  * resulting executable to be covered by the GNU General Public *
22  * License. This exception does not however invalidate any other *
23  * reasons why the executable file might be covered by the GNU General *
24  * Public License. *
25  * *
26  * This library is distributed in the hope that it will be useful, *
27  * but WITHOUT ANY WARRANTY; without even the implied warranty of *
28  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU *
29  * Lesser General Public License for more details. *
30  * *
31  * You should have received a copy of the GNU General Public *
32  * License along with this library; if not, write to the Free Software *
33  * Foundation, Inc., 59 Temple Place, *
34  * Suite 330, Boston, MA 02111-1307 USA *
35  * *
36  ***************************************************************************/
37 
38 
39 #ifndef ORO_CORELIB_SEND_HANDLE_HPP
40 #define ORO_CORELIB_SEND_HANDLE_HPP
41 
42 #include "rtt-config.h"
43 #include "Logger.hpp"
45 #include "internal/CollectBase.hpp"
47 #include "internal/ReturnBase.hpp"
48 #include <boost/type_traits.hpp>
49 
50 namespace RTT
51 {
57  template<class Signature>
58  class SendHandle
59  : public internal::CollectSignature<boost::function_traits<typename internal::CollectType<Signature>::Ft>::arity,
60  typename internal::CollectType<Signature>::Ft,
61  internal::CollectBase<Signature>* >,
62  public internal::ReturnSignature<boost::function_traits<Signature>::arity,
63  Signature,
64  typename internal::CollectBase<Signature>::shared_ptr >
65  {
66  public:
67  typedef internal::CollectSignature<boost::function_traits<typename internal::CollectType<Signature>::Ft>::arity,
71  Signature,
77 
78  SendHandle(typename internal::CollectBase<Signature>::shared_ptr coll) : CBase( coll.get() ), RBase(coll) {}
79 
83  SendHandle(const SendHandle& hs) : CBase(hs.cimpl), RBase(hs.impl) {}
84 
89  //impl->dispose();
90  }
91 
93  {
94  if (this->RBase::impl && this->RBase::impl == implementation)
95  return *this;
96  this->RBase::impl.reset( boost::dynamic_pointer_cast< internal::ReturnBase<Signature> >(implementation) );
97  if ( !this->RBase::impl && implementation ) {
98  log(Error) << "Tried to assign SendHandle from incompatible type."<< endlog();
99  }
100  this->CBase::cimpl = dynamic_cast< internal::CollectBase<Signature>* >(implementation);
101  if ( !this->CBase::cimpl && implementation ) {
102  log(Error) << "Tried to assign SendHandle from incompatible type."<< endlog();
103  }
104  return *this;
105  }
106 
111  operator bool() const { return ready();}
112 
117  bool ready() const { return this->CBase::cimpl && this->RBase::impl ;}
118 
119  using CBase::collect;
120 
125  {
126  if (this->impl)
127  return this->impl->collect();
128  return SendFailure;
129  }
130  protected:
131  };
132 }
133 #endif
This is the base class that defines the interface of returning data from method invocations.
Definition: ReturnBase.hpp:60
SendHandle(const SendHandle &hs)
Create a copy-equivalent SendHandle.
Definition: SendHandle.hpp:83
ft::function_type< fttype >::type Ft
internal::ReturnSignature< boost::function_traits< Signature >::arity, Signature, typename internal::CollectBase< Signature >::shared_ptr > RBase
Definition: SendHandle.hpp:72
~SendHandle()
No-op destructor, does not change signal/slot state.
Definition: SendHandle.hpp:88
boost::shared_ptr< CollectBase< F > > shared_ptr
Definition: CollectBase.hpp:73
SendHandle()
Create an empty SendHandle.
Definition: SendHandle.hpp:76
SendStatus
Returns the status of a send() or collect() invocation.
Definition: SendStatus.hpp:53
The SendHandle is used to collect the result values of an asynchronous invocation.
Definition: rtt-fwd.hpp:79
Returned when the result of the send() could not be collected.
Definition: SendStatus.hpp:55
An object that is executable and is freed after execution.
SendHandle & operator=(base::DisposableInterface *implementation)
Definition: SendHandle.hpp:92
This struct takes the user&#39;s Function signature F and transforms it to the form required in the Colle...
Definition: CollectBase.hpp:69
Defines ret(), given a Signature.
SendStatus collect() const
Collect this operator if the method has no arguments.
Definition: SendHandle.hpp:124
Contains TaskContext, Activity, OperationCaller, Operation, Property, InputPort, OutputPort, Attribute.
Definition: Activity.cpp:52
internal::CollectSignature< boost::function_traits< typename internal::CollectType< Signature >::Ft >::arity, typename internal::CollectType< Signature >::Ft, internal::CollectBase< Signature > * > CBase
Definition: SendHandle.hpp:69
bool ready() const
Inspect if this SendHandle is pointing to valid (existing) invocation.
Definition: SendHandle.hpp:117
SendHandle(typename internal::CollectBase< Signature >::shared_ptr coll)
Definition: SendHandle.hpp:78