diff options
author | zxu <zxu@google.com> | 2018-04-10 16:28:22 -0400 |
---|---|---|
committer | GitHub <noreply@github.com> | 2018-04-10 16:28:22 -0400 |
commit | 2ac778f312301a8dd10c3c6498a59ce536abd738 (patch) | |
tree | 68ac918167ec2e474c552f821297ade071e33a20 /Firestore/Source/Remote | |
parent | 59f9dcb72f46258ffefea3aaf93f51e927c1cc10 (diff) |
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
Diffstat (limited to 'Firestore/Source/Remote')
-rw-r--r-- | Firestore/Source/Remote/FSTSerializerBeta.mm | 27 |
1 files changed, 14 insertions, 13 deletions
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<FieldPath> fields{}; + std::vector<FieldPath> 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<GCFSDocumentTransform_FieldTransform *> *)encodedFieldTransforms: - (NSArray<FSTFieldTransform *> *)fieldTransforms { + (const std::vector<FieldTransform> &)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<FSTFieldTransform *> *)decodedFieldTransforms: +- (std::vector<FieldTransform>)decodedFieldTransforms: (NSArray<GCFSDocumentTransform_FieldTransform *> *)protos { - NSMutableArray<FSTFieldTransform *> *fieldTransforms = [NSMutableArray array]; + std::vector<FieldTransform> 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>( - ServerTimestampTransform::Get())]]; + fieldTransforms.emplace_back( + FieldPath::FromServerFormat(util::MakeStringView(proto.fieldPath)), + absl::make_unique<ServerTimestampTransform>(ServerTimestampTransform::Get())); } return fieldTransforms; } |