From 7666f3940600696b1b2c36a2376cb6aed4894502 Mon Sep 17 00:00:00 2001 From: Anselme Date: Tue, 29 Aug 2017 15:16:04 +0200 Subject: [PATCH] added 2 useful methods to quickly save or load one Serializable object --- src/serializationmanager.cpp | 33 +++++++++++++++++++++++++++++++++ src/serializationmanager.h | 6 ++++++ 2 files changed, 39 insertions(+) diff --git a/src/serializationmanager.cpp b/src/serializationmanager.cpp index 7b4e111..2c387f8 100644 --- a/src/serializationmanager.cpp +++ b/src/serializationmanager.cpp @@ -1,6 +1,7 @@ #include "serializationmanager.h" #include "serializable.h" #include +#include void ObjectSaver::addObject(Serializable *object) { @@ -375,3 +376,35 @@ void ObjectLoader::buildReferences() *(ref.ptr) = m_objects[ref.type][ref.id]; m_references.clear(); } + +bool ObjectSaver::quickSave(std::string filename, Serializable* object, bool binary) +{ + std::fstream file; + ObjectSaver saver; + saver.addObject(object); + auto mode = binary ? std::ios_base::out | std::ios_base::binary : std::ios_base::out; + file.open(filename, mode); + if(file.is_open()) + { + saver.saveAscii(file); + file.close(); + return true; + } + else + return false; +} + +Serializable* ObjectLoader::quickLoad(std::string filename, std::string type, bool binary) +{ + std::fstream file; + auto mode = binary ? std::ios_base::in | std::ios_base::binary : std::ios_base::in; + file.open(filename, mode); + ObjectLoader loader; + loader.loadAscii(file); + file.close(); + const std::vector& vec = loader.getObjects(type); + if(vec.size() > 0) + return vec[0]; + else + return nullptr; +} diff --git a/src/serializationmanager.h b/src/serializationmanager.h index 28be2a6..f577bbf 100644 --- a/src/serializationmanager.h +++ b/src/serializationmanager.h @@ -23,6 +23,8 @@ public: std::ostream& saveBinary(std::ostream& os); std::ostream& saveAscii(std::ostream& os); + + static bool quickSave(std::string filename, Serializable* object, bool binary = true); }; class ObjectLoader @@ -45,6 +47,10 @@ public: const std::vector& getObjects(const std::string &type) { return m_objects[type]; } template const std::vector& getObjects() { return (const std::vector&)(m_objects[T::getStaticType()]); } + + static Serializable* quickLoad(std::string filename, std::string type, bool binary = true); + template + static T* quickLoad(std::string filename, bool binary = true) { return (T*)(quickLoad(filename, T::getStaticType(), binary)); } }; #endif // SERIALIZATIONMANAGER_H