#pragma once #include "ISerializerRowData.h" #include "ISerializerRowReader.h" #include "SerializerDataTypes.h" #include namespace serializer { template class SerializableObject { public: SerializableObject(); SerializableObject(const SerializableObject& rSrc); virtual ~SerializableObject(); SerializableObject& operator=(const SerializableObject& rSrc); // serialization interface virtual void Store(const serializer::ISerializerContainerPtr& spContainer) const = 0; virtual void Load(const serializer::ISerializerRowReaderPtr& spRowReader) = 0; serializer::object_id_t GetObjectID() const; void SetObjectID(serializer::object_id_t oidObjectID); void ResetModifications(); protected: serializer::object_id_t m_oidObjectID = 0; using Bitset = std::bitset; mutable Bitset m_setModifications; }; template serializer::SerializableObject::SerializableObject() { } template serializer::SerializableObject::SerializableObject(const SerializableObject& rSrc) : m_oidObjectID(rSrc.m_oidObjectID), m_setModifications(rSrc.m_setModifications) { } template serializer::SerializableObject::~SerializableObject() { } template SerializableObject& serializer::SerializableObject::operator=(const SerializableObject& rSrc) { m_oidObjectID = rSrc.m_oidObjectID; m_setModifications = rSrc.m_setModifications; return *this; } template void serializer::SerializableObject::ResetModifications() { m_setModifications.reset(); } template void serializer::SerializableObject::SetObjectID(serializer::object_id_t oidObjectID) { m_oidObjectID = oidObjectID; } template serializer::object_id_t serializer::SerializableObject::GetObjectID() const { return m_oidObjectID; } }