X-Git-Url: https://git.ucc.asn.au/?a=blobdiff_plain;f=Usermode%2FApplications%2Faxwin4_src%2FCommon%2Finclude%2Fserialisation.hpp;h=54293c1b29ec5e7a590d0ac633eac33547b4a37e;hb=6fbf6b93bec9b8b5bd6d7c683eefb0ebed8dff77;hp=32ba4659e443dfc9b107956f72ed91c5131027de;hpb=d74e5edc75b4fca94b71eef800b9d3a04760da05;p=tpg%2Facess2.git diff --git a/Usermode/Applications/axwin4_src/Common/include/serialisation.hpp b/Usermode/Applications/axwin4_src/Common/include/serialisation.hpp index 32ba4659..54293c1b 100644 --- a/Usermode/Applications/axwin4_src/Common/include/serialisation.hpp +++ b/Usermode/Applications/axwin4_src/Common/include/serialisation.hpp @@ -23,15 +23,26 @@ class CDeserialiseException: class CDeserialiser { - const size_t m_length; - const uint8_t* m_data; + ::std::vector m_vect; size_t m_offset; public: - CDeserialiser(size_t Length, const uint8_t *Buffer); + CDeserialiser(): + CDeserialiser(::std::vector()) + {} + CDeserialiser(const ::std::vector& vect); + CDeserialiser(::std::vector&& vect); + CDeserialiser(const CDeserialiser& x) { *this = x; }; + CDeserialiser& operator=(const CDeserialiser& x); + bool IsConsumed() const; ::uint8_t ReadU8(); ::uint16_t ReadU16(); ::int16_t ReadS16(); - ::std::string ReadString(); + ::uint32_t ReadU32(); + ::uint64_t ReadU64(); + const ::std::vector ReadBuffer(); + const ::std::string ReadString(); +private: + void RangeCheck(const char *Method, size_t bytes) throw(::std::out_of_range); }; class CSerialiser @@ -42,6 +53,9 @@ public: void WriteU8(::uint8_t val); void WriteU16(::uint16_t val); void WriteS16(::int16_t val); + void WriteU32(::uint32_t val); + void WriteU64(::uint64_t val); + void WriteBuffer(size_t n, const void* val); void WriteString(const char* val, size_t n); void WriteString(const char* val) { WriteString(val, ::std::char_traits::length(val)); @@ -50,6 +64,8 @@ public: WriteString(val.data(), val.size()); } void WriteSub(const CSerialiser& val); + + const ::std::vector& Compact(); }; };