FSTQueryData.mm 4.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116
  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. #include "Firestore/core/src/firebase/firestore/model/snapshot_version.h"
  19. #include "Firestore/core/src/firebase/firestore/util/hashing.h"
  20. namespace util = firebase::firestore::util;
  21. using firebase::firestore::core::Query;
  22. using firebase::firestore::model::ListenSequenceNumber;
  23. using firebase::firestore::model::SnapshotVersion;
  24. using firebase::firestore::model::TargetId;
  25. NS_ASSUME_NONNULL_BEGIN
  26. @implementation FSTQueryData {
  27. Query _query;
  28. SnapshotVersion _snapshotVersion;
  29. }
  30. - (instancetype)initWithQuery:(Query)query
  31. targetID:(TargetId)targetID
  32. listenSequenceNumber:(ListenSequenceNumber)sequenceNumber
  33. purpose:(FSTQueryPurpose)purpose
  34. snapshotVersion:(SnapshotVersion)snapshotVersion
  35. resumeToken:(NSData *)resumeToken {
  36. self = [super init];
  37. if (self) {
  38. _query = std::move(query);
  39. _targetID = targetID;
  40. _sequenceNumber = sequenceNumber;
  41. _purpose = purpose;
  42. _snapshotVersion = std::move(snapshotVersion);
  43. _resumeToken = [resumeToken copy];
  44. }
  45. return self;
  46. }
  47. - (instancetype)initWithQuery:(Query)query
  48. targetID:(TargetId)targetID
  49. listenSequenceNumber:(ListenSequenceNumber)sequenceNumber
  50. purpose:(FSTQueryPurpose)purpose {
  51. return [self initWithQuery:std::move(query)
  52. targetID:targetID
  53. listenSequenceNumber:sequenceNumber
  54. purpose:purpose
  55. snapshotVersion:SnapshotVersion::None()
  56. resumeToken:[NSData data]];
  57. }
  58. - (const Query &)query {
  59. return _query;
  60. }
  61. - (const firebase::firestore::model::SnapshotVersion &)snapshotVersion {
  62. return _snapshotVersion;
  63. }
  64. - (BOOL)isEqual:(id)object {
  65. if (self == object) {
  66. return YES;
  67. }
  68. if (![object isKindOfClass:[FSTQueryData class]]) {
  69. return NO;
  70. }
  71. FSTQueryData *other = (FSTQueryData *)object;
  72. return self.query == other.query && self.targetID == other.targetID &&
  73. self.sequenceNumber == other.sequenceNumber && self.purpose == other.purpose &&
  74. self.snapshotVersion == other.snapshotVersion &&
  75. [self.resumeToken isEqual:other.resumeToken];
  76. }
  77. - (NSUInteger)hash {
  78. return util::Hash(self.query, self.targetID, self.sequenceNumber,
  79. static_cast<NSInteger>(self.purpose), self.snapshotVersion.Hash(),
  80. [self.resumeToken hash]);
  81. }
  82. - (NSString *)description {
  83. return [NSString
  84. stringWithFormat:@"<FSTQueryData: query:%s target:%d purpose:%lu version:%s resumeToken:%@)>",
  85. self.query.ToString().c_str(), self.targetID, (unsigned long)self.purpose,
  86. self.snapshotVersion.ToString().c_str(), self.resumeToken];
  87. }
  88. - (instancetype)queryDataByReplacingSnapshotVersion:(SnapshotVersion)snapshotVersion
  89. resumeToken:(NSData *)resumeToken
  90. sequenceNumber:(ListenSequenceNumber)sequenceNumber {
  91. return [[FSTQueryData alloc] initWithQuery:self.query
  92. targetID:self.targetID
  93. listenSequenceNumber:sequenceNumber
  94. purpose:self.purpose
  95. snapshotVersion:std::move(snapshotVersion)
  96. resumeToken:resumeToken];
  97. }
  98. @end
  99. NS_ASSUME_NONNULL_END