aboutsummaryrefslogtreecommitdiffhomepage
path: root/Firestore/core/src/firebase/firestore/model/transform_operations.h
diff options
context:
space:
mode:
Diffstat (limited to 'Firestore/core/src/firebase/firestore/model/transform_operations.h')
-rw-r--r--Firestore/core/src/firebase/firestore/model/transform_operations.h101
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