#include "WrappedSemaphore.h"

using namespace bell;

WrappedSemaphore::WrappedSemaphore(int count) {
  this->semaphoreHandle = CreateSemaphore(NULL, 0, count, NULL);
}

WrappedSemaphore::~WrappedSemaphore() {
  CloseHandle(this->semaphoreHandle);
}

int WrappedSemaphore::wait() {
  WaitForSingleObject(this->semaphoreHandle, INFINITE);
  return 0;
}

int WrappedSemaphore::twait(long milliseconds) {
  return WaitForSingleObject(this->semaphoreHandle, milliseconds) !=
         WAIT_OBJECT_0;
}

void WrappedSemaphore::give() {
  ReleaseSemaphore(this->semaphoreHandle, 1, NULL);
}