NAME
ACE_Future_Rep - ACE_Future_RepT
SYNOPSIS
#include <ace/Future.h>
template<class T>
class ACE_Future_Rep
{
private:
friend class ACE_Future<T>;
int set (const T &r, ACE_Future<T> &caller);
int get (T &value, ACE_Time_Value *tv);
int attach (
ACE_Future_Observer<T> *observer,
ACE_Future<T> &caller
);
int detach (ACE_Future_Observer<T> *observer);
operator T ();
void dump (void) const;
ACE_ALLOC_HOOK_DECLARE;
static ACE_Future_Rep<T> *create (void);
static ACE_Future_Rep<T> *attach (ACE_Future_Rep<T> *&rep);
static void detach (ACE_Future_Rep<T> *&rep);
static void assign (
ACE_Future_Rep<T> *&rep,
ACE_Future_Rep<T> *new_rep
);
int ready (void);
T *value_;
int ref_count_;
typedef ACE_Future_Observer<T> OBSERVER;
typedef ACE_Unbounded_Set<OBSERVER *> OBSERVER_COLLECTION;
OBSERVER_COLLECTION observer_collection_;
ACE_Condition_Thread_Mutex value_ready_;
ACE_Thread_Mutex value_ready_mutex_;
ACE_Future_Rep (void);
~ACE_Future_Rep (void);
};
DESCRIPTION
An ACE_Future_RepT object encapsules a pointer to an object of class T which is the result of an asynchronous method invocation. It is pointed to by ACE_FutureT object[s] and only accessible through them.
Encapsulate reference count and object lifetime of instances.
These methods must go after the others to work around a bug with Borland's C++ Builder...
static ACE_Future_Rep<T> *create (void);
Create a ACE_Future_RepT and initialize the reference count.
static ACE_Future_Rep<T> *attach (ACE_Future_Rep<T> *&rep);
Increase the reference count and return argument. Uses the attribute "value_ready_mutex_" to synchronize reference count updating.
Precondition (rep != 0).
static void detach (ACE_Future_Rep<T> *&rep);
Decreases the reference count and and deletes rep if there are no more references to rep.
Precondition (rep != 0)
static void assign (
ACE_Future_Rep<T> *&rep,
ACE_Future_Rep<T> *new_rep
);
Decreases the rep's reference count and and deletes rep if there are no more references to rep. Then assigns new_rep to rep.
Precondition (rep != 0 && new_rep != 0)
int ready (void);
Is result available?
T *value_;
Pointer to the result.
int ref_count_;
Reference count.
typedef ACE_Future_Observer<T> OBSERVER;
typedef ACE_Unbounded_Set<OBSERVER *> OBSERVER_COLLECTION;
OBSERVER_COLLECTION observer_collection_;
Keep a list of ACE_Future_Observers unread by client's reader thread.
= Condition variable and mutex that protect the value_.
ACE_Condition_Thread_Mutex value_ready_;
ACE_Thread_Mutex value_ready_mutex_;
Constructor and destructor private.
ACE_Future_Rep (void);
~ACE_Future_Rep (void);
AUTHOR (S)
Andres Kruse [email protected], Douglas C. Schmidt [email protected], Per Andersson [email protected], and John Tucker [email protected]
LIBRARY
ace