7#ifndef RABIT_INTERNAL_IO_H_
8#define RABIT_INTERNAL_IO_H_
31 static std::size_t
constexpr kSeekEnd = std::numeric_limits<std::size_t>::max();
44 std::size_t Read(
void *ptr, std::size_t size)
override {
50 void Write(
const void *ptr, std::size_t size)
override {
51 if (size == 0)
return;
56 void Seek(std::size_t pos)
override {
57 if (pos == kSeekEnd) {
60 curr_ptr_ =
static_cast<std::size_t
>(pos);
82 : p_buffer_(p_buffer) {
86 size_t Read(
void *ptr,
size_t size)
override {
88 "read can not have position excceed buffer length");
89 size_t nread = std::min(p_buffer_->length() - curr_ptr_, size);
90 if (nread != 0) std::memcpy(ptr, &(*p_buffer_)[0] + curr_ptr_, nread);
94 void Write(
const void *ptr,
size_t size)
override {
95 if (size == 0)
return;
96 if (curr_ptr_ + size > p_buffer_->length()) {
97 p_buffer_->resize(curr_ptr_+size);
99 std::memcpy(&(*p_buffer_)[0] + curr_ptr_, ptr, size);
102 void Seek(
size_t pos)
override {
103 curr_ptr_ =
static_cast<size_t>(pos);
108 virtual bool AtEnd()
const {
109 return curr_ptr_ == p_buffer_->length();
114 std::string *p_buffer_;
interface of i/o stream that support seek
Definition io.h:109
namespace for helper utils of the project
Definition io.h:22
void Assert(bool exp, const char *fmt,...)
assert a condition is true, use this to handle debug information
Definition utils.h:79
defines serializable interface of rabit
a in memory buffer that can be read and write as stream interface
Definition io.h:79
void Write(const void *ptr, size_t size) override
writes data to a stream
Definition io.h:94
size_t Tell() override
tell the position of the stream
Definition io.h:105
void Seek(size_t pos) override
seek to certain position of the file
Definition io.h:102
size_t Read(void *ptr, size_t size) override
reads data from a stream
Definition io.h:86
Fixed size memory buffer as a stream.
Definition io.h:28
std::size_t buffer_size_
current pointer
Definition io.h:73
MemoryFixSizeBuffer(void *p_buffer, std::size_t buffer_size)
Ctor.
Definition io.h:40
char * p_buffer_
in memory buffer
Definition io.h:71
std::size_t Tell() override
Current position in the buffer (stream).
Definition io.h:66
std::size_t curr_ptr_
current pointer
Definition io.h:75
simple utils to support the code