diff --git a/Foundation/CPArray+KVO.j b/Foundation/CPArray+KVO.j index f9685ce47..e1c3fa0aa 100644 --- a/Foundation/CPArray+KVO.j +++ b/Foundation/CPArray+KVO.j @@ -181,6 +181,45 @@ return [[self _representedObject] count]; } +- (int)indexOfObject:(CPObject)anObject inRange:(CPRange)aRange +{ + var index = aRange.location, + count = aRange.length, + shouldIsEqual = !!anObject.isa; + + for (; index < count; ++index) + { + var object = [self objectAtIndex:index]; + + if (anObject === object || shouldIsEqual && !!object.isa && [anObject isEqual:object]) + return index; + } + + return CPNotFound; +} + +- (int)indexOfObject:(CPObject)anObject +{ + return [self indexOfObject:anObject range:CPMakeRange(0, [self count])]; +} + +- (int)indexOfObjectIdenticalTo:(CPObject)anObject inRange:(CPRange)aRange +{ + var index = aRange.location, + count = aRange.length; + + for (; index < count; ++index) + if (anObject === [self objectAtIndex:index]) + return index; + + return CPNotFound; +} + +- (int)indexOfObjectIdenticalTo:(CPObject)anObject +{ + return [self indexOfObjectIdenticalTo:anObject inRange:CPMakeRange(0, [self count])]; +} + - (id)objectAtIndex:(unsigned)anIndex { if(_objectAtIndex) @@ -200,6 +239,15 @@ [self _setRepresentedObject:target]; } +- (void)addObjectsFromArray:(CPArray)anArray +{ + var index = 0, + count = [anArray count]; + + for (; index < count; ++index) + [self addObject:[anArray objectAtIndex:index]]; +} + - (void)insertObject:(id)anObject atIndex:(unsigned)anIndex { if (_insert) diff --git a/Foundation/CPArray.j b/Foundation/CPArray.j index f997d2e26..2bebe41f1 100755 --- a/Foundation/CPArray.j +++ b/Foundation/CPArray.j @@ -365,7 +365,7 @@ count = length; for(; index < count; ++index) - if(self[index] == anObject) + if(self[index] === anObject) return index; } @@ -1115,7 +1115,7 @@ */ - (void)removeObjectIdenticalTo:(id)anObject { - [self removeObjectIdenticalTo:anObject inRange:CPMakeRange(0, length)]; + [self removeObjectIdenticalTo:anObject inRange:CPMakeRange(0, [self count])]; } /*! @@ -1127,12 +1127,13 @@ */ - (void)removeObjectIdenticalTo:(id)anObject inRange:(CPRange)aRange { - var index; + var index, + count = [self count]; - while ((index = [self indexOfObjectIdenticalTo:anObject inRange:aRange]) != CPNotFound) + while ((index = [self indexOfObjectIdenticalTo:anObject inRange:aRange]) !== CPNotFound) { [self removeObjectAtIndex:index]; - aRange = CPIntersectionRange(CPMakeRange(index, length - index), aRange); + aRange = CPIntersectionRange(CPMakeRange(index, (--count) - index), aRange); } }