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