From 2ac778f312301a8dd10c3c6498a59ce536abd738 Mon Sep 17 00:00:00 2001 From: zxu Date: Tue, 10 Apr 2018 16:28:22 -0400 Subject: Port FieldTransform to C++ (#1033) * port FieldMask to C++ * address changes * address changes * fix test * address change * Port transform operations (FSTTransformOperation, FSTServerTimestampTransform) to C++ * address changes * address changes * address changes * implement `FieldTransform` in C++ * port `FieldTransform` * make `fieldTransforms` shared inside `context` * address changes * fix lint * address changes --- Firestore/Source/Remote/FSTSerializerBeta.mm | 27 ++++++++++++++------------- 1 file changed, 14 insertions(+), 13 deletions(-) (limited to 'Firestore/Source/Remote') diff --git a/Firestore/Source/Remote/FSTSerializerBeta.mm b/Firestore/Source/Remote/FSTSerializerBeta.mm index 095d731..1d9ad30 100644 --- a/Firestore/Source/Remote/FSTSerializerBeta.mm +++ b/Firestore/Source/Remote/FSTSerializerBeta.mm @@ -49,6 +49,7 @@ #include "Firestore/core/src/firebase/firestore/model/document_key.h" #include "Firestore/core/src/firebase/firestore/model/field_mask.h" #include "Firestore/core/src/firebase/firestore/model/field_path.h" +#include "Firestore/core/src/firebase/firestore/model/field_transform.h" #include "Firestore/core/src/firebase/firestore/model/resource_path.h" #include "Firestore/core/src/firebase/firestore/model/transform_operations.h" #include "Firestore/core/src/firebase/firestore/util/string_apple.h" @@ -59,6 +60,7 @@ using firebase::firestore::model::DatabaseId; using firebase::firestore::model::DocumentKey; using firebase::firestore::model::FieldMask; using firebase::firestore::model::FieldPath; +using firebase::firestore::model::FieldTransform; using firebase::firestore::model::ResourcePath; using firebase::firestore::model::ServerTimestampTransform; using firebase::firestore::model::TransformOperation; @@ -557,7 +559,7 @@ NS_ASSUME_NONNULL_BEGIN } - (FieldMask)decodedFieldMask:(GCFSDocumentMask *)fieldMask { - std::vector fields{}; + std::vector fields; fields.reserve(fieldMask.fieldPathsArray_Count); for (NSString *path in fieldMask.fieldPathsArray) { fields.push_back(FieldPath::FromServerFormat(util::MakeStringView(path))); @@ -566,31 +568,30 @@ NS_ASSUME_NONNULL_BEGIN } - (NSMutableArray *)encodedFieldTransforms: - (NSArray *)fieldTransforms { + (const std::vector &)fieldTransforms { NSMutableArray *protos = [NSMutableArray array]; - for (FSTFieldTransform *fieldTransform in fieldTransforms) { - FSTAssert(fieldTransform.transform->type() == TransformOperation::Type::ServerTimestamp, - @"Unknown transform: %d type", fieldTransform.transform->type()); + for (const FieldTransform &fieldTransform : fieldTransforms) { + FSTAssert(fieldTransform.transformation().type() == TransformOperation::Type::ServerTimestamp, + @"Unknown transform: %d type", fieldTransform.transformation().type()); GCFSDocumentTransform_FieldTransform *proto = [GCFSDocumentTransform_FieldTransform message]; - proto.fieldPath = util::WrapNSString(fieldTransform.path.CanonicalString()); + proto.fieldPath = util::WrapNSString(fieldTransform.path().CanonicalString()); proto.setToServerValue = GCFSDocumentTransform_FieldTransform_ServerValue_RequestTime; [protos addObject:proto]; } return protos; } -- (NSArray *)decodedFieldTransforms: +- (std::vector)decodedFieldTransforms: (NSArray *)protos { - NSMutableArray *fieldTransforms = [NSMutableArray array]; + std::vector fieldTransforms; + fieldTransforms.reserve(protos.count); for (GCFSDocumentTransform_FieldTransform *proto in protos) { FSTAssert( proto.setToServerValue == GCFSDocumentTransform_FieldTransform_ServerValue_RequestTime, @"Unknown transform setToServerValue: %d", proto.setToServerValue); - [fieldTransforms addObject:[[FSTFieldTransform alloc] - initWithPath:FieldPath::FromServerFormat( - util::MakeStringView(proto.fieldPath)) - transform:absl::make_unique( - ServerTimestampTransform::Get())]]; + fieldTransforms.emplace_back( + FieldPath::FromServerFormat(util::MakeStringView(proto.fieldPath)), + absl::make_unique(ServerTimestampTransform::Get())); } return fieldTransforms; } -- cgit v1.2.3