From 2ae36f1e9671b40723dd06462b4a416e4baa5a57 Mon Sep 17 00:00:00 2001 From: rsgowman Date: Thu, 8 Mar 2018 11:53:37 -0500 Subject: [De]Serialize FieldValue map_values ("Objects") (#878) These can (recursively) contain other FieldValues. --- Firestore/core/src/firebase/firestore/model/field_value.cc | 11 +++++------ Firestore/core/src/firebase/firestore/model/field_value.h | 13 ++++++++----- 2 files changed, 13 insertions(+), 11 deletions(-) (limited to 'Firestore/core/src/firebase/firestore/model') diff --git a/Firestore/core/src/firebase/firestore/model/field_value.cc b/Firestore/core/src/firebase/firestore/model/field_value.cc index 03cf1d4..a38a676 100644 --- a/Firestore/core/src/firebase/firestore/model/field_value.cc +++ b/Firestore/core/src/firebase/firestore/model/field_value.cc @@ -113,7 +113,7 @@ FieldValue& FieldValue::operator=(const FieldValue& value) { } case Type::Object: { // copy-and-swap - std::map tmp = value.object_value_; + std::map tmp = value.object_value_; std::swap(object_value_, tmp); break; } @@ -281,13 +281,12 @@ FieldValue FieldValue::ArrayValue(std::vector&& value) { } FieldValue FieldValue::ObjectValue( - const std::map& value) { - std::map copy(value); + const std::map& value) { + std::map copy(value); return ObjectValue(std::move(copy)); } -FieldValue FieldValue::ObjectValue( - std::map&& value) { +FieldValue FieldValue::ObjectValue(std::map&& value) { FieldValue result; result.SwitchTo(Type::Object); std::swap(result.object_value_, value); @@ -418,7 +417,7 @@ void FieldValue::SwitchTo(const Type type) { new (&array_value_) std::vector(); break; case Type::Object: - new (&object_value_) std::map(); + new (&object_value_) std::map(); break; default: {} // The other types where there is nothing to worry about. } diff --git a/Firestore/core/src/firebase/firestore/model/field_value.h b/Firestore/core/src/firebase/firestore/model/field_value.h index cb219f5..fc8619d 100644 --- a/Firestore/core/src/firebase/firestore/model/field_value.h +++ b/Firestore/core/src/firebase/firestore/model/field_value.h @@ -111,6 +111,11 @@ class FieldValue { return string_value_; } + const std::map& object_value() const { + FIREBASE_ASSERT(tag_ == Type::Object); + return object_value_; + } + /** factory methods. */ static const FieldValue& NullValue(); static const FieldValue& TrueValue(); @@ -134,10 +139,8 @@ class FieldValue { static FieldValue GeoPointValue(const GeoPoint& value); static FieldValue ArrayValue(const std::vector& value); static FieldValue ArrayValue(std::vector&& value); - static FieldValue ObjectValue( - const std::map& value); - static FieldValue ObjectValue( - std::map&& value); + static FieldValue ObjectValue(const std::map& value); + static FieldValue ObjectValue(std::map&& value); friend bool operator<(const FieldValue& lhs, const FieldValue& rhs); @@ -164,7 +167,7 @@ class FieldValue { firebase::firestore::model::ReferenceValue reference_value_; GeoPoint geo_point_value_; std::vector array_value_; - std::map object_value_; + std::map object_value_; }; }; -- cgit v1.2.3