From 0196d77f1ea82d50cb3ed0b3623736deec42f525 Mon Sep 17 00:00:00 2001 From: anulax1225 Date: Sat, 2 Mar 2024 17:19:53 +0100 Subject: [PATCH] Created a container for packet management --- bakanet/src/bakanet/packet.h | 53 ++++++++++++++++++++++++++++++++++++ 1 file changed, 53 insertions(+) create mode 100644 bakanet/src/bakanet/packet.h diff --git a/bakanet/src/bakanet/packet.h b/bakanet/src/bakanet/packet.h new file mode 100644 index 0000000..e387243 --- /dev/null +++ b/bakanet/src/bakanet/packet.h @@ -0,0 +1,53 @@ +#include +#include +#include +#include +#include + +namespace Bk::Net { + class Packet + { + public: + Packet() = default; + Packet(std::vector data) + : payload(data) {} + + int size() { return payload.size(); } + + template + void push(const T& data) + { + static_assert(std::is_standard_layout::value, "Data is too complex to be pushed into vector"); + size_t i = payload.size(); + payload.resize(i + sizeof(T)); + std::memcpy(payload.data() + i, &data, sizeof(T)); + } + + template + void push(const T* data, int size) + { + for(int i = 0; i <= size; i++) push(data[i]); + } + + template + T pull() + { + static_assert(std::is_standard_layout::value, "Data is too complex to be pulled from vector"); + T data; + size_t i = payload.size() - sizeof(T); + std::memcpy(&data, payload.data() + i, sizeof(T)); + payload.resize(i); + return data; + } + + template + std::unique_ptr pull(int size) + { + std::unique_ptr data(new T[size]); + for(int i = size; i >= 0; i--) data[i] = pull(); + return data; + } + + std::vector payload; + }; +} \ No newline at end of file