/* * CSerializer.h, part of VCMI engine * * Authors: listed in file AUTHORS in main folder * * License: GNU General Public License v2.0 or later * Full text of license available in license.txt file, in main folder * */ #pragma once VCMI_LIB_NAMESPACE_BEGIN const std::string SAVEGAME_MAGIC = "VCMISVG"; /// Helper to detect classes with user-provided serialize(S&, int version) method template struct is_serializeable { using Yes = char (&)[1]; using No = char (&)[2]; template static Yes test(U * data, S* arg1 = nullptr, typename std::enable_if_tserialize(*arg1))>> * = nullptr); static No test(...); static const bool value = sizeof(Yes) == sizeof(is_serializeable::test((typename std::remove_reference_t>*)nullptr)); }; /// Base class for deserializers class IBinaryReader { public: virtual ~IBinaryReader() = default; virtual int read(std::byte * data, unsigned size) = 0; }; /// Base class for serializers class IBinaryWriter { public: virtual ~IBinaryWriter() = default; virtual int write(const std::byte * data, unsigned size) = 0; }; VCMI_LIB_NAMESPACE_END