33#include < cstddef>
44#include < memory>
55#include < new>
6+ #include < ostream>
67
78#include " databento/ireadable.hpp"
89#include " databento/iwritable.hpp"
@@ -22,22 +23,32 @@ class Buffer : public IReadable, public IWritable {
2223 void WriteAll (const char * data, std::size_t length);
2324 void WriteAll (const std::byte* data, std::size_t length) override ;
2425
25- std::byte*& WriteBegin () { return write_pos_; }
26+ std::byte* WriteBegin () { return write_pos_; }
2627 std::byte* WriteEnd () { return end_; }
2728 const std::byte* WriteBegin () const { return write_pos_; }
2829 const std::byte* WriteEnd () const { return end_; }
30+ // Indicate how many bytes were written
31+ void Fill (std::size_t length) { write_pos_ += length; }
2932 std::size_t WriteCapacity () const {
3033 return static_cast <std::size_t >(end_ - write_pos_);
3134 }
3235
33- // / Will throw if `length > ReadCapacity()`.
36+ // Will throw if `length > ReadCapacity()`.
3437 void ReadExact (std::byte* buffer, std::size_t length) override ;
3538 std::size_t ReadSome (std::byte* buffer, std::size_t max_length) override ;
3639
37- std::byte*& ReadBegin () { return read_pos_; }
40+ std::byte* ReadBegin () { return read_pos_; }
3841 std::byte* ReadEnd () { return write_pos_; }
3942 const std::byte* ReadBegin () const { return read_pos_; }
4043 const std::byte* ReadEnd () const { return write_pos_; }
44+ // Indicate how mnay bytes were read
45+ void Consume (std::size_t length) {
46+ read_pos_ += length;
47+ if (static_cast <std::size_t >(read_pos_ - buf_.get ()) > (Capacity () / 2 )) {
48+ Shift ();
49+ }
50+ }
51+ void ConsumeNoShift (std::size_t length) { read_pos_ += length; }
4152 std::size_t ReadCapacity () const {
4253 return static_cast <std::size_t >(write_pos_ - read_pos_);
4354 }
@@ -52,6 +63,8 @@ class Buffer : public IReadable, public IWritable {
5263 void Reserve (std::size_t capacity);
5364 void Shift ();
5465
66+ friend std::ostream& operator <<(std::ostream& stream, const Buffer& buffer);
67+
5568 private:
5669 static constexpr std::align_val_t kAlignment {8 };
5770
0 commit comments