blob: 9c93376ccb9edcdea1673f586885207d19a40918 [file] [log] [blame]
// -*- mode: ObjC -*-
// This file is part of class-dump, a utility for examining the Objective-C segment of Mach-O files.
// Copyright (C) 1997-2019 Steve Nygard.
#import "NSArray-CDExtensions.h"
@implementation NSArray (CDExtensions)
- (NSArray *)reversedArray;
{
return [[self reverseObjectEnumerator] allObjects];
}
@end
#pragma mark -
@implementation NSArray (CDTopoSort)
- (NSArray *)topologicallySortedArray;
{
NSMutableDictionary *nodesByName = [[NSMutableDictionary alloc] init];
for (id <CDTopologicalSort> object in self) {
CDTopoSortNode *node = [[CDTopoSortNode alloc] initWithObject:object];
[node addDependanciesFromArray:[object dependancies]];
if (nodesByName[node.identifier] != nil)
NSLog(@"Warning: Duplicate identifier (%@) in %s", node.identifier, __cmd);
nodesByName[node.identifier] = node;
}
NSMutableArray *sortedArray = [NSMutableArray array];
NSArray *allNodes = [[nodesByName allValues] sortedArrayUsingSelector:@selector(ascendingCompareByIdentifier:)];
for (CDTopoSortNode *node in allNodes) {
if (node.color == CDNodeColor_White)
[node topologicallySortNodes:nodesByName intoArray:sortedArray];
}
return sortedArray;
}
@end
#pragma mark -
@implementation NSMutableArray (CDTopoSort)
- (void)sortTopologically;
{
NSArray *sortedArray = [self topologicallySortedArray];
assert([self count] == [sortedArray count]);
[self removeAllObjects];
[self addObjectsFromArray:sortedArray];
}
@end