From e852cb612c0b1d5b26818fae0b3f2e7f83b7ff85 Mon Sep 17 00:00:00 2001 From: Levi McCallum Date: Sun, 31 Jan 2016 21:17:24 -0800 Subject: [PATCH] Simplify usage of diffing API --- AsyncDisplayKit/ASDisplayNode.mm | 1 + AsyncDisplayKit/Private/NSArray+Diffing.h | 2 +- AsyncDisplayKit/Private/NSArray+Diffing.m | 10 +++++++--- AsyncDisplayKitTests/ArrayDiffingTests.m | 3 +-- 4 files changed, 10 insertions(+), 6 deletions(-) diff --git a/AsyncDisplayKit/ASDisplayNode.mm b/AsyncDisplayKit/ASDisplayNode.mm index 032e2fecd4..bfd4cd3584 100644 --- a/AsyncDisplayKit/ASDisplayNode.mm +++ b/AsyncDisplayKit/ASDisplayNode.mm @@ -21,6 +21,7 @@ #import "_ASCoreAnimationExtras.h" #import "ASDisplayNodeExtras.h" #import "ASEqualityHelpers.h" +#import "NSArray+Diffing.h" #import "ASInternalHelpers.h" #import "ASLayout.h" diff --git a/AsyncDisplayKit/Private/NSArray+Diffing.h b/AsyncDisplayKit/Private/NSArray+Diffing.h index 618e1901ea..374096f92f 100644 --- a/AsyncDisplayKit/Private/NSArray+Diffing.h +++ b/AsyncDisplayKit/Private/NSArray+Diffing.h @@ -13,6 +13,6 @@ /** * Uses a bottom-up memoized longest common subsequence solution to identify differences. Runs in O(mn) complexity. */ -- (void)asdk_diffWithArray:(NSArray *)array insertions:(NSMutableIndexSet **)insertions deletions:(NSMutableIndexSet **)deletions; +- (void)asdk_diffWithArray:(NSArray *)array insertions:(NSIndexSet **)insertions deletions:(NSIndexSet **)deletions; @end diff --git a/AsyncDisplayKit/Private/NSArray+Diffing.m b/AsyncDisplayKit/Private/NSArray+Diffing.m index f320bcfb58..0cd9ad040b 100644 --- a/AsyncDisplayKit/Private/NSArray+Diffing.m +++ b/AsyncDisplayKit/Private/NSArray+Diffing.m @@ -10,28 +10,32 @@ @implementation NSArray (Diffing) -- (void)asdk_diffWithArray:(NSArray *)array insertions:(NSMutableIndexSet **)insertions deletions:(NSMutableIndexSet **)deletions +- (void)asdk_diffWithArray:(NSArray *)array insertions:(NSIndexSet **)insertions deletions:(NSIndexSet **)deletions { NSIndexSet *commonIndexes = [self _asdk_commonIndexesWithArray:array]; if (insertions) { NSArray *commonObjects = [self objectsAtIndexes:commonIndexes]; + NSMutableIndexSet *insertionIndexes = [NSMutableIndexSet indexSet]; for (NSInteger i = 0, j = 0; i < commonObjects.count || j < array.count;) { if (i < commonObjects.count && j < array.count && [commonObjects[i] isEqual:array[j]]) { i++; j++; } else { - [*insertions addIndex:j]; + [insertionIndexes addIndex:j]; j++; } } + *insertions = insertionIndexes; } if (deletions) { + NSMutableIndexSet *deletionIndexes = [NSMutableIndexSet indexSet]; for (NSInteger i = 0; i < self.count; i++) { if (![commonIndexes containsIndex:i]) { - [*deletions addIndex:i]; + [deletionIndexes addIndex:i]; } } + *deletions = deletionIndexes; } } diff --git a/AsyncDisplayKitTests/ArrayDiffingTests.m b/AsyncDisplayKitTests/ArrayDiffingTests.m index c83e841051..d2224e0baa 100644 --- a/AsyncDisplayKitTests/ArrayDiffingTests.m +++ b/AsyncDisplayKitTests/ArrayDiffingTests.m @@ -57,8 +57,7 @@ ]; for (NSArray *test in tests) { - NSMutableIndexSet *insertions = [NSMutableIndexSet indexSet]; - NSMutableIndexSet *deletions = [NSMutableIndexSet indexSet]; + NSIndexSet *insertions, *deletions; [test[0] asdk_diffWithArray:test[1] insertions:&insertions deletions:&deletions]; for (NSNumber *index in (NSArray *)test[2]) { XCTAssert([insertions containsIndex:[index integerValue]]);