diff options
Diffstat (limited to 'Firestore/core/src/firebase')
-rw-r--r-- | Firestore/core/src/firebase/firestore/model/transform_operations.h | 101 |
1 files changed, 43 insertions, 58 deletions
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 |