From 88afaaceece3d9cc4b5bc02798a8afecfa4725a7 Mon Sep 17 00:00:00 2001 From: William JCM Date: Sun, 6 Mar 2022 14:29:09 +0100 Subject: [PATCH] UESaveFile/Serialisers: make types() return an ArrayView of Strings. It's the best way to avoid dangling views for now. --- src/UESaveFile/PropertySerialiser.cpp | 2 -- .../AbstractUnrealCollectionPropertySerialiser.h | 2 +- .../Serialisers/AbstractUnrealPropertySerialiser.h | 2 +- src/UESaveFile/Serialisers/BoolPropertySerialiser.cpp | 4 ++-- src/UESaveFile/Serialisers/BoolPropertySerialiser.h | 2 +- src/UESaveFile/Serialisers/BytePropertySerialiser.cpp | 4 ++-- src/UESaveFile/Serialisers/BytePropertySerialiser.h | 2 +- src/UESaveFile/Serialisers/EnumPropertySerialiser.cpp | 4 ++-- src/UESaveFile/Serialisers/EnumPropertySerialiser.h | 2 +- src/UESaveFile/Serialisers/FloatPropertySerialiser.cpp | 5 ++--- src/UESaveFile/Serialisers/FloatPropertySerialiser.h | 2 +- .../Serialisers/StringPropertySerialiser.cpp | 8 ++++---- src/UESaveFile/Serialisers/StringPropertySerialiser.h | 2 +- src/UESaveFile/Serialisers/StructSerialiser.cpp | 4 ++-- src/UESaveFile/Serialisers/StructSerialiser.h | 2 +- src/UESaveFile/Serialisers/UnrealPropertySerialiser.h | 10 +++++----- 16 files changed, 27 insertions(+), 30 deletions(-) diff --git a/src/UESaveFile/PropertySerialiser.cpp b/src/UESaveFile/PropertySerialiser.cpp index 86760ef..81061e7 100644 --- a/src/UESaveFile/PropertySerialiser.cpp +++ b/src/UESaveFile/PropertySerialiser.cpp @@ -238,10 +238,8 @@ auto PropertySerialiser::writeSet(Containers::ArrayView } auto PropertySerialiser::getSerialiser(Containers::StringView item_type) -> AbstractUnrealPropertySerialiser* { - !Utility::Debug{}; for(auto& item : _serialisers) { for(auto serialiser_type : item->types()) { - Utility::Debug{} << serialiser_type; if(item_type == serialiser_type) { return item.get(); } diff --git a/src/UESaveFile/Serialisers/AbstractUnrealCollectionPropertySerialiser.h b/src/UESaveFile/Serialisers/AbstractUnrealCollectionPropertySerialiser.h index 4e43baa..ffa273d 100644 --- a/src/UESaveFile/Serialisers/AbstractUnrealCollectionPropertySerialiser.h +++ b/src/UESaveFile/Serialisers/AbstractUnrealCollectionPropertySerialiser.h @@ -38,7 +38,7 @@ class AbstractUnrealCollectionPropertySerialiser { virtual ~AbstractUnrealCollectionPropertySerialiser() = default; - virtual auto types() -> Containers::ArrayView = 0; + virtual auto types() -> Containers::ArrayView = 0; virtual auto deserialise(Containers::StringView name, Containers::StringView type, UnsignedLong value_length, UnsignedInt count, BinaryReader& reader, diff --git a/src/UESaveFile/Serialisers/AbstractUnrealPropertySerialiser.h b/src/UESaveFile/Serialisers/AbstractUnrealPropertySerialiser.h index d4da220..0ddbfd1 100644 --- a/src/UESaveFile/Serialisers/AbstractUnrealPropertySerialiser.h +++ b/src/UESaveFile/Serialisers/AbstractUnrealPropertySerialiser.h @@ -37,7 +37,7 @@ class AbstractUnrealPropertySerialiser { virtual ~AbstractUnrealPropertySerialiser() = default; - virtual auto types() -> Containers::ArrayView = 0; + virtual auto types() -> Containers::ArrayView = 0; virtual auto deserialise(Containers::StringView name, Containers::StringView type, UnsignedLong value_length, BinaryReader& reader, PropertySerialiser& serialiser) -> UnrealPropertyBase::ptr = 0; diff --git a/src/UESaveFile/Serialisers/BoolPropertySerialiser.cpp b/src/UESaveFile/Serialisers/BoolPropertySerialiser.cpp index 2bc40b9..00b52ed 100644 --- a/src/UESaveFile/Serialisers/BoolPropertySerialiser.cpp +++ b/src/UESaveFile/Serialisers/BoolPropertySerialiser.cpp @@ -19,9 +19,9 @@ #include "BoolPropertySerialiser.h" -auto BoolPropertySerialiser::types() -> Containers::ArrayView { +auto BoolPropertySerialiser::types() -> Containers::ArrayView { using namespace Containers::Literals; - static const Containers::Array types{InPlaceInit, {"BoolProperty"_s}}; + static const Containers::Array types{InPlaceInit, {"BoolProperty"_s}}; return types; } diff --git a/src/UESaveFile/Serialisers/BoolPropertySerialiser.h b/src/UESaveFile/Serialisers/BoolPropertySerialiser.h index e3e602a..ddbbf85 100644 --- a/src/UESaveFile/Serialisers/BoolPropertySerialiser.h +++ b/src/UESaveFile/Serialisers/BoolPropertySerialiser.h @@ -29,7 +29,7 @@ class BoolPropertySerialiser : public AbstractUnrealPropertySerialiser { public: using ptr = Containers::Pointer; - auto types() -> Containers::ArrayView override; + auto types() -> Containers::ArrayView override; auto deserialise(Containers::StringView name, Containers::StringView type, UnsignedLong value_length, BinaryReader& reader, PropertySerialiser& serialiser) -> UnrealPropertyBase::ptr override; diff --git a/src/UESaveFile/Serialisers/BytePropertySerialiser.cpp b/src/UESaveFile/Serialisers/BytePropertySerialiser.cpp index 7534d69..25e11f3 100644 --- a/src/UESaveFile/Serialisers/BytePropertySerialiser.cpp +++ b/src/UESaveFile/Serialisers/BytePropertySerialiser.cpp @@ -19,9 +19,9 @@ #include "BytePropertySerialiser.h" -auto BytePropertySerialiser::types() -> Containers::ArrayView { +auto BytePropertySerialiser::types() -> Containers::ArrayView { using namespace Containers::Literals; - static const Containers::Array types{InPlaceInit, {"ByteProperty"_s}}; + static const Containers::Array types{InPlaceInit, {"ByteProperty"_s}}; return types; } diff --git a/src/UESaveFile/Serialisers/BytePropertySerialiser.h b/src/UESaveFile/Serialisers/BytePropertySerialiser.h index b698352..74b7205 100644 --- a/src/UESaveFile/Serialisers/BytePropertySerialiser.h +++ b/src/UESaveFile/Serialisers/BytePropertySerialiser.h @@ -27,7 +27,7 @@ class BytePropertySerialiser : public AbstractUnrealPropertySerialiser { public: using ptr = Containers::Pointer; - auto types() -> Containers::ArrayView override; + auto types() -> Containers::ArrayView override; auto deserialise(Containers::StringView name, Containers::StringView type, UnsignedLong value_length, BinaryReader& reader, PropertySerialiser& serialiser) -> UnrealPropertyBase::ptr override; diff --git a/src/UESaveFile/Serialisers/EnumPropertySerialiser.cpp b/src/UESaveFile/Serialisers/EnumPropertySerialiser.cpp index 942f076..29a20db 100644 --- a/src/UESaveFile/Serialisers/EnumPropertySerialiser.cpp +++ b/src/UESaveFile/Serialisers/EnumPropertySerialiser.cpp @@ -19,9 +19,9 @@ #include "EnumPropertySerialiser.h" -auto EnumPropertySerialiser::types() -> Containers::ArrayView { +auto EnumPropertySerialiser::types() -> Containers::ArrayView { using namespace Containers::Literals; - static const Containers::Array types{InPlaceInit, {"EnumProperty"_s}}; + static const Containers::Array types{InPlaceInit, {"EnumProperty"_s}}; return types; } diff --git a/src/UESaveFile/Serialisers/EnumPropertySerialiser.h b/src/UESaveFile/Serialisers/EnumPropertySerialiser.h index ec28c3c..57b821b 100644 --- a/src/UESaveFile/Serialisers/EnumPropertySerialiser.h +++ b/src/UESaveFile/Serialisers/EnumPropertySerialiser.h @@ -27,7 +27,7 @@ class EnumPropertySerialiser : public AbstractUnrealPropertySerialiser { public: using ptr = Containers::Pointer; - auto types() -> Containers::ArrayView override; + auto types() -> Containers::ArrayView override; auto deserialise(Containers::StringView name, Containers::StringView type, UnsignedLong value_length, BinaryReader& reader, PropertySerialiser& serialiser) -> UnrealPropertyBase::ptr override; diff --git a/src/UESaveFile/Serialisers/FloatPropertySerialiser.cpp b/src/UESaveFile/Serialisers/FloatPropertySerialiser.cpp index c9f8ed5..d4f0cd4 100644 --- a/src/UESaveFile/Serialisers/FloatPropertySerialiser.cpp +++ b/src/UESaveFile/Serialisers/FloatPropertySerialiser.cpp @@ -19,10 +19,9 @@ #include "FloatPropertySerialiser.h" - -auto FloatPropertySerialiser::types() -> Containers::ArrayView { +auto FloatPropertySerialiser::types() -> Containers::ArrayView { using namespace Containers::Literals; - static const Containers::Array types{InPlaceInit, {"FloatProperty"_s}}; + static const Containers::Array types{InPlaceInit, {"FloatProperty"_s}}; return types; } diff --git a/src/UESaveFile/Serialisers/FloatPropertySerialiser.h b/src/UESaveFile/Serialisers/FloatPropertySerialiser.h index 91b94f0..d09d31b 100644 --- a/src/UESaveFile/Serialisers/FloatPropertySerialiser.h +++ b/src/UESaveFile/Serialisers/FloatPropertySerialiser.h @@ -27,7 +27,7 @@ class FloatPropertySerialiser : public AbstractUnrealPropertySerialiser { public: using ptr = Containers::Pointer; - auto types() -> Containers::ArrayView override; + auto types() -> Containers::ArrayView override; auto deserialise(Containers::StringView name, Containers::StringView type, UnsignedLong value_length, BinaryReader& reader, PropertySerialiser& serialiser) -> UnrealPropertyBase::ptr override; diff --git a/src/UESaveFile/Serialisers/StringPropertySerialiser.cpp b/src/UESaveFile/Serialisers/StringPropertySerialiser.cpp index 654b358..4cfe00c 100644 --- a/src/UESaveFile/Serialisers/StringPropertySerialiser.cpp +++ b/src/UESaveFile/Serialisers/StringPropertySerialiser.cpp @@ -19,11 +19,11 @@ #include "StringPropertySerialiser.h" -auto StringPropertySerialiser::types() -> Containers::ArrayView { +auto StringPropertySerialiser::types() -> Containers::ArrayView { using namespace Containers::Literals; - static const Containers::Array types{InPlaceInit, - {"NameProperty"_s, "StrProperty"_s, - "SoftObjectProperty"_s, "ObjectProperty"_s}}; + static const Containers::Array types{InPlaceInit, + {"NameProperty"_s, "StrProperty"_s, + "SoftObjectProperty"_s, "ObjectProperty"_s}}; return types; } diff --git a/src/UESaveFile/Serialisers/StringPropertySerialiser.h b/src/UESaveFile/Serialisers/StringPropertySerialiser.h index 1e3362c..5965bcf 100644 --- a/src/UESaveFile/Serialisers/StringPropertySerialiser.h +++ b/src/UESaveFile/Serialisers/StringPropertySerialiser.h @@ -27,7 +27,7 @@ class StringPropertySerialiser : public AbstractUnrealPropertySerialiser { public: using ptr = Containers::Pointer; - auto types() -> Containers::ArrayView override; + auto types() -> Containers::ArrayView override; auto deserialise(Containers::StringView name, Containers::StringView type, UnsignedLong value_length, BinaryReader& reader, PropertySerialiser& serialiser) -> UnrealPropertyBase::ptr override; diff --git a/src/UESaveFile/Serialisers/StructSerialiser.cpp b/src/UESaveFile/Serialisers/StructSerialiser.cpp index 906d10d..1367465 100644 --- a/src/UESaveFile/Serialisers/StructSerialiser.cpp +++ b/src/UESaveFile/Serialisers/StructSerialiser.cpp @@ -25,9 +25,9 @@ #include "StructSerialiser.h" -auto StructSerialiser::types() -> Containers::ArrayView { +auto StructSerialiser::types() -> Containers::ArrayView { using namespace Containers::Literals; - static const Containers::Array types{InPlaceInit, {"StructProperty"_s}}; + static const Containers::Array types{InPlaceInit, {"StructProperty"_s}}; return types; } diff --git a/src/UESaveFile/Serialisers/StructSerialiser.h b/src/UESaveFile/Serialisers/StructSerialiser.h index d9d5fbb..81efcc0 100644 --- a/src/UESaveFile/Serialisers/StructSerialiser.h +++ b/src/UESaveFile/Serialisers/StructSerialiser.h @@ -29,7 +29,7 @@ class StructSerialiser : public AbstractUnrealPropertySerialiser, public Abstrac public: using ptr = Containers::Pointer; - auto types() -> Containers::ArrayView override; + auto types() -> Containers::ArrayView override; auto deserialise(Containers::StringView name, Containers::StringView type, UnsignedLong value_length, UnsignedInt count, BinaryReader& reader, PropertySerialiser& serialiser) -> Containers::Array override; diff --git a/src/UESaveFile/Serialisers/UnrealPropertySerialiser.h b/src/UESaveFile/Serialisers/UnrealPropertySerialiser.h index 9cf10da..e3fcdb6 100644 --- a/src/UESaveFile/Serialisers/UnrealPropertySerialiser.h +++ b/src/UESaveFile/Serialisers/UnrealPropertySerialiser.h @@ -32,15 +32,15 @@ class UnrealPropertySerialiser : public AbstractUnrealPropertySerialiser { public: using ptr = Containers::Pointer>; - auto types() -> Containers::ArrayView override { - static const Containers::Array types = []{ - Containers::Array array; + auto types() -> Containers::ArrayView override { + static const Containers::Array types = []{ + Containers::Array array; Containers::Pointer p(new T); if(std::is_base_of::value) { - array = Containers::Array{InPlaceInit, {dynamic_cast(p.get())->structType}}; + array = Containers::Array{InPlaceInit, {dynamic_cast(p.get())->structType}}; } else { - array = Containers::Array{InPlaceInit, {p->propertyType}}; + array = Containers::Array{InPlaceInit, {p->propertyType}}; } return array; }();