Files
firebase-ios-sdk/Firestore/third_party/Immutable/FSTImmutableSortedSet.m
T
Gil 515625c47f Remove predecessorKey,Object,Document, etc (#735)
This is dead code.

I think it was probably useful in the RTDB because of the way it notified of changes, but we give changes with indexes in Firestore so I think we don't need it.
2018-02-01 07:55:49 -08:00

141 lines
3.8 KiB
Objective-C

#import "Firestore/third_party/Immutable/FSTImmutableSortedSet.h"
#import "Firestore/third_party/Immutable/FSTImmutableSortedDictionary.h"
NS_ASSUME_NONNULL_BEGIN
@interface FSTImmutableSortedSet ()
@property(nonatomic, strong) FSTImmutableSortedDictionary *dictionary;
@end
@implementation FSTImmutableSortedSet
+ (FSTImmutableSortedSet *)setWithComparator:(NSComparator)comparator {
return [FSTImmutableSortedSet setWithKeysFromDictionary:@{} comparator:comparator];
}
+ (FSTImmutableSortedSet *)setWithKeysFromDictionary:(NSDictionary *)dictionary
comparator:(NSComparator)comparator {
FSTImmutableSortedDictionary *setDict =
[FSTImmutableSortedDictionary dictionaryWithDictionary:dictionary comparator:comparator];
return [[FSTImmutableSortedSet alloc] initWithDictionary:setDict];
}
// Designated initializer.
- (id)initWithDictionary:(FSTImmutableSortedDictionary *)dictionary {
self = [super init];
if (self != nil) {
_dictionary = dictionary;
}
return self;
}
- (BOOL)isEqual:(id)object {
if (![object isKindOfClass:[FSTImmutableSortedSet class]]) {
return NO;
}
FSTImmutableSortedSet *other = (FSTImmutableSortedSet *)object;
return [self.dictionary isEqual:other.dictionary];
}
- (NSUInteger)hash {
return [self.dictionary hash];
}
- (BOOL)containsObject:(id)object {
return [self.dictionary containsKey:object];
}
- (FSTImmutableSortedSet *)setByAddingObject:(id)object {
FSTImmutableSortedDictionary *newDictionary =
[self.dictionary dictionaryBySettingObject:[NSNull null] forKey:object];
if (newDictionary != self.dictionary) {
return [[FSTImmutableSortedSet alloc] initWithDictionary:newDictionary];
} else {
return self;
}
}
- (FSTImmutableSortedSet *)setByRemovingObject:(id)object {
FSTImmutableSortedDictionary *newDictionary =
[self.dictionary dictionaryByRemovingObjectForKey:object];
if (newDictionary != self.dictionary) {
return [[FSTImmutableSortedSet alloc] initWithDictionary:newDictionary];
} else {
return self;
}
}
- (id)firstObject {
return [self.dictionary minKey];
}
- (id)lastObject {
return [self.dictionary maxKey];
}
- (NSUInteger)indexOfObject:(id)object {
return [self.dictionary indexOfKey:object];
}
- (NSUInteger)count {
return [self.dictionary count];
}
- (BOOL)isEmpty {
return [self.dictionary isEmpty];
}
- (void)enumerateObjectsUsingBlock:(void (^)(id, BOOL *))block {
[self enumerateObjectsReverse:NO usingBlock:block];
}
- (void)enumerateObjectsFrom:(id)start to:(_Nullable id)end usingBlock:(void (^)(id, BOOL *))block {
NSEnumerator *enumerator = [self.dictionary keyEnumeratorFrom:start to:end];
id item = [enumerator nextObject];
while (item) {
BOOL stop = NO;
block(item, &stop);
if (stop) {
return;
}
item = [enumerator nextObject];
}
}
- (void)enumerateObjectsReverse:(BOOL)reverse usingBlock:(void (^)(id, BOOL *))block {
[self.dictionary enumerateKeysAndObjectsReverse:reverse
usingBlock:^(id key, id value, BOOL *stop) {
block(key, stop);
}];
}
- (NSEnumerator *)objectEnumerator {
return [self.dictionary keyEnumerator];
}
- (NSEnumerator *)objectEnumeratorFrom:(id)startKey {
return [self.dictionary keyEnumeratorFrom:startKey];
}
- (NSString *)description {
NSMutableString *str = [[NSMutableString alloc] init];
__block BOOL first = YES;
[str appendString:@"FSTImmutableSortedSet ( "];
[self enumerateObjectsUsingBlock:^(id obj, BOOL *stop) {
if (!first) {
[str appendString:@", "];
}
first = NO;
[str appendString:[NSString stringWithFormat:@"%@", obj]];
}];
[str appendString:@" )"];
return str;
}
@end
NS_ASSUME_NONNULL_END