// // NSIndexPath+MPRemoveFirstIndex.m // MathPad // // Created by Kim Wittenburg on 23.04.14. // Copyright (c) 2014 Kim Wittenburg. All rights reserved. // #import "NSIndexPath+MPAdditions.h" @implementation NSIndexPath (MPAdditions) - (NSUInteger)firstIndex { return [self indexAtPosition:0]; } - (NSUInteger)lastIndex { return [self indexAtPosition:self.length-1]; } - (NSIndexPath *)indexPathByReplacingLastIndexWithIndex:(NSUInteger)index { return [[self indexPathByRemovingLastIndex] indexPathByAddingIndex:index]; } - (NSIndexPath *)indexPathByRemovingFirstIndex { if (self.length <= 1) { return [[NSIndexPath alloc] init]; } NSUInteger indexes[self.length]; [self getIndexes:indexes]; NSUInteger newIndexes[self.length-1]; for (NSUInteger i = 0; i < self.length-1; i++) { newIndexes[i] = indexes[i+1]; } return [[NSIndexPath alloc] initWithIndexes:newIndexes length:self.length-1]; } - (NSIndexPath *)indexPathByPreceedingIndex:(NSUInteger)index { NSUInteger newIndexes[self.length+1]; newIndexes[0] = index; for (NSUInteger i = 0; i < self.length; i++) { newIndexes[i+1] = [self indexAtPosition:i]; } return [[NSIndexPath alloc] initWithIndexes:newIndexes length:self.length+1]; } - (NSIndexPath *)indexPathByIncrementingLastIndex { if (self.length < 1) { return [[NSIndexPath alloc] init]; } NSUInteger lastIndex = [self lastIndex]; lastIndex++; return [[self indexPathByRemovingLastIndex] indexPathByAddingIndex:lastIndex]; } - (NSIndexPath *)indexPathByDecrementingLastIndex { if (self.length < 1) { return [[NSIndexPath alloc] init]; } NSUInteger lastIndex = [self lastIndex]; lastIndex--; return [[self indexPathByRemovingLastIndex] indexPathByAddingIndex:lastIndex]; } - (NSIndexPath *)indexPathByRemovingIndexesFrom:(NSUInteger)from { NSIndexPath *indexPath = [[NSIndexPath alloc] init]; for (NSUInteger position = 0; position < MIN(from, self.length); position++) { indexPath = [indexPath indexPathByAddingIndex:[self indexAtPosition:position]]; } return indexPath; } - (NSIndexPath *)indexPathByRemovingIndexesTo:(NSUInteger)to { NSIndexPath *indexPath = [[NSIndexPath alloc] init]; for (NSUInteger position = to; position < self.length; position++) { indexPath = [indexPath indexPathByAddingIndex:[self indexAtPosition:position]]; } return indexPath; } - (NSIndexPath *)commonIndexPathWith:(NSIndexPath *)indexPath { NSIndexPath *commonPath = [[NSIndexPath alloc] init]; NSUInteger length = MIN(self.length, indexPath.length); for (NSUInteger position = 0; position < length; position++) { NSUInteger selfIndex = [self indexAtPosition:position]; NSUInteger otherIndex = [indexPath indexAtPosition:position]; if (selfIndex == otherIndex) { commonPath = [commonPath indexPathByAddingIndex:selfIndex]; } else { break; } } return commonPath; } @end