summaryrefslogtreecommitdiff
path: root/src/buffer.hh
blob: ae02e237a93a785f58ca608d3937be63e139d13c (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
#ifndef BUFFER_HH
#define BUFFER_HH

#include "ro_buffer.hh"

#include <memory>

class Buffer : public RoBuffer {
public:
  static std::unique_ptr<Buffer> fixed(size_t size);
  static std::unique_ptr<Buffer> growing(size_t base_size, size_t max_size);
  // Acts as /dev/null, ie always empty, can write anything to it.
  static std::unique_ptr<Buffer> null();

  virtual bool full() const = 0;

  virtual void clear() = 0;

  virtual char* wbuf(size_t request, size_t& avail) = 0;
  virtual void wcommit(size_t bytes) = 0;

  size_t write(void const* data, size_t len);
};

#endif  // BUFFER_HH