cwidget::threads::box< T > Class Template Reference

A higher-level abstraction borrowed from Concurrent Haskell, which borrowed it from another language I forget. More...

#include <threads.h>

List of all members.

Public Member Functions

 box ()
 Create an empty box.
 box (const T &_val)
 Create a box containing the given value.
take ()
 Retrieve the current value of this box.
void put (const T &t)
 Fill this box with a value.
bool try_take (T &out)
 If there is a value in the box, retrieve it immediately; otherwise do nothing.
bool try_put (const T &t)
 If the box is empty, place a value in it; otherwise, do nothing.
bool timed_take (T &out, const timespec &until)
 As try_take(), but wait for the given amount of time before giving up.
bool timed_put (const T &t, const timespec &until)
 As try_put(), but wait for the given amount of time before giving up.
template<typename Mutator>
void update (const Mutator &m)
 Atomically modify the contents of the box; if an exception is thrown by the given function object, no action will be performed.


Detailed Description

template<typename T>
class cwidget::threads::box< T >

A higher-level abstraction borrowed from Concurrent Haskell, which borrowed it from another language I forget.

This represents a "box" that can either hold a value or be empty. Any thread can take the current value of the box or place a new value inside it; the attempt will block until a value is available or the box is empty, respectively. It's sort of a single-element bounded communications channel.

The value in the box is stored with copying semantics. Like the other threading primitives, boxes are not copyable.


Constructor & Destructor Documentation

template<typename T>
cwidget::threads::box< T >::box (  )  [inline]

Create an empty box.

template<typename T>
cwidget::threads::box< T >::box ( const T &  _val  )  [inline]

Create a box containing the given value.


Member Function Documentation

template<typename T>
T cwidget::threads::box< T >::take (  )  [inline]

Retrieve the current value of this box.

If the box is empty, block until it is full.

References cwidget::threads::condition::wait().

template<typename T>
void cwidget::threads::box< T >::put ( const T &  t  )  [inline]

Fill this box with a value.

If the box is full, block until it is empty.

References cwidget::threads::condition::wait(), and cwidget::threads::condition::wake_one().

template<typename T>
bool cwidget::threads::box< T >::try_take ( T &  out  )  [inline]

If there is a value in the box, retrieve it immediately; otherwise do nothing.

Parameters:
out the location in which the value should be stored
Returns:
true iff a value was found in the box

template<typename T>
bool cwidget::threads::box< T >::try_put ( const T &  t  )  [inline]

If the box is empty, place a value in it; otherwise, do nothing.

Parameters:
t the value to place in the box
Returns:
true iff the box was empty (and hence was filled with t)

References cwidget::threads::condition::wake_one().


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

Generated on Mon Jul 7 11:11:55 2008 for cwidget by  doxygen 1.5.6