| 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
|
|
|
|
|