#ifndef __RESULTIOU__H_
#define __RESULTIOU__H_
#include "refcountbase.h"
#include "mutex.h"
#include "event.h"
template<class T>
class ResultIOU_ : public RefCountBase
{
public:
ResultIOU_();
virtual ~ResultIOU_();
ResultIOU_(const ResultIOU_& rhs);
ResultIOU_&
operator=(const ResultIOU_& rhs);
void Abort();
T Redeem();
bool Redeemable() const;
bool Aborted() const;
void Close(T t);
private:
T t_;
Event closedEvent_;
Mutex mutex_;
bool resultReady_;
bool aborted_;
};