Merge pull request #68 from gnustep/fix-dict-sort-kbv

Fixing NSDictionary keysSortedByValueUsingComparator:
This commit is contained in:
rfm 2019-09-26 15:39:01 +01:00 committed by GitHub
commit 51092fac8d
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
2 changed files with 85 additions and 11 deletions

View file

@ -29,6 +29,7 @@
#import "common.h"
#import "Foundation/NSDictionary.h"
#import "Foundation/NSArray.h"
#import "Foundation/NSOrderedSet.h"
#import "Foundation/NSData.h"
#import "Foundation/NSException.h"
#import "Foundation/NSAutoreleasePool.h"
@ -176,7 +177,8 @@ static SEL appSel;
GS_DISPATCH_CREATE_QUEUE_AND_GROUP_FOR_ENUMERATION(enumQueue, opts)
FOR_IN(id, key, enumerator)
obj = (*objectForKey)(self, objectForKeySelector, key);
GS_DISPATCH_SUBMIT_BLOCK(enumQueueGroup, enumQueue, if (shouldStop){return;};, return;, aBlock, key, obj, &shouldStop);
GS_DISPATCH_SUBMIT_BLOCK(enumQueueGroup, enumQueue,
if (shouldStop){return;};, return;, aBlock, key, obj, &shouldStop);
if (YES == shouldStop)
{
break;
@ -860,10 +862,10 @@ static SEL appSel;
}
}
- (void)getObjects: (__unsafe_unretained id[])objects
andKeys: (__unsafe_unretained id<NSCopying>[])keys
- (void) getObjects: (__unsafe_unretained id[])objects
andKeys: (__unsafe_unretained id<NSCopying>[])keys
{
NSUInteger i=0;
NSUInteger i = 0;
FOR_IN(id, key, self)
if (keys != NULL) keys[i] = key;
if (objects != NULL) objects[i] = [self objectForKey: key];
@ -949,17 +951,29 @@ compareIt(id o1, id o2, void* context)
return k;
}
- (NSArray *)keysSortedByValueUsingComparator: (NSComparator)cmptr
- (NSArray *) keysSortedByValueUsingComparator: (NSComparator)cmptr
{
return [self keysSortedByValueWithOptions:0
usingComparator:cmptr];
return [self keysSortedByValueWithOptions: 0
usingComparator: cmptr];
}
- (NSArray *)keysSortedByValueWithOptions: (NSSortOptions)opts
usingComparator: (NSComparator)cmptr
- (NSArray *) keysSortedByValueWithOptions: (NSSortOptions)opts
usingComparator: (NSComparator)cmptr
{
return [[self allKeys] sortedArrayWithOptions: opts
usingComparator: cmptr];
CREATE_AUTORELEASE_POOL(arp);
NSArray *sortedValues;
NSArray *noDuplicates;
NSMutableArray *result;
sortedValues = [[self allValues] sortedArrayWithOptions: opts
usingComparator: cmptr];
noDuplicates = [[NSOrderedSet orderedSetWithArray: sortedValues] array];
result = [[NSMutableArray alloc] initWithCapacity: [sortedValues count]];
FOR_IN(NSObject*, value, noDuplicates)
[result addObjectsFromArray: [self allKeysForObject: value]];
END_FOR_IN(noDuplicates)
RELEASE(arp);
return AUTORELEASE(result);
}
/**