aboutsummaryrefslogtreecommitdiffhomepage
path: root/Firestore/core/src/firebase/firestore/model
diff options
context:
space:
mode:
authorGravatar zxu <zxu@google.com>2018-04-10 16:28:22 -0400
committerGravatar GitHub <noreply@github.com>2018-04-10 16:28:22 -0400
commit2ac778f312301a8dd10c3c6498a59ce536abd738 (patch)
tree68ac918167ec2e474c552f821297ade071e33a20 /Firestore/core/src/firebase/firestore/model
parent59f9dcb72f46258ffefea3aaf93f51e927c1cc10 (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/core/src/firebase/firestore/model')
-rw-r--r--Firestore/core/src/firebase/firestore/model/CMakeLists.txt1
-rw-r--r--Firestore/core/src/firebase/firestore/model/field_transform.h70
2 files changed, 71 insertions, 0 deletions
diff --git a/Firestore/core/src/firebase/firestore/model/CMakeLists.txt b/Firestore/core/src/firebase/firestore/model/CMakeLists.txt
index d83c0aa..de783ad 100644
--- a/Firestore/core/src/firebase/firestore/model/CMakeLists.txt
+++ b/Firestore/core/src/firebase/firestore/model/CMakeLists.txt
@@ -25,6 +25,7 @@ cc_library(
field_mask.h
field_path.cc
field_path.h
+ field_transform.h
field_value.cc
field_value.h
maybe_document.cc
diff --git a/Firestore/core/src/firebase/firestore/model/field_transform.h b/Firestore/core/src/firebase/firestore/model/field_transform.h
new file mode 100644
index 0000000..a1dd96c
--- /dev/null
+++ b/Firestore/core/src/firebase/firestore/model/field_transform.h
@@ -0,0 +1,70 @@
+/*
+ * Copyright 2018 Google
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#ifndef FIRESTORE_CORE_SRC_FIREBASE_FIRESTORE_MODEL_FIELD_TRANSFORM_H_
+#define FIRESTORE_CORE_SRC_FIREBASE_FIRESTORE_MODEL_FIELD_TRANSFORM_H_
+
+#include <memory>
+#include <utility>
+
+#include "Firestore/core/src/firebase/firestore/model/field_path.h"
+#include "Firestore/core/src/firebase/firestore/model/transform_operations.h"
+
+namespace firebase {
+namespace firestore {
+namespace model {
+
+/** A field path and the TransformOperation to perform upon it. */
+class FieldTransform {
+ public:
+ FieldTransform(FieldPath path,
+ std::unique_ptr<TransformOperation> transformation) noexcept
+ : path_{std::move(path)}, transformation_{std::move(transformation)} {
+ }
+
+ const FieldPath& path() const {
+ return path_;
+ }
+
+ const TransformOperation& transformation() const {
+ return *transformation_.get();
+ }
+
+ bool operator==(const FieldTransform& other) const {
+ return path_ == other.path_ && *transformation_ == *other.transformation_;
+ }
+
+#if defined(__OBJC__)
+ // For Objective-C++ hash; to be removed after migration.
+ // Do NOT use in C++ code.
+ NSUInteger Hash() const {
+ NSUInteger hash = path_.Hash();
+ hash = hash * 31 + transformation_->Hash();
+ return hash;
+ }
+#endif // defined(__OBJC__)
+
+ private:
+ FieldPath path_;
+ // Shared by copies of the same FieldTransform.
+ std::shared_ptr<const TransformOperation> transformation_;
+};
+
+} // namespace model
+} // namespace firestore
+} // namespace firebase
+
+#endif // FIRESTORE_CORE_SRC_FIREBASE_FIRESTORE_MODEL_FIELD_TRANSFORM_H_