diff --git a/Source/Engine/Serialization/JsonWriter.h b/Source/Engine/Serialization/JsonWriter.h index 932b9e22c..d8a0acb8d 100644 --- a/Source/Engine/Serialization/JsonWriter.h +++ b/Source/Engine/Serialization/JsonWriter.h @@ -82,6 +82,11 @@ public: String(buf.Get()); } + void String(const StringAnsi& value) + { + String(value.Get(), static_cast(value.Length())); + } + FORCE_INLINE void RawValue(const StringAnsi& str) { RawValue(str.Get(), static_cast(str.Length())); diff --git a/Source/Engine/Serialization/Serialization.h b/Source/Engine/Serialization/Serialization.h index bfbb45a5f..b6a9a6da3 100644 --- a/Source/Engine/Serialization/Serialization.h +++ b/Source/Engine/Serialization/Serialization.h @@ -254,6 +254,19 @@ namespace Serialization v = stream.GetText(); } + inline bool ShouldSerialize(const StringAnsi& v, const void* otherObj) + { + return !otherObj || v != *(StringAnsi*)otherObj; + } + inline void Serialize(ISerializable::SerializeStream& stream, const StringAnsi& v, const void* otherObj) + { + stream.String(v); + } + inline void Deserialize(ISerializable::DeserializeStream& stream, StringAnsi& v, ISerializeModifier* modifier) + { + v = stream.GetTextAnsi(); + } + FLAXENGINE_API bool ShouldSerialize(const Version& v, const void* otherObj); FLAXENGINE_API void Serialize(ISerializable::SerializeStream& stream, const Version& v, const void* otherObj); FLAXENGINE_API void Deserialize(ISerializable::DeserializeStream& stream, Version& v, ISerializeModifier* modifier); diff --git a/Source/ThirdParty/rapidjson/document.h b/Source/ThirdParty/rapidjson/document.h index 9d9fe2eb4..f52e969ab 100644 --- a/Source/ThirdParty/rapidjson/document.h +++ b/Source/ThirdParty/rapidjson/document.h @@ -1661,6 +1661,18 @@ public: } return result; } + StringAnsi GetTextAnsi() const + { + StringAnsi result; + if (IsString()) + { + if (data_.f.flags & kInlineStrFlag) + result.Set(data_.ss.str, data_.ss.GetLength()); + else + result.Set(GetStringPointer(), data_.s.length); + } + return result; + } //! Get the length of string. /*! Since rapidjson permits "\\u0000" in the json string, strlen(v.GetString()) may not equal to v.GetStringLength().