
#include <stdlib.h>
#include <string.h>
#include "queue.h"

queue::queue(int elements){
  this->elements = elements;
  this->buffer = (event_t *)malloc(elements * sizeof(event_t));
  this->pread = this->buffer;
  this->pwrite = this->buffer;
}

queue::~queue(){free (this->buffer);}

int queue::read(event_t *e){
  event_t *r = this->pread;
  if (this->pread == this->pwrite) return 0; // no more elements
  memcpy(e, r++, sizeof(event_t));
  if (r >= (this->buffer + this->elements)) r = this->buffer;
  this->pread = r;
  return 1;
}

int queue::write(event_t *e){
  event_t *w = this->pwrite;
  memcpy(w++, e, sizeof(event_t));
  if (w >= (this->buffer + this->elements)) w = this->buffer;
  this->pwrite = w;
  return 1;
}

