blob: b00b34c8fdf6f512766bf68b3fa8a845347ca863 [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 "CDVisitorPropertyState.h"
#import "CDOCProperty.h"
@interface CDVisitorPropertyState ()
@end
#pragma mark -
@implementation CDVisitorPropertyState
{
NSMutableDictionary *_propertiesByAccessor; // NSString (accessor) -> CDOCProperty
NSMutableDictionary *_propertiesByName; // NSString (property name) -> CDOCProperty
}
- (id)initWithProperties:(NSArray *)properties;
{
if ((self = [super init])) {
_propertiesByAccessor = [[NSMutableDictionary alloc] init];
_propertiesByName = [[NSMutableDictionary alloc] init];
for (CDOCProperty *property in properties) {
//NSLog(@"property: %@, getter: %@, setter: %@", [property name], [property getter], [property setter]);
_propertiesByName[property.name] = property;
_propertiesByAccessor[property.getter] = property;
if (property.isReadOnly == NO)
_propertiesByAccessor[property.setter] = property;
}
}
return self;
}
#pragma mark - Debugging
- (void)log;
{
NSLog(@"propertiesByAccessor: %@", _propertiesByAccessor);
NSLog(@"propertiesByName: %@", _propertiesByName);
}
#pragma mark -
- (CDOCProperty *)propertyForAccessor:(NSString *)str;
{
return _propertiesByAccessor[str];
}
- (BOOL)hasUsedProperty:(CDOCProperty *)property;
{
return _propertiesByName[property.name] == nil;
}
- (void)useProperty:(CDOCProperty *)property;
{
[_propertiesByName removeObjectForKey:property.name];
}
- (NSArray *)remainingProperties;
{
return [[_propertiesByName allValues] sortedArrayUsingSelector:@selector(ascendingCompareByName:)];
}
@end