mirror of
https://github.com/cappuccino/cappuccino.git
synced 2026-10-25 17:45:36 +00:00
Improved observable arrays to support indexOfObject:, indexOfObjectIdenticalTo:, and removeObjectIdenticalTo:.
Reviewed by me.
This commit is contained in:
1 parent
6b4db4e9ae
commit
75fdfb5a0b
2 files changed
+54
-5
No files matched your search
@@ -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)
|
||||
|
||||
@@ -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);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
Reference in new issue
Block a user