summaryrefslogtreecommitdiff
path: root/src/buffer.hh
blob: 7f11a7cd56e6f13a546a113519054ecd277626b4 (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;

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

#endif  // BUFFER_HH