#ifndef IMAGEBUFFER_H
#define IMAGEBUFFER_H

#include <QMutex>
#include <QObject>
#include <QWaitCondition>
#include <myimage.h>


class ImageBuffer : public QObject
{
  Q_OBJECT
public:
  explicit ImageBuffer(size_t buffer_size=100, QObject *parent = nullptr);
  ~ImageBuffer();

  void clear();
  void resize(size_t new_size);
  void push(MyImage *img);
  MyImage* pop();
  MyImage* readLast();
  size_t capacity();
  double bufferPreassure();
  size_t bufferLoad();
  bool bufferNotEmpty();

private:
  QMutex mutex;
  int numUsedBytes = 0;

  std::vector<MyImage*> buffer;
  size_t current_write_index = 0;
  size_t current_read_index = 0;
  size_t load = 0;
  size_t buffer_size;

signals:

public slots:
};

#endif // IMAGEBUFFER_H