diff --git a/include/sp/protocol/Field.h b/include/sp/protocol/Field.h index 3a6148b..69dfcc1 100644 --- a/include/sp/protocol/Field.h +++ b/include/sp/protocol/Field.h @@ -35,34 +35,6 @@ class Field { ValueType m_Value; }; -// Functor used to read all tuple values -class FieldReader { - public: - FieldReader(DataBuffer& buffer) : m_Buffer(buffer) {} - - template - void operator()(TField& field) { - field.Read(m_Buffer); - } - - private: - DataBuffer& m_Buffer; -}; - -// Functor used to write all tuple values -class FieldWriter { - public: - FieldWriter(DataBuffer& buffer) : m_Buffer(buffer) {} - - template - void operator()(TField& field) { - field.Write(m_Buffer); - } - - private: - DataBuffer& m_Buffer; -}; - namespace details { template diff --git a/include/sp/protocol/MessageBase.h b/include/sp/protocol/MessageBase.h index 641c063..849e9cd 100644 --- a/include/sp/protocol/MessageBase.h +++ b/include/sp/protocol/MessageBase.h @@ -121,9 +121,10 @@ template class MessageImplFieldsReadBase : public TBase { protected: void ReadImpl(DataBuffer& buffer) override { - // TODO: add endianess - auto& allFields = TBase::GetFields(); - std::apply(FieldReader{buffer}, allFields); + auto& allFields = this->GetFields(); + std::apply([&buffer, this](T& field) { + this->ReadData(field.GetValue(), buffer); + }, allFields); } }; @@ -131,9 +132,10 @@ template class MessageImplFieldsWriteBase : public TBase { protected: void WriteImpl(DataBuffer& buffer) override { - // TODO: add endianess + write ID - auto& allFields = TBase::GetFields(); - std::apply(FieldWriter{buffer}, allFields); + auto& allFields = this->GetFields(); + std::apply([&buffer, this](T& field) { + this->WriteData(field.GetValue(), buffer); + }, allFields); } }; diff --git a/include/sp/protocol/MessageInterfaces.h b/include/sp/protocol/MessageInterfaces.h index 275994a..592309a 100644 --- a/include/sp/protocol/MessageInterfaces.h +++ b/include/sp/protocol/MessageInterfaces.h @@ -82,13 +82,15 @@ template class MessageInterfaceBigEndian : public TBase { protected: template - static T ReadData(DataBuffer& buffer) { - // use big endian + void ReadData(T& value, DataBuffer& buffer) { + //TODO: use big endian + buffer >> value; } template - static void WriteData(T value, DataBuffer& buffer) { - // use big endian + void WriteData(T value, DataBuffer& buffer) { + //TODO: use big endian + buffer << value; } }; @@ -97,13 +99,15 @@ template class MessageInterfaceLittleEndian : public TBase { protected: template - static T ReadData(DataBuffer& buffer) { - // use little endian + void ReadData(T& value, DataBuffer& buffer) { + //TODO: use little endian + buffer >> value; } template - static void WriteData(const T& value, DataBuffer& buffer) { - // use little endian + void WriteData(const T& value, DataBuffer& buffer) { + //TODO: use little endian + buffer << value; } }; diff --git a/xmake.lua b/xmake.lua index 71fed3a..94deb11 100644 --- a/xmake.lua +++ b/xmake.lua @@ -1,6 +1,6 @@ add_rules("mode.debug", "mode.release") -set_languages("c++17") +set_languages("c++20") add_requires("enet6")