Reference

Active Objects

namespace poet {
  template<typename Signature> class active_function;
}
namespace poet {
  typedef boost::shared_ptr<detail::_exp_throwable> exception_ptr;
  exception_ptr current_exception();

  // Throws the exception held by the exception_ptr
  void rethrow_exception(exception_ptr p);

  // Creates an exception_ptr from an exception.
  template<typename E> exception_ptr copy_exception(E e);
}
namespace poet {
  class cancelled_future;
  class uncertain_future;
  class unknown_exception;
}

Header <poet/future.hpp>

namespace poet {
  template<typename T> class future;
  template<typename T> void swap(future<T> &, future<T> &);

  template<> class future<void>;

  template<typename T> class promise;
  template<typename T> void swap(promise<T> &, promise<T> &);

  template<> class promise<void>;
}
namespace poet {
  struct null_type;
  template<typename T1, typename T2> 
    future<void> future_barrier(const future<T1> &, const future<T1> &);
  template<typename T1, typename T2, ..., typename TN> 
    future<void> 
    future_barrier(const future<T1> &, const future<T2> &, ..., 
                   const future<TN> &);
  template<typename FutureInputIterator> 
    future<void> 
    future_barrier_range(FutureInputIterator, FutureInputIterator);
  template<typename R, typename Combiner, typename ExceptionHandler, 
           typename T1> 
    future<R> future_combining_barrier(const Combiner &, 
                                       const ExceptionHandler &, 
                                       const future<T1> &);
  template<typename R, typename Combiner, typename ExceptionHandler, 
           typename T1, typename T2> 
    future<R> future_combining_barrier(const Combiner &, 
                                       const ExceptionHandler &, 
                                       const future<T1> &, 
                                       const future<T1> &);
  template<typename R, typename Combiner, typename ExceptionHandler, 
           typename T1, typename T2, ..., typename TN> 
    future<R> future_combining_barrier(const Combiner &, 
                                       const ExceptionHandler &, 
                                       const future<T1> &, 
                                       const future<T2> &, ..., 
                                       const future<TN> &);
  template<typename R, typename Combiner, typename ExceptionHandler, 
           typename FutureInputIterator> 
    future<R> future_combining_barrier_range(const Combiner &, 
                                             const ExceptionHandler &, 
                                             FutureInputIterator, 
                                             FutureInputIterator);
}
namespace poet {
  template<typename T> class future_selector;
  template<typename T> void swap(future_selector<T> &, future_selector<T> &);
  template<typename T> 
    future<T> future_select(const future<T> &, const future<T> &);
  template<typename T> 
    future<T> future_select(const future<T> &, const future<T> &, ..., 
                            const future<T> &);
  template<typename InputFutureIterator> 
    future<std::iterator_traits<InputFutureIterator>::value_type> 
    future_select_range(InputFutureIterator, InputFutureIterator);
}

Monitor Objects

namespace poet {
  class monitor_base;
}
namespace poet {
  template<typename T, typename Mutex = boost::mutex> class monitor_ptr;
  template<typename T, typename U, typename Mutex> 
    monitor_ptr<T, Mutex> static_pointer_cast(const monitor_ptr<U, Mutex> &);
  template<typename T, typename U, typename Mutex> 
    monitor_ptr<T, Mutex> dynamic_pointer_cast(const monitor_ptr<U, Mutex> &);
  template<typename T, typename U, typename Mutex> 
    monitor_ptr<T, Mutex> const_pointer_cast(const monitor_ptr<U, Mutex> &);
  template<typename T, typename MutexA, typename U, typename MutexB> 
    bool operator==(const monitor_ptr<T, MutexT> &, 
                    const monitor_ptr<U, MutexU> &);
  template<typename T, typename MutexA, typename U, typename MutexB> 
    bool operator!=(const monitor_ptr<T, MutexT> &, 
                    const monitor_ptr<U, MutexU> &);
  template<typename T, typename MutexA, typename U, typename MutexB> 
    bool operator<(const monitor_ptr<T, MutexT> &, 
                   const monitor_ptr<U, MutexU> &);
  template<typename T, typename Mutex> 
    void swap(monitor_ptr<T, Mutex> &, monitor_ptr<T, Mutex> &);
}

Header <poet/monitor.hpp>

namespace poet {
  template<typename T, typename Mutex = boost::mutex> class monitor;
  template<typename T, typename Mutex> 
    void swap(monitor<T, Mutex> &, monitor<T, Mutex> &);
}
namespace poet {
  template<typename MonitorType> class monitor_unique_lock;
  template<typename Monitor> 
    boost::detail::thread_move_t<monitor_unique_lock<Monitor> > 
    move(monitor_unique_lock<Monitor> &);
  template<typename Monitor> 
    void swap(monitor_unique_lock<Monitor> &, monitor_unique_lock<Monitor> &);
  template<typename MonitorType> class monitor_shared_lock;
  template<typename Monitor> 
    boost::detail::thread_move_t<monitor_shared_lock<Monitor> > 
    move(monitor_shared_lock<Monitor> &);
  template<typename Monitor> 
    void swap(monitor_shared_lock<Monitor> &, monitor_shared_lock<Monitor> &);
  template<typename MonitorType> class monitor_upgrade_lock;
  template<typename Monitor> 
    boost::detail::thread_move_t<monitor_upgrade_lock<Monitor> > 
    move(monitor_upgrade_lock<Monitor> &);
  template<typename Monitor> 
    void swap(monitor_upgrade_lock<Monitor> &, 
              monitor_upgrade_lock<Monitor> &);
  template<typename MonitorType> class monitor_upgrade_to_unique_lock;
  template<typename Monitor> 
    boost::detail::thread_move_t<monitor_upgrade_to_unique_lock<Monitor> > 
    move(monitor_upgrade_to_unique_lock<Monitor> &);
  template<typename Monitor> 
    void swap(monitor_upgrade_to_unique_lock<Monitor> &, 
              monitor_upgrade_to_unique_lock<Monitor> &);
}

Mutex Debugging

namespace poet {
  class acyclic_mutex_base;
}
namespace poet {
  template<typename Mutex = boost::mutex, typename Key = std::string, 
           typename KeyCompare = std::less<Key> > 
    class acyclic_mutex;
}
namespace poet {
  class mutex_grapher;
}

Miscellaneous

namespace poet {
  template<typename Mutex> class mutex_properties;

  enum mutex_model { Lockable, TimedLockable, SharedLockable, UpgradeLockable };
}