aboutsummaryrefslogtreecommitdiffhomepage
path: root/Firestore/Source/Core/FSTSnapshotVersion.mm
diff options
context:
space:
mode:
Diffstat (limited to 'Firestore/Source/Core/FSTSnapshotVersion.mm')
-rw-r--r--Firestore/Source/Core/FSTSnapshotVersion.mm80
1 files changed, 80 insertions, 0 deletions
diff --git a/Firestore/Source/Core/FSTSnapshotVersion.mm b/Firestore/Source/Core/FSTSnapshotVersion.mm
new file mode 100644
index 0000000..980ae52
--- /dev/null
+++ b/Firestore/Source/Core/FSTSnapshotVersion.mm
@@ -0,0 +1,80 @@
+/*
+ * Copyright 2017 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.
+ */
+
+#import "Firestore/Source/Core/FSTSnapshotVersion.h"
+
+#import "Firestore/Source/Core/FSTTimestamp.h"
+
+NS_ASSUME_NONNULL_BEGIN
+
+@implementation FSTSnapshotVersion
+
++ (instancetype)noVersion {
+ static FSTSnapshotVersion *min;
+ static dispatch_once_t onceToken;
+ dispatch_once(&onceToken, ^{
+ FSTTimestamp *timestamp = [[FSTTimestamp alloc] initWithSeconds:0 nanos:0];
+ min = [FSTSnapshotVersion versionWithTimestamp:timestamp];
+ });
+ return min;
+}
+
++ (instancetype)versionWithTimestamp:(FSTTimestamp *)timestamp {
+ return [[FSTSnapshotVersion alloc] initWithTimestamp:timestamp];
+}
+
+- (instancetype)initWithTimestamp:(FSTTimestamp *)timestamp {
+ self = [super init];
+ if (self) {
+ _timestamp = timestamp;
+ }
+ return self;
+}
+
+#pragma mark - NSObject methods
+
+- (BOOL)isEqual:(id)object {
+ if (self == object) {
+ return YES;
+ }
+ if (![object isKindOfClass:[FSTSnapshotVersion class]]) {
+ return NO;
+ }
+ return [self.timestamp isEqual:((FSTSnapshotVersion *)object).timestamp];
+}
+
+- (NSUInteger)hash {
+ return self.timestamp.hash;
+}
+
+- (NSString *)description {
+ return [NSString stringWithFormat:@"<FSTSnapshotVersion: %@>", self.timestamp];
+}
+
+- (id)copyWithZone:(NSZone *_Nullable)zone {
+ // Implements NSCopying without actually copying because timestamps are immutable.
+ return self;
+}
+
+#pragma mark - Public methods
+
+- (NSComparisonResult)compare:(FSTSnapshotVersion *)other {
+ return [self.timestamp compare:other.timestamp];
+}
+
+@end
+
+NS_ASSUME_NONNULL_END