62 lines
1.1 KiB
C++
62 lines
1.1 KiB
C++
#pragma once
|
|
|
|
#include <sp/common/DataBuffer.h>
|
|
|
|
namespace sp {
|
|
|
|
template <typename ValueType>
|
|
class Field {
|
|
public:
|
|
// Provide an access to the stored value
|
|
ValueType& GetValue();
|
|
const ValueType& GetValue() const;
|
|
|
|
// Read (deserialise) and update internal value
|
|
void Read(DataBuffer& buffer) {
|
|
buffer >> m_Value;
|
|
}
|
|
|
|
// Write (serialise) internal value
|
|
void Write(DataBuffer& buffer) const {
|
|
buffer << m_Value;
|
|
}
|
|
|
|
Field& operator=(const ValueType& value) {
|
|
m_Value = value;
|
|
return *this;
|
|
}
|
|
|
|
private:
|
|
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 sp
|