MIRA
Public Types | Public Member Functions | Protected Attributes | List of all members
SDOFuture< R > Class Template Reference

A SDOFuture is a proxy for the result of an asynchronous SDO upload or download. More...

#include <can/SDOFuture.h>

Inheritance diagram for SDOFuture< R >:
Inheritance graph
[legend]

Public Types

typedef boost::detail::future_traits< R >::move_dest_type ReturnValue
 The rvalue return value, which essentially can be thought of R&&. More...
 

Public Member Functions

 SDOFuture ()
 
 SDOFuture (boost::unique_future< R > other, SDOClientBase *client, uint64 requestID)
 
 SDOFuture (SDOFuture &&other)
 move constructor More...
 
SDOFutureoperator= (SDOFuture &&other)
 move assignment operator More...
 
 operator ReturnValue ()
 Casts the return value of the SDO up/download associated to this future to R&&. More...
 
ReturnValue get ()
 Obtains the return value of the SDO up/download associated to this future as rvalue R&&. More...
 
bool isReady () const
 Checks to see if the result of the RPC call associated with this future is set. More...
 
bool hasException () const
 Returns true if the RPC call associated with this future has finished with an exception rather than a return value. More...
 
bool hasValue () const
 Returns true if the RPC call associated with this future has finished with a return value value rather than an exception. More...
 
void wait () const
 Waits and blocks the current thread until the result of the associated RPC call is ready. More...
 
template<typename Duration >
bool timedWait (Duration const &relTime) const
 Waits and blocks the current thread until the result of the associated RPC call is ready, or the time duration specified by waitDuration has elapsed. More...
 
bool timedWaitUntil (boost::system_time const &absTime) const
 Waits and blocks the current thread until the result of the associated RPC call is ready, or the time point specified by waitDuration has passed. More...
 
void swap (SDOFutureCommon< R > &other)
 Swaps ownership of the asynchronous results associated with other and *this. More...
 

Protected Attributes

SDOClientBasemClient
 
uint64 mRequestID
 
boost::unique_future< R > mFuture
 

Detailed Description

template<typename R>
class mira::can::SDOFuture< R >

A SDOFuture is a proxy for the result of an asynchronous SDO upload or download.

It can be used to block the calling thread until the SDO up/download has finished and the result is available. The use of futures dramatically reduces latency in SDO calls, since the caller can decide whether it wants to wait for the result or not and where it wants to wait for the result.

The SDOFuture cannot be shared, however, the ownership can be transferred between different instances using the move constructor or move-assignment operator, but at most one instance holds a reference to a given asynchronous result. When the result is ready, it can be returned using get() by rvalue-reference to allow the result to be moved or copied as appropriate for the type.

Member Typedef Documentation

◆ ReturnValue

typedef boost::detail::future_traits<R>::move_dest_type ReturnValue

The rvalue return value, which essentially can be thought of R&&.

Constructor & Destructor Documentation

◆ SDOFuture() [1/3]

SDOFuture ( )
inline

◆ SDOFuture() [2/3]

SDOFuture ( boost::unique_future< R >  other,
SDOClientBase client,
uint64  requestID 
)
inline

◆ SDOFuture() [3/3]

SDOFuture ( SDOFuture< R > &&  other)
inline

move constructor

Member Function Documentation

◆ operator=()

SDOFuture& operator= ( SDOFuture< R > &&  other)
inline

move assignment operator

◆ operator ReturnValue()

operator ReturnValue ( )
inline

Casts the return value of the SDO up/download associated to this future to R&&.

Note
This cast will block until the the result becomes available.
See also
wait(), timedWait(), hasValue()

◆ get()

ReturnValue get ( )
inline

Obtains the return value of the SDO up/download associated to this future as rvalue R&&.

Note
This method will block until the result becomes available.
This method will throw the exception that may have occurred on the server side while processing the call.
See also
wait(), timedWait(), hasValue(), hasException()

◆ isReady()

bool isReady ( ) const
inlineinherited

Checks to see if the result of the RPC call associated with this future is set.

◆ hasException()

bool hasException ( ) const
inlineinherited

Returns true if the RPC call associated with this future has finished with an exception rather than a return value.

◆ hasValue()

bool hasValue ( ) const
inlineinherited

Returns true if the RPC call associated with this future has finished with a return value value rather than an exception.

◆ wait()

void wait ( ) const
inlineinherited

Waits and blocks the current thread until the result of the associated RPC call is ready.

This is an interruption point.

◆ timedWait()

bool timedWait ( Duration const &  relTime) const
inlineinherited

Waits and blocks the current thread until the result of the associated RPC call is ready, or the time duration specified by waitDuration has elapsed.

This is an interruption point.

◆ timedWaitUntil()

bool timedWaitUntil ( boost::system_time const &  absTime) const
inlineinherited

Waits and blocks the current thread until the result of the associated RPC call is ready, or the time point specified by waitDuration has passed.

This is an interruption point.

◆ swap()

void swap ( SDOFutureCommon< R > &  other)
inlineinherited

Swaps ownership of the asynchronous results associated with other and *this.

Member Data Documentation

◆ mClient

SDOClientBase* mClient
protectedinherited

◆ mRequestID

uint64 mRequestID
protectedinherited

◆ mFuture

boost::unique_future<R> mFuture
protectedinherited

The documentation for this class was generated from the following file: