#include "ioserver.h"
using namespace LCBTest;

Future::Future()
{
    failed = false;
}

void
Future::wait()
{
    mutex.lock();
    while (!isDone() && !failed) {
        cond.wait(mutex);
    }
    mutex.unlock();
}

Future::~Future()
{
    mutex.close();
    cond.close();
}

void
Future::startUpdate()
{
    mutex.lock();
}

void
Future::endUpdate()
{
    if (shouldEnd()) {
        cond.signal();
    }
    mutex.unlock();
}

bool
Future::checkDone()
{
    bool ret;
    if (!mutex.tryLock()) {
        return false;
    }
    ret = isDone();
    mutex.unlock();
    return ret;
}
