mirror of
https://github.com/status-im/react-native.git
synced 2025-01-15 03:56:03 +00:00
6153fffb30
- Add back providesModule transform to JSAppServer | Joseph Savona - [ReactKit] fix open source performance issue | John Harper - [ReactKit] improve ReactIOSEventEmitter logics | Andrew Rasmussen - [reactkit] fix web view JS executor and bind it to Command-d | John Harper - Removed hardcoded RCTModuleIDs | Nick Lockwood - [ReactKit] Animated GIF support | Alex Akers - [ReactKit] Update RCTBridge to support non-`id` argument types | Alex Akers - [reactkit] fix typo in RCTCopyProperty() change | John Harper - [reactkit] fix shadow view crash on missing properties | John Harper - [reactkit] fix transform keypath | John Harper
107 lines
2.0 KiB
Objective-C
107 lines
2.0 KiB
Objective-C
// Copyright 2004-present Facebook. All Rights Reserved.
|
|
|
|
#import "RCTSparseArray.h"
|
|
|
|
@implementation RCTSparseArray
|
|
{
|
|
NSMutableDictionary *_storage;
|
|
}
|
|
|
|
- (instancetype)init
|
|
{
|
|
return [self initWithCapacity:0];
|
|
}
|
|
|
|
- (instancetype)initWithCapacity:(NSUInteger)capacity
|
|
{
|
|
if ((self = [super init])) {
|
|
_storage = [NSMutableDictionary dictionaryWithCapacity:capacity];
|
|
}
|
|
return self;
|
|
}
|
|
|
|
- (instancetype)initWithSparseArray:(RCTSparseArray *)sparseArray
|
|
{
|
|
if ((self = [super init])) {
|
|
_storage = [sparseArray->_storage copy];
|
|
}
|
|
return self;
|
|
}
|
|
|
|
+ (instancetype)sparseArray
|
|
{
|
|
return [[self alloc] init];
|
|
}
|
|
|
|
+ (instancetype)sparseArrayWithCapacity:(NSUInteger)capacity
|
|
{
|
|
return [[self alloc] initWithCapacity:capacity];
|
|
}
|
|
|
|
+ (instancetype)sparseArrayWithSparseArray:(RCTSparseArray *)sparseArray
|
|
{
|
|
return [[self alloc] initWithSparseArray:sparseArray];
|
|
}
|
|
|
|
- (id)objectAtIndexedSubscript:(NSUInteger)idx
|
|
{
|
|
return _storage[@(idx)];
|
|
}
|
|
|
|
- (void)setObject:(id)obj atIndexedSubscript:(NSUInteger)idx
|
|
{
|
|
self[@(idx)] = obj;
|
|
}
|
|
|
|
- (id)objectForKeyedSubscript:(NSNumber *)key
|
|
{
|
|
return _storage[key];
|
|
}
|
|
|
|
- (void)setObject:(id)obj forKeyedSubscript:(NSNumber *)key
|
|
{
|
|
if (obj) {
|
|
_storage[key] = obj;
|
|
} else {
|
|
[_storage removeObjectForKey:key];
|
|
}
|
|
}
|
|
|
|
- (NSUInteger)count
|
|
{
|
|
return _storage.count;
|
|
}
|
|
|
|
- (NSArray *)allIndexes
|
|
{
|
|
return _storage.allKeys;
|
|
}
|
|
|
|
- (NSArray *)allObjects
|
|
{
|
|
return _storage.allValues;
|
|
}
|
|
|
|
- (void)enumerateObjectsUsingBlock:(void (^)(id obj, NSNumber *idx, BOOL *stop))block
|
|
{
|
|
NSParameterAssert(block != nil);
|
|
[_storage enumerateKeysAndObjectsUsingBlock:^(NSNumber *key, id obj, BOOL *stop) {
|
|
block(obj, key, stop);
|
|
}];
|
|
}
|
|
|
|
- (void)enumerateObjectsWithOptions:(NSEnumerationOptions)opts usingBlock:(void (^)(id obj, NSNumber *idx, BOOL *stop))block
|
|
{
|
|
NSParameterAssert(block != nil);
|
|
[_storage enumerateKeysAndObjectsWithOptions:opts usingBlock:^(NSNumber *key, id obj, BOOL *stop) {
|
|
block(obj, key, stop);
|
|
}];
|
|
}
|
|
|
|
- (id)copyWithZone:(NSZone *)zone
|
|
{
|
|
return [[[self class] allocWithZone:zone] initWithSparseArray:self];
|
|
}
|
|
|
|
@end
|