mirror of
https://github.com/gnustep/libs-base.git
synced 2025-05-30 08:21:25 +00:00
Merge pull request #59 from gnustep/NSSortDescriptor_branch
NSSortDescriptor branch
This commit is contained in:
commit
deda3fada9
2 changed files with 86 additions and 5 deletions
|
@ -113,8 +113,16 @@ static BOOL initialized = NO;
|
|||
id comparedKey1 = [object1 valueForKeyPath: _key];
|
||||
id comparedKey2 = [object2 valueForKeyPath: _key];
|
||||
|
||||
result = (NSComparisonResult) [comparedKey1 performSelector: _selector
|
||||
withObject: comparedKey2];
|
||||
if (_comparator == NULL)
|
||||
{
|
||||
result = (NSComparisonResult) [comparedKey1 performSelector: _selector
|
||||
withObject: comparedKey2];
|
||||
}
|
||||
else
|
||||
{
|
||||
result = CALL_BLOCK(((NSComparator)_comparator), comparedKey1, comparedKey2);
|
||||
}
|
||||
|
||||
if (_ascending == NO)
|
||||
{
|
||||
if (result == NSOrderedAscending)
|
||||
|
@ -132,17 +140,29 @@ static BOOL initialized = NO;
|
|||
|
||||
- (id) copyWithZone: (NSZone*)zone
|
||||
{
|
||||
NSSortDescriptor *copy = nil;
|
||||
if (NSShouldRetainWithZone(self, zone))
|
||||
{
|
||||
return RETAIN(self);
|
||||
}
|
||||
return [[NSSortDescriptor allocWithZone: zone]
|
||||
initWithKey: _key ascending: _ascending selector: _selector];
|
||||
|
||||
if (_comparator == NULL)
|
||||
{
|
||||
copy = [[NSSortDescriptor allocWithZone: zone]
|
||||
initWithKey: _key ascending: _ascending selector: _selector];
|
||||
}
|
||||
else
|
||||
{
|
||||
copy = [[NSSortDescriptor allocWithZone: zone]
|
||||
initWithKey: _key ascending: _ascending comparator: _comparator];
|
||||
}
|
||||
return copy;
|
||||
}
|
||||
|
||||
- (void) dealloc
|
||||
{
|
||||
TEST_RELEASE(_key);
|
||||
TEST_RELEASE(_comparator);
|
||||
[super dealloc];
|
||||
}
|
||||
|
||||
|
@ -167,11 +187,52 @@ static BOOL initialized = NO;
|
|||
selector: aSelector]);
|
||||
}
|
||||
|
||||
+ (id)sortDescriptorWithKey: (NSString *)key
|
||||
ascending: (BOOL)ascending
|
||||
comparator: (NSComparator)cmptr
|
||||
{
|
||||
return AUTORELEASE([[self alloc] initWithKey: key
|
||||
ascending: ascending
|
||||
comparator: cmptr]);
|
||||
|
||||
}
|
||||
|
||||
- (id) initWithKey: (NSString *) key ascending: (BOOL) ascending
|
||||
{
|
||||
return [self initWithKey: key ascending: ascending selector: NULL];
|
||||
}
|
||||
|
||||
- (id) initWithKey: (NSString *) key
|
||||
ascending: (BOOL) ascending
|
||||
comparator: (NSComparator) cmptr
|
||||
{
|
||||
if ([self init])
|
||||
{
|
||||
if (key == nil)
|
||||
{
|
||||
[NSException raise: NSInvalidArgumentException
|
||||
format: @"%@", _(@"Passed nil key when initializing "
|
||||
@"an NSSortDescriptor.")];
|
||||
}
|
||||
if (cmptr == NULL)
|
||||
{
|
||||
[NSException raise: NSInvalidArgumentException
|
||||
format: @"%@", _(@"Passed NULL comparator when initializing "
|
||||
@"an NSSortDescriptor.")];
|
||||
}
|
||||
|
||||
ASSIGN(_key, key);
|
||||
_ascending = ascending;
|
||||
ASSIGN(_comparator, cmptr);
|
||||
|
||||
return self;
|
||||
}
|
||||
else
|
||||
{
|
||||
return nil;
|
||||
}
|
||||
}
|
||||
|
||||
- (id) initWithKey: (NSString *) key
|
||||
ascending: (BOOL) ascending
|
||||
selector: (SEL) selector
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue