Index: class-dump/src/NSArray-Extensions.m |
=================================================================== |
--- class-dump/src/NSArray-Extensions.m (revision 0) |
+++ class-dump/src/NSArray-Extensions.m (revision 0) |
@@ -0,0 +1,87 @@ |
+// -*- mode: ObjC -*- |
+ |
+// This file is part of class-dump, a utility for examining the Objective-C segment of Mach-O files. |
+// Copyright (C) 1997-1998, 2000-2001, 2004-2010 Steve Nygard. |
+ |
+#import "NSArray-Extensions.h" |
+ |
+#import "CDTopoSortNode.h" |
+ |
+@implementation NSArray (CDExtensions) |
+ |
+- (NSArray *)reversedArray; |
+{ |
+ return [[self reverseObjectEnumerator] allObjects]; |
+} |
+ |
+- (NSArray *)arrayByMappingSelector:(SEL)aSelector; |
+{ |
+ NSMutableArray *newArray; |
+ |
+ newArray = [NSMutableArray array]; |
+ for (id object in self) { |
+ id value = [object performSelector:aSelector]; |
+ if (value != nil) |
+ [newArray addObject:value]; |
+ // TODO (2004-01-28): Or we could add NSNull. |
+ } |
+ |
+ return newArray; |
+} |
+ |
+@end |
+ |
+@implementation NSArray (CDTopoSort) |
+ |
+- (NSArray *)topologicallySortedArray; |
+{ |
+ NSMutableDictionary *nodesByName; |
+ NSMutableArray *sortedArray; |
+ NSArray *allNodes; |
+ |
+ nodesByName = [[NSMutableDictionary alloc] init]; |
+ |
+ for (id <CDTopologicalSort> anObject in self) { |
+ NSString *identifier; |
+ CDTopoSortNode *aNode; |
+ |
+ aNode = [[CDTopoSortNode alloc] initWithObject:anObject]; |
+ [aNode addDependanciesFromArray:[anObject dependancies]]; |
+ |
+ identifier = [aNode identifier]; |
+ if ([nodesByName objectForKey:identifier] != nil) |
+ NSLog(@"Warning: Duplicate identifier (%@) in %s", identifier, _cmd); |
+ [nodesByName setObject:aNode forKey:identifier]; |
+ [aNode release]; |
+ } |
+ |
+ sortedArray = [NSMutableArray array]; |
+ |
+ allNodes = [[nodesByName allValues] sortedArrayUsingSelector:@selector(ascendingCompareByIdentifier:)]; |
+ for (CDTopoSortNode *aNode in allNodes) { |
+ if ([aNode color] == CDWhiteNodeColor) |
+ [aNode topologicallySortNodes:nodesByName intoArray:sortedArray]; |
+ } |
+ |
+ [nodesByName release]; |
+ |
+ return sortedArray; |
+} |
+ |
+@end |
+ |
+ |
+@implementation NSMutableArray (CDTopoSort) |
+ |
+- (void)sortTopologically; |
+{ |
+ NSArray *sortedArray; |
+ |
+ sortedArray = [self topologicallySortedArray]; |
+ assert([self count] == [sortedArray count]); |
+ |
+ [self removeAllObjects]; |
+ [self addObjectsFromArray:sortedArray]; |
+} |
+ |
+@end |
Property changes on: class-dump/src/NSArray-Extensions.m |
___________________________________________________________________ |
Added: svn:eol-style |
+ LF |