FSTQueryData.mm 3.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110
  1. /*
  2. * Copyright 2017 Google
  3. *
  4. * Licensed under the Apache License, Version 2.0 (the "License");
  5. * you may not use this file except in compliance with the License.
  6. * You may obtain a copy of the License at
  7. *
  8. * http://www.apache.org/licenses/LICENSE-2.0
  9. *
  10. * Unless required by applicable law or agreed to in writing, software
  11. * distributed under the License is distributed on an "AS IS" BASIS,
  12. * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
  13. * See the License for the specific language governing permissions and
  14. * limitations under the License.
  15. */
  16. #import "Firestore/Source/Local/FSTQueryData.h"
  17. #include <utility>
  18. #import "Firestore/Source/Core/FSTQuery.h"
  19. #include "Firestore/core/src/firebase/firestore/model/snapshot_version.h"
  20. #include "Firestore/core/src/firebase/firestore/util/hashing.h"
  21. using firebase::firestore::model::SnapshotVersion;
  22. namespace util = firebase::firestore::util;
  23. NS_ASSUME_NONNULL_BEGIN
  24. @implementation FSTQueryData {
  25. SnapshotVersion _snapshotVersion;
  26. }
  27. - (instancetype)initWithQuery:(FSTQuery *)query
  28. targetID:(FSTTargetID)targetID
  29. listenSequenceNumber:(FSTListenSequenceNumber)sequenceNumber
  30. purpose:(FSTQueryPurpose)purpose
  31. snapshotVersion:(SnapshotVersion)snapshotVersion
  32. resumeToken:(NSData *)resumeToken {
  33. self = [super init];
  34. if (self) {
  35. _query = query;
  36. _targetID = targetID;
  37. _sequenceNumber = sequenceNumber;
  38. _purpose = purpose;
  39. _snapshotVersion = std::move(snapshotVersion);
  40. _resumeToken = [resumeToken copy];
  41. }
  42. return self;
  43. }
  44. - (instancetype)initWithQuery:(FSTQuery *)query
  45. targetID:(FSTTargetID)targetID
  46. listenSequenceNumber:(FSTListenSequenceNumber)sequenceNumber
  47. purpose:(FSTQueryPurpose)purpose {
  48. return [self initWithQuery:query
  49. targetID:targetID
  50. listenSequenceNumber:sequenceNumber
  51. purpose:purpose
  52. snapshotVersion:SnapshotVersion::None()
  53. resumeToken:[NSData data]];
  54. }
  55. - (const firebase::firestore::model::SnapshotVersion &)snapshotVersion {
  56. return _snapshotVersion;
  57. }
  58. - (BOOL)isEqual:(id)object {
  59. if (self == object) {
  60. return YES;
  61. }
  62. if (![object isKindOfClass:[FSTQueryData class]]) {
  63. return NO;
  64. }
  65. FSTQueryData *other = (FSTQueryData *)object;
  66. return [self.query isEqual:other.query] && self.targetID == other.targetID &&
  67. self.sequenceNumber == other.sequenceNumber && self.purpose == other.purpose &&
  68. self.snapshotVersion == other.snapshotVersion &&
  69. [self.resumeToken isEqual:other.resumeToken];
  70. }
  71. - (NSUInteger)hash {
  72. return util::Hash([self.query hash], self.targetID, self.sequenceNumber,
  73. static_cast<NSInteger>(self.purpose), self.snapshotVersion.Hash(),
  74. [self.resumeToken hash]);
  75. }
  76. - (NSString *)description {
  77. return [NSString
  78. stringWithFormat:@"<FSTQueryData: query:%@ target:%d purpose:%lu version:%s resumeToken:%@)>",
  79. self.query, self.targetID, (unsigned long)self.purpose,
  80. self.snapshotVersion.timestamp().ToString().c_str(), self.resumeToken];
  81. }
  82. - (instancetype)queryDataByReplacingSnapshotVersion:(SnapshotVersion)snapshotVersion
  83. resumeToken:(NSData *)resumeToken
  84. sequenceNumber:(FSTListenSequenceNumber)sequenceNumber {
  85. return [[FSTQueryData alloc] initWithQuery:self.query
  86. targetID:self.targetID
  87. listenSequenceNumber:sequenceNumber
  88. purpose:self.purpose
  89. snapshotVersion:std::move(snapshotVersion)
  90. resumeToken:resumeToken];
  91. }
  92. @end
  93. NS_ASSUME_NONNULL_END