better endianess handling
This commit is contained in:
@@ -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>
|
||||
|
||||
@@ -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);
|
||||
}
|
||||
};
|
||||
|
||||
|
||||
@@ -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;
|
||||
}
|
||||
};
|
||||
|
||||
|
||||
Reference in New Issue
Block a user