8#ifndef SEN_LIBS_CORE_TEST_SUPPORT_READER_WRITER_H
9#define SEN_LIBS_CORE_TEST_SUPPORT_READER_WRITER_H
32 buffer_.resize(buffer_.size() + size);
33 return makeSpan(&buffer_[cursor_], size);
39 cursor_ += buffer.
size();
42 std::vector<uint8_t>&
getBuffer() noexcept {
return buffer_; }
44 [[nodiscard]] std::size_t
getWriteCount() const noexcept {
return writeCount_; }
48 const auto cursor = buffer_.size();
49 buffer_.resize(buffer_.size() + size);
50 return std::next(buffer_.data(),
static_cast<int>(cursor));
53 void reverse(
size_t size)
override { buffer_.resize(buffer_.size() - size); };
56 std::vector<uint8_t> buffer_;
57 std::size_t cursor_ = 0U;
58 std::size_t writeCount_ = 0U;
66 inline explicit TestReader(
const std::vector<uint8_t>& buffer)
noexcept: buffer_(buffer) {}
75 auto nextCursor = cursor_ + size;
76 if (nextCursor > buffer_.size())
78 sen::throwRuntimeError(
"input buffer underflow");
81 auto ptr = &buffer_[cursor_];
86 const std::vector<uint8_t>&
getBuffer() noexcept {
return buffer_; }
88 [[nodiscard]] std::size_t
getReadCount() const noexcept {
return readCount_; }
91 const std::vector<uint8_t>& buffer_;
92 std::size_t cursor_ = 0U;
93 std::size_t readCount_ = 0U;
107 [[nodiscard]]
const std::vector<uint8_t>&
getBuffer() const noexcept {
return buffer_; }
110 std::vector<uint8_t> buffer_;
116 std::vector<uint8_t> result;
118 if constexpr (std::is_same_v<T, std::string>)
122 result.resize(data.size());
123 std::memcpy(result.data(), data.data(), data.size());
129 const auto* dataPtr =
reinterpret_cast<const uint8_t*
>(&data);
130 for (std::size_t i = 0U; i <
sizeof(T); ++i)
132 result.push_back(*(std::next(dataPtr,
static_cast<int>(i))));
Contiguous view of elements of type T. Inspired by http://www.open-std.org/jtc1/sc22/wg21/docs/papers...
Definition span.h:34
constexpr std::size_t size() const noexcept
Number of elements covered by the Span.
Definition span.h:133
Writer() noexcept=default
BufferedTestReader() noexcept
Definition reader_writer.h:101
~BufferedTestReader() noexcept override=default
const std::vector< uint8_t > & getBuffer() const noexcept
Definition reader_writer.h:107
std::vector< uint8_t > & getBuffer() noexcept
Definition reader_writer.h:105
Span< const uint8_t > read(size_t size)
Definition reader_writer.h:71
std::size_t getReadCount() const noexcept
Definition reader_writer.h:88
TestReader(const std::vector< uint8_t > &buffer) noexcept
Definition reader_writer.h:66
const std::vector< uint8_t > & getBuffer() noexcept
Definition reader_writer.h:86
virtual ~TestReader() noexcept=default
Span< uint8_t > loanBuffer(size_t size)
Definition reader_writer.h:30
uint8_t * advance(size_t size) override
Returns a buffer of 'size' bytes, owned by the writer.
Definition reader_writer.h:46
TestWriter() noexcept=default
std::vector< uint8_t > & getBuffer() noexcept
Definition reader_writer.h:42
std::size_t getWriteCount() const noexcept
Definition reader_writer.h:44
void returnBuffer(Span< uint8_t > buffer)
Definition reader_writer.h:36
void reverse(size_t size) override
Moves the cursor 'size' bytes.
Definition reader_writer.h:53
constexpr Span< T > makeSpan(T *ptr, std::size_t size) noexcept
Takes in a type that can be passed to a contiguous range and returns a Span.
Definition span.h:201
constexpr Span< const T > makeConstSpan(const T *ptr, std::size_t size) noexcept
Takes in a type that can be passed to a contiguous range and returns a Span. The element types will b...
Definition span.h:248
Definition reader_writer.h:19
std::vector< uint8_t > valueToBytes(const T data)
Definition reader_writer.h:114