#pragma once #include namespace sp { template class Field { public: // Provide an access to the stored value ValueType& GetValue() { return m_Value; } const ValueType& GetValue() const { return m_Value; } // 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 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 void operator()(TField& field) { field.Write(m_Buffer); } private: DataBuffer& m_Buffer; }; } // namespace sp