Index: class-dump/src/CDTopoSortNode.m |
=================================================================== |
--- class-dump/src/CDTopoSortNode.m (revision 0) |
+++ class-dump/src/CDTopoSortNode.m (revision 0) |
@@ -0,0 +1,105 @@ |
+// -*- 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 "CDTopoSortNode.h" |
+ |
+#import "NSObject-CDExtensions.h" |
+ |
+@implementation CDTopoSortNode |
+ |
+- (id)initWithObject:(id <CDTopologicalSort>)anObject; |
+{ |
+ if ([super init] == nil) |
+ return nil; |
+ |
+ sortableObject = [anObject retain]; |
+ dependancies = [[NSMutableSet alloc] init]; |
+ color = CDWhiteNodeColor; |
+ |
+ [self addDependanciesFromArray:[sortableObject dependancies]]; |
+ |
+ return self; |
+} |
+ |
+- (void)dealloc; |
+{ |
+ [sortableObject release]; |
+ [dependancies release]; |
+ |
+ [super dealloc]; |
+} |
+ |
+- (NSString *)identifier; |
+{ |
+ return [sortableObject identifier]; |
+} |
+ |
+- (id <CDTopologicalSort>)sortableObject; |
+{ |
+ return sortableObject; |
+} |
+ |
+- (NSArray *)dependancies; |
+{ |
+ return [dependancies allObjects]; |
+} |
+ |
+- (void)addDependancy:(NSString *)anIdentifier; |
+{ |
+ [dependancies addObject:anIdentifier]; |
+} |
+ |
+- (void)removeDependancy:(NSString *)anIdentifier; |
+{ |
+ [dependancies removeObject:anIdentifier]; |
+} |
+ |
+- (void)addDependanciesFromArray:(NSArray *)identifiers; |
+{ |
+ [self performSelector:@selector(addDependancy:) withObjectsFromArray:identifiers]; |
+ //[identifiers makeObject:self performSelector:@selector(addDependancy:)]; |
+} |
+ |
+- (CDNodeColor)color; |
+{ |
+ return color; |
+} |
+ |
+- (void)setColor:(CDNodeColor)newColor; |
+{ |
+ color = newColor; |
+} |
+ |
+- (NSString *)description; |
+{ |
+ return [NSString stringWithFormat:@"%@ (%d) depends on %@", [self identifier], color, [[dependancies allObjects] componentsJoinedByString:@", "]]; |
+} |
+ |
+- (NSComparisonResult)ascendingCompareByIdentifier:(id)otherNode; |
+{ |
+ return [[self identifier] compare:[otherNode identifier]]; |
+} |
+ |
+- (void)topologicallySortNodes:(NSDictionary *)nodesByIdentifier intoArray:(NSMutableArray *)sortedArray; |
+{ |
+ NSArray *dependantIdentifiers; |
+ CDTopoSortNode *aNode; |
+ |
+ dependantIdentifiers = [self dependancies]; |
+ for (NSString *anIdentifier in dependantIdentifiers) { |
+ aNode = [nodesByIdentifier objectForKey:anIdentifier]; |
+ if ([aNode color] == CDWhiteNodeColor) { |
+ [aNode setColor:CDGrayNodeColor]; |
+ [aNode topologicallySortNodes:nodesByIdentifier intoArray:sortedArray]; |
+ } else if ([aNode color] == CDGrayNodeColor) { |
+ NSLog(@"Warning: Possible circular reference? %@ -> %@", [self identifier], [aNode identifier]); |
+ } |
+ } |
+ |
+ [sortedArray addObject:[self sortableObject]]; |
+ [self setColor:CDBlackNodeColor]; |
+} |
+ |
+@end |
Property changes on: class-dump/src/CDTopoSortNode.m |
___________________________________________________________________ |
Added: svn:eol-style |
+ LF |