FSTQueryData.m 3.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293
  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. #import "Firestore/Source/Core/FSTQuery.h"
  18. #import "Firestore/Source/Core/FSTSnapshotVersion.h"
  19. NS_ASSUME_NONNULL_BEGIN
  20. @implementation FSTQueryData
  21. - (instancetype)initWithQuery:(FSTQuery *)query
  22. targetID:(FSTTargetID)targetID
  23. purpose:(FSTQueryPurpose)purpose
  24. snapshotVersion:(FSTSnapshotVersion *)snapshotVersion
  25. resumeToken:(NSData *)resumeToken {
  26. self = [super init];
  27. if (self) {
  28. _query = query;
  29. _targetID = targetID;
  30. _purpose = purpose;
  31. _snapshotVersion = snapshotVersion;
  32. _resumeToken = [resumeToken copy];
  33. }
  34. return self;
  35. }
  36. - (instancetype)initWithQuery:(FSTQuery *)query
  37. targetID:(FSTTargetID)targetID
  38. purpose:(FSTQueryPurpose)purpose {
  39. return [self initWithQuery:query
  40. targetID:targetID
  41. purpose:purpose
  42. snapshotVersion:[FSTSnapshotVersion noVersion]
  43. resumeToken:[NSData data]];
  44. }
  45. - (BOOL)isEqual:(id)object {
  46. if (self == object) {
  47. return YES;
  48. }
  49. if (![object isKindOfClass:[FSTQueryData class]]) {
  50. return NO;
  51. }
  52. FSTQueryData *other = (FSTQueryData *)object;
  53. return [self.query isEqual:other.query] && self.targetID == other.targetID &&
  54. self.purpose == other.purpose && [self.snapshotVersion isEqual:other.snapshotVersion] &&
  55. [self.resumeToken isEqual:other.resumeToken];
  56. }
  57. - (NSUInteger)hash {
  58. NSUInteger result = [self.query hash];
  59. result = result * 31 + self.targetID;
  60. result = result * 31 + self.purpose;
  61. result = result * 31 + [self.snapshotVersion hash];
  62. result = result * 31 + [self.resumeToken hash];
  63. return result;
  64. }
  65. - (NSString *)description {
  66. return [NSString
  67. stringWithFormat:@"<FSTQueryData: query:%@ target:%d purpose:%lu version:%@ resumeToken:%@)>",
  68. self.query, self.targetID, (unsigned long)self.purpose, self.snapshotVersion,
  69. self.resumeToken];
  70. }
  71. - (instancetype)queryDataByReplacingSnapshotVersion:(FSTSnapshotVersion *)snapshotVersion
  72. resumeToken:(NSData *)resumeToken {
  73. return [[FSTQueryData alloc] initWithQuery:self.query
  74. targetID:self.targetID
  75. purpose:self.purpose
  76. snapshotVersion:snapshotVersion
  77. resumeToken:resumeToken];
  78. }
  79. @end
  80. NS_ASSUME_NONNULL_END