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;
};
// 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 {
template <typename... TFields>

View File

@@ -121,9 +121,10 @@ template <typename TBase>
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]<typename T>(T& field) {
this->ReadData(field.GetValue(), buffer);
}, allFields);
}
};
@@ -131,9 +132,10 @@ template <typename TBase>
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]<typename T>(T& field) {
this->WriteData(field.GetValue(), buffer);
}, allFields);
}
};

View File

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