diff options
-rw-r--r-- | Firestore/Example/Firestore.xcodeproj/project.pbxproj | 50 | ||||
-rw-r--r-- | Firestore/Example/Tests/Model/field_transform_test.mm (renamed from Firestore/core/test/firebase/firestore/model/field_transform_test.cc) | 5 | ||||
-rw-r--r-- | Firestore/Example/Tests/Model/transform_operations_test.mm (renamed from Firestore/core/test/firebase/firestore/model/transform_operations_test.cc) | 16 | ||||
-rw-r--r-- | Firestore/Source/Model/FSTMutation.mm | 4 | ||||
-rw-r--r-- | Firestore/core/src/firebase/firestore/model/transform_operations.h | 101 | ||||
-rw-r--r-- | Firestore/core/test/firebase/firestore/model/CMakeLists.txt | 2 |
6 files changed, 103 insertions, 75 deletions
diff --git a/Firestore/Example/Firestore.xcodeproj/project.pbxproj b/Firestore/Example/Firestore.xcodeproj/project.pbxproj index 26b5562..131771b 100644 --- a/Firestore/Example/Firestore.xcodeproj/project.pbxproj +++ b/Firestore/Example/Firestore.xcodeproj/project.pbxproj @@ -111,6 +111,13 @@ 5492E0CA2021557E00B64F25 /* FSTWatchChangeTests.mm in Sources */ = {isa = PBXBuildFile; fileRef = 5492E0C52021557E00B64F25 /* FSTWatchChangeTests.mm */; }; 5495EB032040E90200EBA509 /* CodableGeoPointTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5495EB022040E90200EBA509 /* CodableGeoPointTests.swift */; }; 54995F6F205B6E12004EFFA0 /* leveldb_key_test.cc in Sources */ = {isa = PBXBuildFile; fileRef = 54995F6E205B6E12004EFFA0 /* leveldb_key_test.cc */; }; + 549CCA5020A36DBC00BCEB75 /* sorted_set_test.cc in Sources */ = {isa = PBXBuildFile; fileRef = 549CCA4C20A36DBB00BCEB75 /* sorted_set_test.cc */; }; + 549CCA5120A36DBC00BCEB75 /* tree_sorted_map_test.cc in Sources */ = {isa = PBXBuildFile; fileRef = 549CCA4D20A36DBB00BCEB75 /* tree_sorted_map_test.cc */; }; + 549CCA5220A36DBC00BCEB75 /* sorted_map_test.cc in Sources */ = {isa = PBXBuildFile; fileRef = 549CCA4E20A36DBB00BCEB75 /* sorted_map_test.cc */; }; + 549CCA5720A36E1F00BCEB75 /* field_mask_test.cc in Sources */ = {isa = PBXBuildFile; fileRef = 549CCA5320A36E1F00BCEB75 /* field_mask_test.cc */; }; + 549CCA5920A36E1F00BCEB75 /* precondition_test.cc in Sources */ = {isa = PBXBuildFile; fileRef = 549CCA5520A36E1F00BCEB75 /* precondition_test.cc */; }; + 54A0352620A3AED0003E0143 /* field_transform_test.mm in Sources */ = {isa = PBXBuildFile; fileRef = 54A0352320A3AEC3003E0143 /* field_transform_test.mm */; }; + 54A0352720A3AED0003E0143 /* transform_operations_test.mm in Sources */ = {isa = PBXBuildFile; fileRef = 54A0352220A3AEC3003E0143 /* transform_operations_test.mm */; }; 54C2294F1FECABAE007D065B /* log_test.cc in Sources */ = {isa = PBXBuildFile; fileRef = 54C2294E1FECABAE007D065B /* log_test.cc */; }; 54DA12A61F315EE100DD57A1 /* collection_spec_test.json in Resources */ = {isa = PBXBuildFile; fileRef = 54DA129C1F315EE100DD57A1 /* collection_spec_test.json */; }; 54DA12A71F315EE100DD57A1 /* existence_filter_spec_test.json in Resources */ = {isa = PBXBuildFile; fileRef = 54DA129D1F315EE100DD57A1 /* existence_filter_spec_test.json */; }; @@ -338,6 +345,14 @@ 5492E0C52021557E00B64F25 /* FSTWatchChangeTests.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; path = FSTWatchChangeTests.mm; sourceTree = "<group>"; }; 5495EB022040E90200EBA509 /* CodableGeoPointTests.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = CodableGeoPointTests.swift; sourceTree = "<group>"; }; 54995F6E205B6E12004EFFA0 /* leveldb_key_test.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = leveldb_key_test.cc; sourceTree = "<group>"; }; + 549CCA4C20A36DBB00BCEB75 /* sorted_set_test.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = sorted_set_test.cc; sourceTree = "<group>"; }; + 549CCA4D20A36DBB00BCEB75 /* tree_sorted_map_test.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = tree_sorted_map_test.cc; sourceTree = "<group>"; }; + 549CCA4E20A36DBB00BCEB75 /* sorted_map_test.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = sorted_map_test.cc; sourceTree = "<group>"; }; + 549CCA4F20A36DBC00BCEB75 /* testing.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = testing.h; sourceTree = "<group>"; }; + 549CCA5320A36E1F00BCEB75 /* field_mask_test.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = field_mask_test.cc; sourceTree = "<group>"; }; + 549CCA5520A36E1F00BCEB75 /* precondition_test.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = precondition_test.cc; sourceTree = "<group>"; }; + 54A0352220A3AEC3003E0143 /* transform_operations_test.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; path = transform_operations_test.mm; sourceTree = "<group>"; }; + 54A0352320A3AEC3003E0143 /* field_transform_test.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; path = field_transform_test.mm; sourceTree = "<group>"; }; 54C2294E1FECABAE007D065B /* log_test.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = log_test.cc; sourceTree = "<group>"; }; 54C9EDF12040E16300A969CD /* Firestore_SwiftTests_iOS.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = Firestore_SwiftTests_iOS.xctest; sourceTree = BUILT_PRODUCTS_DIR; }; 54C9EDF52040E16300A969CD /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = "<group>"; }; @@ -519,19 +534,19 @@ 54740A561FC913EB00713A1A /* util */ = { isa = PBXGroup; children = ( - B6FB4686208F9B9100554BA2 /* async_tests_util.h */, - B6FB4689208F9B9100554BA2 /* executor_libdispatch_test.mm */, - B6FB4687208F9B9100554BA2 /* executor_std_test.cc */, - B6FB4688208F9B9100554BA2 /* executor_test.cc */, - B6FB468A208F9B9100554BA2 /* executor_test.h */, + 548DB926200D590300E00ABC /* assert_test.cc */, B6FB4680208EA0BE00554BA2 /* async_queue_libdispatch_test.mm */, B6FB4681208EA0BE00554BA2 /* async_queue_std_test.cc */, B6FB467B208E9A8200554BA2 /* async_queue_test.cc */, B6FB467A208E9A8200554BA2 /* async_queue_test.h */, - 548DB926200D590300E00ABC /* assert_test.cc */, + B6FB4686208F9B9100554BA2 /* async_tests_util.h */, 54740A521FC913E500713A1A /* autoid_test.cc */, AB380D01201BC69F00D97691 /* bits_test.cc */, 548DB928200D59F600E00ABC /* comparison_test.cc */, + B6FB4689208F9B9100554BA2 /* executor_libdispatch_test.mm */, + B6FB4687208F9B9100554BA2 /* executor_std_test.cc */, + B6FB4688208F9B9100554BA2 /* executor_test.cc */, + B6FB468A208F9B9100554BA2 /* executor_test.h */, 54511E8D209805F8005BD28F /* hashing_test.cc */, 54C2294E1FECABAE007D065B /* log_test.cc */, AB380D03201BC6E400D97691 /* ordered_code_test.cc */, @@ -545,12 +560,12 @@ 54764FAC1FAA0C390085E60A /* GoogleTests */ = { isa = PBXGroup; children = ( - 546854A720A3681B004BDBD5 /* remote */, AB38D9312023962A000A432D /* auth */, AB380CF7201937B800D97691 /* core */, 54EB764B202277970088B8F3 /* immutable */, 54995F70205B6E1A004EFFA0 /* local */, AB356EF5200E9D1A0089B766 /* model */, + 546854A720A3681B004BDBD5 /* remote */, 5467FB05203E652F009C9584 /* testutil */, 54740A561FC913EB00713A1A /* util */, 54764FAE1FAA21B90085E60A /* FSTGoogleTestTests.mm */, @@ -591,6 +606,10 @@ isa = PBXGroup; children = ( 54EB764C202277B30088B8F3 /* array_sorted_map_test.cc */, + 549CCA4E20A36DBB00BCEB75 /* sorted_map_test.cc */, + 549CCA4C20A36DBB00BCEB75 /* sorted_set_test.cc */, + 549CCA4F20A36DBC00BCEB75 /* testing.h */, + 549CCA4D20A36DBB00BCEB75 /* tree_sorted_map_test.cc */, ); path = immutable; sourceTree = "<group>"; @@ -735,14 +754,16 @@ AB356EF5200E9D1A0089B766 /* model */ = { isa = PBXGroup; children = ( + AB71064B201FA60300344F18 /* database_id_test.cc */, B6152AD5202A5385000E5744 /* document_key_test.cc */, AB6B908320322E4D00CC290A /* document_test.cc */, - B686F2B02024FFD70028D6BE /* resource_path_test.cc */, + 549CCA5320A36E1F00BCEB75 /* field_mask_test.cc */, B686F2AD2023DDB20028D6BE /* field_path_test.cc */, - AB71064B201FA60300344F18 /* database_id_test.cc */, AB356EF6200EA5EB0089B766 /* field_value_test.cc */, AB6B908520322E6D00CC290A /* maybe_document_test.cc */, AB6B908720322E8800CC290A /* no_document_test.cc */, + 549CCA5520A36E1F00BCEB75 /* precondition_test.cc */, + B686F2B02024FFD70028D6BE /* resource_path_test.cc */, ABA495B9202B7E79008A7851 /* snapshot_version_test.cc */, ); path = model; @@ -751,8 +772,8 @@ AB380CF7201937B800D97691 /* core */ = { isa = PBXGroup; children = ( - AB380CF82019382300D97691 /* target_id_generator_test.cc */, AB38D92E20235D22000A432D /* database_info_test.cc */, + AB380CF82019382300D97691 /* target_id_generator_test.cc */, ); path = core; sourceTree = "<group>"; @@ -826,11 +847,13 @@ DE51B17B1F0D48AC0013853F /* Model */ = { isa = PBXGroup; children = ( + 54A0352320A3AEC3003E0143 /* field_transform_test.mm */, 5492E0B22021555000B64F25 /* FSTDocumentKeyTests.mm */, 5492E0B32021555100B64F25 /* FSTDocumentSetTests.mm */, 5492E0B62021555100B64F25 /* FSTDocumentTests.mm */, 5492E0B82021555100B64F25 /* FSTFieldValueTests.mm */, 5492E0B72021555100B64F25 /* FSTMutationTests.mm */, + 54A0352220A3AEC3003E0143 /* transform_operations_test.mm */, ); path = Model; sourceTree = "<group>"; @@ -1445,6 +1468,7 @@ DE2EF0881F3D0B6E003D0CDC /* FSTTreeSortedDictionaryTests.m in Sources */, ABE6637A201FA81900ED349A /* database_id_test.cc in Sources */, 5492E0AF2021552D00B64F25 /* FSTReferenceSetTests.mm in Sources */, + 549CCA5120A36DBC00BCEB75 /* tree_sorted_map_test.cc in Sources */, 5492E09E2021552D00B64F25 /* FSTEagerGarbageCollectorTests.mm in Sources */, 5492E0C62021557E00B64F25 /* FSTWatchChange+Testing.mm in Sources */, 5492E064202154B900B64F25 /* FSTQueryListenerTests.mm in Sources */, @@ -1459,6 +1483,7 @@ 5492E058202154AB00B64F25 /* FSTAPIHelpers.mm in Sources */, AB380CFB2019388600D97691 /* target_id_generator_test.cc in Sources */, 5492E0A82021552D00B64F25 /* FSTLevelDBLocalStoreTests.mm in Sources */, + 549CCA5920A36E1F00BCEB75 /* precondition_test.cc in Sources */, ABC1D7DE2023A05300BA84F0 /* user_test.cc in Sources */, 5491BC721FB44593008B3588 /* FSTIntegrationTestCase.mm in Sources */, ABC1D7DD2023A04F00BA84F0 /* empty_credentials_provider_test.cc in Sources */, @@ -1478,8 +1503,10 @@ 5436F32420008FAD006E51E3 /* string_printf_test.cc in Sources */, 5492E067202154B900B64F25 /* FSTEventManagerTests.mm in Sources */, 5492E0BF2021555100B64F25 /* FSTFieldValueTests.mm in Sources */, + 54A0352620A3AED0003E0143 /* field_transform_test.mm in Sources */, 5492E055202154AB00B64F25 /* FIRDocumentSnapshotTests.mm in Sources */, 5492E03E2021401F00B64F25 /* FSTEventAccumulator.mm in Sources */, + 54A0352720A3AED0003E0143 /* transform_operations_test.mm in Sources */, DE2EF0851F3D0B6E003D0CDC /* FSTArraySortedDictionaryTests.m in Sources */, 5492E0AA2021552D00B64F25 /* FSTLevelDBRemoteDocumentCacheTests.mm in Sources */, 5492E0AC2021552D00B64F25 /* FSTMutationQueueTests.mm in Sources */, @@ -1515,6 +1542,7 @@ 54764FAF1FAA21B90085E60A /* FSTGoogleTestTests.mm in Sources */, AB380D04201BC6E400D97691 /* ordered_code_test.cc in Sources */, 5492E03F2021401F00B64F25 /* FSTHelpers.mm in Sources */, + 549CCA5220A36DBC00BCEB75 /* sorted_map_test.cc in Sources */, 5492E068202154B900B64F25 /* FSTQueryTests.mm in Sources */, 5492E0AB2021552D00B64F25 /* StringViewTests.mm in Sources */, 5492E0C92021557E00B64F25 /* FSTRemoteEventTests.mm in Sources */, @@ -1532,6 +1560,7 @@ 5492E03420213FFC00B64F25 /* FSTMemorySpecTests.mm in Sources */, AB380D02201BC69F00D97691 /* bits_test.cc in Sources */, 548DB929200D59F600E00ABC /* comparison_test.cc in Sources */, + 549CCA5720A36E1F00BCEB75 /* field_mask_test.cc in Sources */, 5492E03D2021401F00B64F25 /* FSTAssertTests.mm in Sources */, AB38D93020236E21000A432D /* database_info_test.cc in Sources */, 5492E052202154AB00B64F25 /* FIRGeoPointTests.mm in Sources */, @@ -1540,6 +1569,7 @@ 5492E03520213FFC00B64F25 /* FSTSpecTests.mm in Sources */, 5492E057202154AB00B64F25 /* FIRSnapshotMetadataTests.mm in Sources */, 54740A571FC914BA00713A1A /* secure_random_test.cc in Sources */, + 549CCA5020A36DBC00BCEB75 /* sorted_set_test.cc in Sources */, 5492E0BE2021555100B64F25 /* FSTMutationTests.mm in Sources */, 132E3E53179DE287D875F3F2 /* FSTLevelDBTransactionTests.mm in Sources */, ); diff --git a/Firestore/core/test/firebase/firestore/model/field_transform_test.cc b/Firestore/Example/Tests/Model/field_transform_test.mm index b66aeef..a22a0f3 100644 --- a/Firestore/core/test/firebase/firestore/model/field_transform_test.cc +++ b/Firestore/Example/Tests/Model/field_transform_test.mm @@ -26,9 +26,8 @@ namespace firestore { namespace model { TEST(FieldTransform, Getter) { - FieldTransform transform(testutil::Field("foo"), - absl::make_unique<ServerTimestampTransform>( - ServerTimestampTransform::Get())); + FieldTransform transform{testutil::Field("foo"), absl::make_unique<ServerTimestampTransform>( + ServerTimestampTransform::Get())}; EXPECT_EQ(testutil::Field("foo"), transform.path()); EXPECT_EQ(ServerTimestampTransform::Get(), transform.transformation()); diff --git a/Firestore/core/test/firebase/firestore/model/transform_operations_test.cc b/Firestore/Example/Tests/Model/transform_operations_test.mm index ec0882a..247ea13 100644 --- a/Firestore/core/test/firebase/firestore/model/transform_operations_test.cc +++ b/Firestore/Example/Tests/Model/transform_operations_test.mm @@ -31,9 +31,25 @@ class DummyOperation : public TransformOperation { return Type::Test; } + FSTFieldValue* ApplyToLocalView(FSTFieldValue* /* previousValue */, + FIRTimestamp* /* localWriteTime */) const override { + return nil; + } + + FSTFieldValue* ApplyToRemoteDocument(FSTFieldValue* /* previousValue */, + FSTFieldValue* /* transformResult */) const override { + return nil; + } + bool operator==(const TransformOperation& other) const override { return this == &other; } + + NSUInteger Hash() const override { + // arbitrary number, the same as used in ObjC implementation, since all + // instances are equal. + return 37; + } }; TEST(TransformOperations, ServerTimestamp) { diff --git a/Firestore/Source/Model/FSTMutation.mm b/Firestore/Source/Model/FSTMutation.mm index ee6ef9c..82a535e 100644 --- a/Firestore/Source/Model/FSTMutation.mm +++ b/Firestore/Source/Model/FSTMutation.mm @@ -400,7 +400,7 @@ serverTransformResultsWithBaseDocument:(nullable FSTMaybeDocument *)baseDocument } [transformResults - addObject:transform.applyToRemoteDocument(previousValue, serverTransformResults[i])]; + addObject:transform.ApplyToRemoteDocument(previousValue, serverTransformResults[i])]; } return transformResults; } @@ -426,7 +426,7 @@ serverTransformResultsWithBaseDocument:(nullable FSTMaybeDocument *)baseDocument previousValue = [((FSTDocument *)baseDocument) fieldForPath:fieldTransform.path()]; } - [transformResults addObject:transform.applyToLocalView(previousValue, localWriteTime)]; + [transformResults addObject:transform.ApplyToLocalView(previousValue, localWriteTime)]; } return transformResults; } diff --git a/Firestore/core/src/firebase/firestore/model/transform_operations.h b/Firestore/core/src/firebase/firestore/model/transform_operations.h index abc8d1b..8eed7ae 100644 --- a/Firestore/core/src/firebase/firestore/model/transform_operations.h +++ b/Firestore/core/src/firebase/firestore/model/transform_operations.h @@ -17,14 +17,16 @@ #ifndef FIRESTORE_CORE_SRC_FIREBASE_FIRESTORE_MODEL_TRANSFORM_OPERATIONS_H_ #define FIRESTORE_CORE_SRC_FIREBASE_FIRESTORE_MODEL_TRANSFORM_OPERATIONS_H_ +#if !defined(__OBJC__) +#error "This header only supports Objective-C++." +#endif // !defined(__OBJC__) + #include <utility> #include <vector> -#include "Firestore/core/include/firebase/firestore/timestamp.h" - -#if defined(__OBJC__) #import "Firestore/Source/Model/FSTFieldValue.h" -#endif + +#include "Firestore/core/include/firebase/firestore/timestamp.h" namespace firebase { namespace firestore { @@ -51,36 +53,31 @@ class TransformOperation { /** Returns the actual type. */ virtual Type type() const = 0; -// TODO(mikelehen): apply methods require FSTFieldValue which is Obj-C only. -#if defined(__OBJC__) /** * Computes the local transform result against the provided `previousValue`, * optionally using the provided localWriteTime. */ - virtual FSTFieldValue *applyToLocalView( - FSTFieldValue *previousValue, FIRTimestamp *localWriteTime) const = 0; + virtual FSTFieldValue* ApplyToLocalView( + FSTFieldValue* previousValue, FIRTimestamp* localWriteTime) const = 0; /** * Computes a final transform result after the transform has been acknowledged * by the server, potentially using the server-provided transformResult. */ - virtual FSTFieldValue *applyToRemoteDocument( - FSTFieldValue *previousValue, FSTFieldValue *transformResult) const = 0; -#endif + virtual FSTFieldValue* ApplyToRemoteDocument( + FSTFieldValue* previousValue, FSTFieldValue* transformResult) const = 0; /** Returns whether the two are equal. */ - virtual bool operator==(const TransformOperation &other) const = 0; + virtual bool operator==(const TransformOperation& other) const = 0; /** Returns whether the two are not equal. */ - bool operator!=(const TransformOperation &other) const { + bool operator!=(const TransformOperation& other) const { return !operator==(other); } -#if defined(__OBJC__) // For Objective-C++ hash; to be removed after migration. // Do NOT use in C++ code. virtual NSUInteger Hash() const = 0; -#endif // defined(__OBJC__) }; /** Transforms a value into a server-generated timestamp. */ @@ -93,33 +90,29 @@ class ServerTimestampTransform : public TransformOperation { return Type::ServerTimestamp; } -// TODO(mikelehen): apply methods require FSTFieldValue which is Obj-C only. -#if defined(__OBJC__) - FSTFieldValue *applyToLocalView(FSTFieldValue *previousValue, - FIRTimestamp *localWriteTime) const override { + FSTFieldValue* ApplyToLocalView(FSTFieldValue* previousValue, + FIRTimestamp* localWriteTime) const override { return [FSTServerTimestampValue serverTimestampValueWithLocalWriteTime:localWriteTime previousValue:previousValue]; } - FSTFieldValue *applyToRemoteDocument( - FSTFieldValue *previousValue, - FSTFieldValue *transformResult) const override { + FSTFieldValue* ApplyToRemoteDocument( + FSTFieldValue* /* previousValue */, + FSTFieldValue* transformResult) const override { return transformResult; } -#endif - bool operator==(const TransformOperation &other) const override { + bool operator==(const TransformOperation& other) const override { // All ServerTimestampTransform objects are equal. return other.type() == Type::ServerTimestamp; } - static const ServerTimestampTransform &Get() { + static const ServerTimestampTransform& Get() { static ServerTimestampTransform shared_instance; return shared_instance; } -#if defined(__OBJC__) // For Objective-C++ hash; to be removed after migration. // Do NOT use in C++ code. NSUInteger Hash() const override { @@ -127,24 +120,19 @@ class ServerTimestampTransform : public TransformOperation { // instances are equal. return 37; } -#endif // defined(__OBJC__) private: ServerTimestampTransform() { } }; -// TODO(mikelehen): ArrayTransform can only be used from Obj-C until we switch -// to using FieldValue instead of FSTFieldValue. -#if defined(__OBJC__) - /** * Transforms an array via a union or remove operation (for convenience, we use * this class for both Type::ArrayUnion and Type::ArrayRemove). */ class ArrayTransform : public TransformOperation { public: - ArrayTransform(Type type, std::vector<FSTFieldValue *> elements) + ArrayTransform(Type type, std::vector<FSTFieldValue*> elements) : type_(type), elements_(std::move(elements)) { } @@ -155,33 +143,34 @@ class ArrayTransform : public TransformOperation { return type_; } - FSTFieldValue *applyToLocalView(FSTFieldValue *previousValue, - FIRTimestamp *localWriteTime) const override { - return apply(previousValue); + FSTFieldValue* ApplyToLocalView( + FSTFieldValue* previousValue, + FIRTimestamp* /* localWriteTime */) const override { + return Apply(previousValue); } - FSTFieldValue *applyToRemoteDocument( - FSTFieldValue *previousValue, - FSTFieldValue *transformResult) const override { + FSTFieldValue* ApplyToRemoteDocument( + FSTFieldValue* previousValue, + FSTFieldValue* /* transformResult */) const override { // The server just sends null as the transform result for array operations, // so we have to calculate a result the same as we do for local // applications. - return apply(previousValue); + return Apply(previousValue); } - const std::vector<FSTFieldValue *> &elements() const { + const std::vector<FSTFieldValue*>& elements() const { return elements_; } - bool operator==(const TransformOperation &other) const override { + bool operator==(const TransformOperation& other) const override { if (other.type() != type()) { return false; } - auto array_transform = static_cast<const ArrayTransform &>(other); + auto array_transform = static_cast<const ArrayTransform&>(other); if (array_transform.elements_.size() != elements_.size()) { return false; } - for (int i = 0; i < elements_.size(); i++) { + for (size_t i = 0; i < elements_.size(); i++) { if (![array_transform.elements_[i] isEqual:elements_[i]]) { return false; } @@ -189,51 +178,48 @@ class ArrayTransform : public TransformOperation { return true; } -#if defined(__OBJC__) // For Objective-C++ hash; to be removed after migration. // Do NOT use in C++ code. NSUInteger Hash() const override { NSUInteger result = 37; result = 31 * result + (type() == Type::ArrayUnion ? 1231 : 1237); - for (FSTFieldValue *element : elements_) { + for (FSTFieldValue* element : elements_) { result = 31 * result + [element hash]; } return result; } -#endif // defined(__OBJC__) - static const std::vector<FSTFieldValue *> &Elements( - const TransformOperation &op) { + static const std::vector<FSTFieldValue*>& Elements( + const TransformOperation& op) { FIREBASE_ASSERT(op.type() == Type::ArrayUnion || op.type() == Type::ArrayRemove); - return static_cast<const ArrayTransform &>(op).elements(); + return static_cast<const ArrayTransform&>(op).elements(); } private: Type type_; - std::vector<FSTFieldValue *> elements_; + std::vector<FSTFieldValue*> elements_; /** * Inspects the provided value, returning a mutable copy of the internal array * if it's an FSTArrayValue and an empty mutable array if it's nil or any * other type of FSTFieldValue. */ - static NSMutableArray<FSTFieldValue *> *CoercedFieldValuesArray( - FSTFieldValue *value) { + static NSMutableArray<FSTFieldValue*>* CoercedFieldValuesArray( + FSTFieldValue* value) { if ([value isMemberOfClass:[FSTArrayValue class]]) { return [NSMutableArray - arrayWithArray:reinterpret_cast<FSTArrayValue *>(value) - .internalValue]; + arrayWithArray:reinterpret_cast<FSTArrayValue*>(value).internalValue]; } else { // coerce to empty array. return [NSMutableArray array]; } } - FSTFieldValue *apply(FSTFieldValue *previousValue) const { - NSMutableArray<FSTFieldValue *> *result = + FSTFieldValue* Apply(FSTFieldValue* previousValue) const { + NSMutableArray<FSTFieldValue*>* result = ArrayTransform::CoercedFieldValuesArray(previousValue); - for (FSTFieldValue *element : elements_) { + for (FSTFieldValue* element : elements_) { if (type_ == Type::ArrayUnion) { if (![result containsObject:element]) { [result addObject:element]; @@ -246,7 +232,6 @@ class ArrayTransform : public TransformOperation { return [[FSTArrayValue alloc] initWithValueNoCopy:result]; } }; -#endif } // namespace model } // namespace firestore diff --git a/Firestore/core/test/firebase/firestore/model/CMakeLists.txt b/Firestore/core/test/firebase/firestore/model/CMakeLists.txt index 9c94677..b38d658 100644 --- a/Firestore/core/test/firebase/firestore/model/CMakeLists.txt +++ b/Firestore/core/test/firebase/firestore/model/CMakeLists.txt @@ -20,14 +20,12 @@ cc_test( document_test.cc field_mask_test.cc field_path_test.cc - field_transform_test.cc field_value_test.cc maybe_document_test.cc no_document_test.cc precondition_test.cc resource_path_test.cc snapshot_version_test.cc - transform_operations_test.cc DEPENDS firebase_firestore_model ) |