25 #ifndef SER4CPP_WSEQ_H 26 #define SER4CPP_WSEQ_H 28 #include "ser4cpp/container/RSeq.h" 29 #include "ser4cpp/util/Comparisons.h" 44 typedef void* (memfunc_t)(
void*,
const void*,
size_t);
55 WSeq(uint8_t* buffer, uint32_t length) :
HasLength<L>(length), buffer_(buffer)
58 void set_all_to(uint8_t value)
60 memset(this->buffer_, value, this->length());
65 this->buffer_ =
nullptr;
71 const auto num = ser4cpp::min(count, this->length());
73 this->m_length -= num;
77 bool put(uint8_t
byte)
79 if (this->length() == 0)
return false;
82 this->buffer_[0] = byte;
89 WSeq skip(uint32_t count)
const 91 const auto num = ser4cpp::min(count, this->m_length);
92 return WSeq(this->buffer_ + num, this->m_length - num);
95 WSeq take(uint32_t count)
const 97 return WSeq(this->buffer_, ser4cpp::min(this->m_length, count));
102 return RSeq<L>(this->buffer_, this->length());
105 operator uint8_t* ()
const 112 return this->transfer_from<memcpy>(src);
117 return this->transfer_from<memmove>(src);
121 template <memfunc_t mem_func>
124 if (src.length() > this->length())
130 const auto ret = this->readonly().take(src.length());
131 mem_func(buffer_, src, src.length());
132 this->advance(src.length());
137 uint8_t* buffer_ =
nullptr;
ser4cpp header-only library namespace