diff --git a/src/UESaveFile/PropertySerialiser.cpp b/src/UESaveFile/PropertySerialiser.cpp index 7e98562..86760ef 100644 --- a/src/UESaveFile/PropertySerialiser.cpp +++ b/src/UESaveFile/PropertySerialiser.cpp @@ -65,6 +65,11 @@ PropertySerialiser::PropertySerialiser() { arrayAppend(_collectionSerialisers, Containers::pointer()); } +auto PropertySerialiser::instance() -> PropertySerialiser& { + static PropertySerialiser serialiser; + return serialiser; +} + auto PropertySerialiser::read(BinaryReader& reader) -> UnrealPropertyBase::ptr { if(reader.peekChar() < 0 || reader.eof()) { return nullptr; @@ -233,8 +238,10 @@ auto PropertySerialiser::writeSet(Containers::ArrayView } auto PropertySerialiser::getSerialiser(Containers::StringView item_type) -> AbstractUnrealPropertySerialiser* { + !Utility::Debug{}; for(auto& item : _serialisers) { - for(Containers::StringView serialiser_type : item->types()) { + for(auto serialiser_type : item->types()) { + Utility::Debug{} << serialiser_type; if(item_type == serialiser_type) { return item.get(); } diff --git a/src/UESaveFile/PropertySerialiser.h b/src/UESaveFile/PropertySerialiser.h index 7f753eb..67a1aed 100644 --- a/src/UESaveFile/PropertySerialiser.h +++ b/src/UESaveFile/PropertySerialiser.h @@ -32,7 +32,7 @@ class BinaryWriter; class PropertySerialiser { public: - PropertySerialiser(); + static auto instance() -> PropertySerialiser&; auto read(BinaryReader& reader) -> UnrealPropertyBase::ptr; auto readItem(BinaryReader& reader, Containers::String type, UnsignedLong value_length, @@ -50,6 +50,8 @@ class PropertySerialiser { UnsignedLong& bytes_written, BinaryWriter& writer) -> bool; private: + PropertySerialiser(); + auto getSerialiser(Containers::StringView item_type) -> AbstractUnrealPropertySerialiser*; auto getCollectionSerialiser(Containers::StringView item_type) -> AbstractUnrealCollectionPropertySerialiser*; diff --git a/src/UESaveFile/UESaveFile.cpp b/src/UESaveFile/UESaveFile.cpp index cbbeb16..449bda8 100644 --- a/src/UESaveFile/UESaveFile.cpp +++ b/src/UESaveFile/UESaveFile.cpp @@ -25,7 +25,8 @@ using namespace Containers::Literals; -UESaveFile::UESaveFile(Containers::String filepath) +UESaveFile::UESaveFile(Containers::String filepath): + _propSerialiser{PropertySerialiser::instance()} { _filepath = std::move(filepath); @@ -108,7 +109,7 @@ auto UESaveFile::saveToFile() -> bool { for(auto& prop : _properties) { UnsignedLong bytes_written = 0; - if(!_propSerialiser.write(prop, bytes_written, writer)) { + if(!_propSerialiser->write(prop, bytes_written, writer)) { _lastError = "Couldn't write the property "_s + *prop->name + " to the array."_s; return false; } @@ -213,7 +214,7 @@ void UESaveFile::loadData() { } UnrealPropertyBase::ptr prop; - while((prop = _propSerialiser.read(reader)) != nullptr) { + while((prop = _propSerialiser->read(reader)) != nullptr) { arrayAppend(_properties, std::move(prop)); } diff --git a/src/UESaveFile/UESaveFile.h b/src/UESaveFile/UESaveFile.h index ed9652b..e9eedc6 100644 --- a/src/UESaveFile/UESaveFile.h +++ b/src/UESaveFile/UESaveFile.h @@ -18,6 +18,7 @@ #include #include +#include #include #include #include @@ -90,5 +91,5 @@ class UESaveFile { Containers::Array _properties; - PropertySerialiser _propSerialiser; + Containers::Reference _propSerialiser; };