30#ifndef HORIZON_NETWORKING_BYTEBUFFER_HPP
31#define HORIZON_NETWORKING_BYTEBUFFER_HPP
52 char const*
what()
const throw()
override {
return msg_.c_str(); }
140 template <
typename T>
void append(T value)
142 append((uint8_t *)&value,
sizeof(value));
145 template <
typename T>
void put(
size_t pos, T value)
147 static_assert(std::is_fundamental<T>::value,
"append(compound)");
148 put(pos, (uint8_t *)&value,
sizeof(value));
153 append<uint8_t>(value);
159 append<uint16_t>(value);
165 append<uint32_t>(value);
171 append<uint64_t>(value);
178 append<int8_t>(value);
184 append<int16_t>(value);
190 append<int32_t>(value);
196 append<int64_t>(value);
203 append<float>(value);
209 append<double>(value);
215 value = read<char>() > 0 ? true :
false;
221 value =
static_cast<int>(read<unsigned char>());
227 value = read<unsigned short>();
233 value = read<unsigned int>();
239 value = read<unsigned long>();
246 value =
static_cast<int>(read<signed char>());
252 value = read<short>();
264 value = read<long>();
270 value = read<float>();
271 if (!std::isfinite(value))
278 value = read<double>();
279 if (!std::isfinite(value))
378 template <
typename T>
381 T r = read<T>(
_rpos);
386 template <
typename T> T
read(
size_t pos)
const
390 T val = *(
reinterpret_cast<T const*
>(&
_storage[pos]));
394 void read(
char *dest,
size_t len)
409 void append(
const char *src,
size_t size)
411 append((
const uint8_t *)src, size);
416 append(
string.c_str(),
string.size());
422 append((
const uint8_t *) src, size);
425 template<
class T,
class SubT>
426 void append(
const T *t,
size_t t_size,
const SubT *sub_t,
int count)
428 append((
const uint8_t *) t, t_size);
429 append((
const uint8_t *) sub_t,
sizeof(SubT) *
count);
432 void append(
const uint8_t *src,
size_t cnt)
442 size_t const newSize =
_wpos + cnt;
447 else if (newSize < 750)
449 else if (newSize < 6000)
467 void put(
size_t pos,
const uint8_t *src,
size_t cnt)
475 std::memcpy(&
_storage[pos], src, cnt);
484 template<typename SizeT = uint16_t, typename std::enable_if<std::is_integral<SizeT>::value>::type* =
nullptr>
490 put(pos, (uint8_t *) &
_wpos,
sizeof(SizeT));
499inline void ByteBuffer::read_skip<char const*>()
505inline void ByteBuffer::read_skip<std::string>()
Definition: ByteBuffer.hpp:48
std::string & message()
Definition: ByteBuffer.hpp:55
std::string msg_
Definition: ByteBuffer.hpp:58
char const * what() const override
Definition: ByteBuffer.hpp:52
~ByteBufferException()
Definition: ByteBuffer.hpp:50
Definition: ByteBuffer.hpp:62
~ByteBufferPositionException()
Definition: ByteBuffer.hpp:66
ByteBufferPositionException(bool add, size_t pos, size_t size, size_t valueSize)
Definition: ByteBuffer.cpp:35
Definition: ByteBuffer.hpp:70
~ByteBufferSourceException()
Definition: ByteBuffer.hpp:74
ByteBufferSourceException(size_t pos, size_t size, size_t valueSize)
Definition: ByteBuffer.cpp:47
Definition: ByteBuffer.hpp:78
size_t _wpos
Definition: ByteBuffer.hpp:494
void append(const char *src, size_t size)
Definition: ByteBuffer.hpp:409
virtual ~ByteBuffer()
Definition: ByteBuffer.hpp:125
void ensure_free_space()
Definition: ByteBuffer.hpp:350
size_t remaining_space() const
Definition: ByteBuffer.hpp:334
uint8_t const & operator[](size_t const pos) const
Definition: ByteBuffer.hpp:291
void read_skip()
Definition: ByteBuffer.hpp:369
uint8_t * get_base_pointer()
Definition: ByteBuffer.hpp:326
void resize(size_t new_size)
Definition: ByteBuffer.hpp:357
ByteBuffer & operator>>(int16_t &value)
Definition: ByteBuffer.hpp:250
ByteBuffer & operator<<(double value)
Definition: ByteBuffer.hpp:207
void reset()
Definition: ByteBuffer.hpp:134
ByteBuffer(size_t reserve)
Definition: ByteBuffer.hpp:89
void put(size_t pos, T value)
Definition: ByteBuffer.hpp:145
ByteBuffer(ByteBuffer const &right)
Definition: ByteBuffer.hpp:109
size_t rpos() const
Definition: ByteBuffer.hpp:298
ByteBuffer & operator<<(uint64_t value)
Definition: ByteBuffer.hpp:169
ByteBuffer & operator>>(int32_t &value)
Definition: ByteBuffer.hpp:256
void reserve(size_t ressize)
Definition: ByteBuffer.hpp:362
void append(std::string string)
Definition: ByteBuffer.hpp:414
ByteBuffer & operator>>(uint8_t &value)
Definition: ByteBuffer.hpp:219
ByteBuffer & operator>>(float &value)
Definition: ByteBuffer.hpp:268
ByteBuffer & operator=(ByteBuffer const &right)
Definition: ByteBuffer.hpp:113
ByteBuffer & operator>>(uint64_t &value)
Definition: ByteBuffer.hpp:237
bool is_empty() const
Definition: ByteBuffer.hpp:336
void read_completed(size_t bytes)
Definition: ByteBuffer.hpp:321
T read(size_t pos) const
Definition: ByteBuffer.hpp:386
uint8_t * get_write_pointer()
Definition: ByteBuffer.hpp:328
void hexlike() const
Definition: ByteBuffer.cpp:86
void print_storage() const
Definition: ByteBuffer.cpp:59
void read_skip(size_t skip)
Definition: ByteBuffer.hpp:371
uint8_t const * contents() const
Definition: ByteBuffer.hpp:313
ByteBuffer & operator>>(int8_t &value)
Definition: ByteBuffer.hpp:244
uint8_t * get_read_pointer()
Definition: ByteBuffer.hpp:327
void append(const ByteBuffer &buffer)
Definition: ByteBuffer.hpp:461
void append(T value)
Definition: ByteBuffer.hpp:140
ByteBuffer & operator<<(float value)
Definition: ByteBuffer.hpp:201
ByteBuffer & operator>>(uint32_t &value)
Definition: ByteBuffer.hpp:231
ByteBuffer(ByteBuffer &buf, size_t len)
Definition: ByteBuffer.hpp:99
ByteBuffer & operator<<(uint16_t value)
Definition: ByteBuffer.hpp:157
void append(const T *src, size_t size)
Definition: ByteBuffer.hpp:420
void flush()
Definition: ByteBuffer.hpp:339
ByteBuffer(ByteBuffer &&buf)
Definition: ByteBuffer.hpp:95
void append(const uint8_t *src, size_t cnt)
Definition: ByteBuffer.hpp:432
uint8_t & operator[](size_t const pos)
Definition: ByteBuffer.hpp:284
size_t wpos() const
Definition: ByteBuffer.hpp:324
ByteBuffer & operator<<(int8_t value)
Definition: ByteBuffer.hpp:176
ByteBuffer & operator<<(int64_t value)
Definition: ByteBuffer.hpp:194
uint8_t * contents()
Definition: ByteBuffer.hpp:306
static const size_t DEFAULT_SIZE
Definition: ByteBuffer.hpp:80
void textlike() const
Definition: ByteBuffer.cpp:71
ByteBuffer & operator<<(uint32_t value)
Definition: ByteBuffer.hpp:163
size_t rpos(size_t rpos_)
Definition: ByteBuffer.hpp:300
std::vector< uint8_t > _storage
Definition: ByteBuffer.hpp:495
void read(char *dest, size_t len)
Definition: ByteBuffer.hpp:394
void append(const T *t, size_t t_size, const SubT *sub_t, int count)
Definition: ByteBuffer.hpp:426
void emplace_size(std::size_t pos=2)
Definition: ByteBuffer.hpp:485
ByteBuffer & operator<<(uint8_t value)
Definition: ByteBuffer.hpp:151
void clear()
Definition: ByteBuffer.hpp:128
void write_completed(size_t bytes)
Definition: ByteBuffer.hpp:322
ByteBuffer & operator>>(int64_t &value)
Definition: ByteBuffer.hpp:262
size_t _rpos
Definition: ByteBuffer.hpp:494
ByteBuffer & operator>>(uint16_t &value)
Definition: ByteBuffer.hpp:225
ByteBuffer()
Definition: ByteBuffer.hpp:83
void put(size_t pos, const uint8_t *src, size_t cnt)
Definition: ByteBuffer.hpp:467
ByteBuffer & operator>>(bool &value)
Definition: ByteBuffer.hpp:213
size_t active_length() const
Definition: ByteBuffer.hpp:333
std::string to_string()
Definition: ByteBuffer.hpp:330
ByteBuffer & operator>>(double &value)
Definition: ByteBuffer.hpp:276
void read(ByteBuffer &buf, size_t len)
Definition: ByteBuffer.hpp:402
size_t maximum_length() const
Definition: ByteBuffer.hpp:332
ByteBuffer & operator<<(int32_t value)
Definition: ByteBuffer.hpp:188
T read()
Definition: ByteBuffer.hpp:379
void finish_reading()
Definition: ByteBuffer.hpp:320
ByteBuffer & operator<<(int16_t value)
Definition: ByteBuffer.hpp:182
size_t count(GridTypeListContainer< SPECIFIC_TYPE > const &elements, SPECIFIC_TYPE *)
Definition: GridReferenceContainer.hpp:100