hessian2/string_reader.hpp (21 lines of code) (raw):
#pragma once
#include "absl/base/macros.h"
#include "absl/strings/string_view.h"
#include "hessian2/reader.hpp"
namespace Hessian2 {
class StringReader : public Reader {
public:
StringReader(absl::string_view data) : buffer_(data){};
virtual ~StringReader() = default;
virtual void rawReadNBytes(void* out, size_t len,
size_t peek_offset) override {
ABSL_ASSERT(byteAvailable() + peek_offset >= len);
absl::string_view data = buffer_.substr(offset() + peek_offset, len);
uint8_t* dest = static_cast<uint8_t*>(out);
memcpy(dest, data.data(), len);
}
virtual uint64_t length() const override { return buffer_.size(); }
private:
absl::string_view buffer_;
};
} // namespace Hessian2