From aa83af477a2fbc89cc11e52cad23db795e750f68 Mon Sep 17 00:00:00 2001 From: Wojtek Figat Date: Thu, 17 Jun 2021 14:14:10 +0200 Subject: [PATCH] Add `GetStringAnsiView` to json value --- Source/Engine/Content/Assets/VisualScript.cpp | 2 +- Source/Engine/Content/JsonAsset.cpp | 2 +- Source/Engine/Level/SceneObjectsFactory.cpp | 2 +- Source/Engine/Serialization/Json.h | 1 + Source/Engine/Serialization/Serialization.cpp | 6 +++--- Source/Engine/Serialization/Serialization.h | 2 +- Source/ThirdParty/rapidjson/document.h | 1 + 7 files changed, 9 insertions(+), 7 deletions(-) diff --git a/Source/Engine/Content/Assets/VisualScript.cpp b/Source/Engine/Content/Assets/VisualScript.cpp index ea8f6ad6c..0d523b67f 100644 --- a/Source/Engine/Content/Assets/VisualScript.cpp +++ b/Source/Engine/Content/Assets/VisualScript.cpp @@ -2066,7 +2066,7 @@ void VisualScriptingBinaryModule::DeserializeObject(ISerializable::DeserializeSt auto& params = instanceParams->Value.Params; for (auto i = stream.MemberBegin(); i != stream.MemberEnd(); ++i) { - StringAnsiView idNameAnsi(i->name.GetString(), i->name.GetStringLength()); + StringAnsiView idNameAnsi(i->name.GetStringAnsiView()); Guid paramId; if (!Guid::Parse(idNameAnsi, paramId)) { diff --git a/Source/Engine/Content/JsonAsset.cpp b/Source/Engine/Content/JsonAsset.cpp index 44baecb12..c9a07e665 100644 --- a/Source/Engine/Content/JsonAsset.cpp +++ b/Source/Engine/Content/JsonAsset.cpp @@ -75,7 +75,7 @@ void FindIds(ISerializable::DeserializeStream& node, Array& output) { // Try parse as Guid in format `N` (32 hex chars) Guid id; - if (!Guid::Parse(node.GetText(), id)) + if (!Guid::Parse(node.GetStringAnsiView(), id)) output.Add(id); } } diff --git a/Source/Engine/Level/SceneObjectsFactory.cpp b/Source/Engine/Level/SceneObjectsFactory.cpp index 85cbc930f..321b0f6f1 100644 --- a/Source/Engine/Level/SceneObjectsFactory.cpp +++ b/Source/Engine/Level/SceneObjectsFactory.cpp @@ -74,7 +74,7 @@ SceneObject* SceneObjectsFactory::Spawn(ISerializable::DeserializeStream& stream LOG(Warning, "Invalid object type (TypeName must be an object type full name string)."); return nullptr; } - const StringAnsiView typeName(typeNameMember->value.GetString(), typeNameMember->value.GetStringLength()); + const StringAnsiView typeName(typeNameMember->value.GetStringAnsiView()); const ScriptingTypeHandle type = Scripting::FindScriptingType(typeName); if (type) diff --git a/Source/Engine/Serialization/Json.h b/Source/Engine/Serialization/Json.h index 4d47d743e..880796345 100644 --- a/Source/Engine/Serialization/Json.h +++ b/Source/Engine/Serialization/Json.h @@ -3,6 +3,7 @@ #pragma once #include "Engine/Core/Types/String.h" +#include "Engine/Core/Types/StringView.h" // TODO: config RAPIDJSON_SSE2 for rapidjson #define RAPIDJSON_ERROR_CHARTYPE Char diff --git a/Source/Engine/Serialization/Serialization.cpp b/Source/Engine/Serialization/Serialization.cpp index bafc52077..1b0e0b45c 100644 --- a/Source/Engine/Serialization/Serialization.cpp +++ b/Source/Engine/Serialization/Serialization.cpp @@ -74,7 +74,7 @@ void Serialization::Deserialize(ISerializable::DeserializeStream& stream, Varian v.Type = VariantType::Null; const auto mTypeName = SERIALIZE_FIND_MEMBER(stream, "TypeName"); if (mTypeName != stream.MemberEnd() && mTypeName->value.IsString()) - v.SetTypeName(StringAnsiView(mTypeName->value.GetString(), mTypeName->value.GetStringLength())); + v.SetTypeName(StringAnsiView(mTypeName->value.GetStringAnsiView())); } else { @@ -257,7 +257,7 @@ void Serialization::Deserialize(ISerializable::DeserializeStream& stream, Varian break; case VariantType::String: CHECK(value.IsString()); - v.SetString(StringAnsiView(value.GetString(), value.GetStringLength())); + v.SetString(value.GetStringAnsiView()); break; case VariantType::Object: Deserialize(value, id, modifier); @@ -328,7 +328,7 @@ void Serialization::Deserialize(ISerializable::DeserializeStream& stream, Varian break; case VariantType::Typename: CHECK(value.IsString()); - v.SetTypename(StringAnsiView(value.GetString(), value.GetStringLength())); + v.SetTypename(value.GetStringAnsiView()); break; default: Platform::CheckFailed("", __FILE__, __LINE__); diff --git a/Source/Engine/Serialization/Serialization.h b/Source/Engine/Serialization/Serialization.h index 1413525e7..4ccbe533c 100644 --- a/Source/Engine/Serialization/Serialization.h +++ b/Source/Engine/Serialization/Serialization.h @@ -536,7 +536,7 @@ namespace Serialization else if (stream.IsString()) { // byte[] encoded as Base64 - const StringAnsiView streamView(stream.GetString(), stream.GetStringLength()); + const StringAnsiView streamView(stream.GetStringAnsiView()); v.Resize(Encryption::Base64DecodeLength(*streamView, streamView.Length())); Encryption::Base64Decode(*streamView, streamView.Length(), v.Get()); } diff --git a/Source/ThirdParty/rapidjson/document.h b/Source/ThirdParty/rapidjson/document.h index a6a6e4d9c..9d9fe2eb4 100644 --- a/Source/ThirdParty/rapidjson/document.h +++ b/Source/ThirdParty/rapidjson/document.h @@ -1648,6 +1648,7 @@ public: //@{ const Ch* GetString() const { RAPIDJSON_ASSERT(IsString()); return (data_.f.flags & kInlineStrFlag) ? data_.ss.str : GetStringPointer(); } + ::StringAnsiView GetStringAnsiView() const { RAPIDJSON_ASSERT(IsString()); return data_.f.flags & kInlineStrFlag ? ::StringAnsiView(data_.ss.str, data_.ss.GetLength()) : ::StringAnsiView(GetStringPointer(), data_.s.length); } ::String GetText() const { ::String result;