better example
This commit is contained in:
65
include/sp/protocol/Field.h
Normal file
65
include/sp/protocol/Field.h
Normal file
@@ -0,0 +1,65 @@
|
||||
#pragma once
|
||||
|
||||
#include <sp/common/DataBuffer.h>
|
||||
|
||||
namespace sp {
|
||||
|
||||
template <typename ValueType>
|
||||
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 <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
|
||||
Reference in New Issue
Block a user