1
0
mirror of https://github.com/GOSTSec/poolserver synced 2025-03-13 05:51:37 +00:00
poolserver/src/server/shared/ByteBuffer.h

93 lines
1.7 KiB
C
Raw Normal View History

2013-12-22 15:22:04 +02:00
#ifndef BYTEBUFFER_H_
#define BYTEBUFFER_H_
#include "Common.h"
#include <vector>
class ByteBuffer
{
public:
2013-12-22 17:03:25 +02:00
ByteBuffer(): pointer(0) {}
2013-12-27 18:49:56 +02:00
template<typename T>
ByteBuffer(T data): pointer(0)
{
Append<T>(data);
}
2013-12-23 13:27:16 +02:00
ByteBuffer(BinaryData data): pointer(0), vec(data) {}
2013-12-22 17:03:25 +02:00
2013-12-22 15:22:04 +02:00
ByteBuffer& operator<<(ByteBuffer& b)
{
Append(b.vec);
return *this;
}
2013-12-23 13:27:16 +02:00
ByteBuffer& operator<<(BinaryData& b)
2013-12-22 15:22:04 +02:00
{
Append(b);
return *this;
}
2013-12-22 22:20:46 +02:00
template<typename T>
ByteBuffer& operator<<(T& b)
2013-12-22 15:22:04 +02:00
{
2013-12-22 22:20:46 +02:00
Append<T>(b);
2013-12-22 15:22:04 +02:00
return *this;
}
2013-12-22 22:20:46 +02:00
template<typename T>
ByteBuffer& operator>>(T& b)
2013-12-22 15:22:04 +02:00
{
2013-12-22 22:20:46 +02:00
b = Read<T>();
2013-12-22 15:22:04 +02:00
return *this;
}
2013-12-22 22:20:46 +02:00
template<typename T>
void Append(T data)
2013-12-22 15:22:04 +02:00
{
2013-12-22 22:20:46 +02:00
for (uint8 i = 0; i < sizeof(T); ++i)
2013-12-22 15:22:04 +02:00
vec.push_back(data >> (i * 8));
}
2013-12-23 13:27:16 +02:00
void Append(BinaryData data)
2013-12-22 15:22:04 +02:00
{
vec.insert(vec.end(), data.begin(), data.end());
}
2013-12-23 13:27:16 +02:00
BinaryData ReadBinary(size_t size)
2013-12-22 17:03:25 +02:00
{
if (vec.size() < pointer+size)
2013-12-23 13:27:16 +02:00
return BinaryData();
2013-12-22 17:03:25 +02:00
pointer += size;
2013-12-23 13:27:16 +02:00
return BinaryData(vec.begin()+pointer-size, vec.begin()+pointer);
2013-12-22 17:03:25 +02:00
}
template<typename T>
T Read()
{
size_t size = sizeof(T);
if (vec.size() < pointer+size)
return NULL;
T data = 0;
2013-12-22 22:20:46 +02:00
for (uint64 i = 0; i < size; ++i)
data += (T)vec[pointer+i]<<(i*8);
2013-12-22 17:03:25 +02:00
pointer += size;
return data;
}
2013-12-23 13:27:16 +02:00
BinaryData Binary()
2013-12-22 22:20:46 +02:00
{
return vec;
}
2013-12-22 17:03:25 +02:00
uint64 pointer;
2013-12-23 13:27:16 +02:00
BinaryData vec;
2013-12-22 15:22:04 +02:00
};
#endif