better endianess handling

This commit is contained in:
2025-02-07 22:01:04 +01:00
parent 6725a63c07
commit 534757f884
4 changed files with 21 additions and 43 deletions

View File

@@ -35,34 +35,6 @@ class Field {
ValueType m_Value; ValueType m_Value;
}; };
// Functor used to read all tuple values
class FieldReader {
public:
FieldReader(DataBuffer& buffer) : m_Buffer(buffer) {}
template <typename TField>
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 <typename TField>
void operator()(TField& field) {
field.Write(m_Buffer);
}
private:
DataBuffer& m_Buffer;
};
namespace details { namespace details {
template <typename... TFields> template <typename... TFields>

View File

@@ -121,9 +121,10 @@ template <typename TBase>
class MessageImplFieldsReadBase : public TBase { class MessageImplFieldsReadBase : public TBase {
protected: protected:
void ReadImpl(DataBuffer& buffer) override { void ReadImpl(DataBuffer& buffer) override {
// TODO: add endianess auto& allFields = this->GetFields();
auto& allFields = TBase::GetFields(); std::apply([&buffer, this]<typename T>(T& field) {
std::apply(FieldReader{buffer}, allFields); this->ReadData(field.GetValue(), buffer);
}, allFields);
} }
}; };
@@ -131,9 +132,10 @@ template <typename TBase>
class MessageImplFieldsWriteBase : public TBase { class MessageImplFieldsWriteBase : public TBase {
protected: protected:
void WriteImpl(DataBuffer& buffer) override { void WriteImpl(DataBuffer& buffer) override {
// TODO: add endianess + write ID auto& allFields = this->GetFields();
auto& allFields = TBase::GetFields(); std::apply([&buffer, this]<typename T>(T& field) {
std::apply(FieldWriter{buffer}, allFields); this->WriteData(field.GetValue(), buffer);
}, allFields);
} }
}; };

View File

@@ -82,13 +82,15 @@ template <typename TBase>
class MessageInterfaceBigEndian : public TBase { class MessageInterfaceBigEndian : public TBase {
protected: protected:
template <typename T> template <typename T>
static T ReadData(DataBuffer& buffer) { void ReadData(T& value, DataBuffer& buffer) {
// use big endian //TODO: use big endian
buffer >> value;
} }
template <typename T> template <typename T>
static void WriteData(T value, DataBuffer& buffer) { void WriteData(T value, DataBuffer& buffer) {
// use big endian //TODO: use big endian
buffer << value;
} }
}; };
@@ -97,13 +99,15 @@ template <typename TBase>
class MessageInterfaceLittleEndian : public TBase { class MessageInterfaceLittleEndian : public TBase {
protected: protected:
template <typename T> template <typename T>
static T ReadData(DataBuffer& buffer) { void ReadData(T& value, DataBuffer& buffer) {
// use little endian //TODO: use little endian
buffer >> value;
} }
template <typename T> template <typename T>
static void WriteData(const T& value, DataBuffer& buffer) { void WriteData(const T& value, DataBuffer& buffer) {
// use little endian //TODO: use little endian
buffer << value;
} }
}; };

View File

@@ -1,6 +1,6 @@
add_rules("mode.debug", "mode.release") add_rules("mode.debug", "mode.release")
set_languages("c++17") set_languages("c++20")
add_requires("enet6") add_requires("enet6")