X-Git-Url: https://git.dogcows.com/gitweb?p=chaz%2Fthecheat;a=blobdiff_plain;f=SearchData.m;fp=SearchData.m;h=6170bac8c92364ac895a260d4844c94e406ff7d1;hp=0000000000000000000000000000000000000000;hb=d27548f80fe411fda2ee69c74a24eab4292267e9;hpb=e8d51183acdd2410a38dcf8f0efbf7c30cd6c581 diff --git a/SearchData.m b/SearchData.m new file mode 100644 index 0000000..6170bac --- /dev/null +++ b/SearchData.m @@ -0,0 +1,243 @@ +// +// SearchData.m +// The Cheat +// +// Created by Chaz McGarvey on 12/13/04. +// Copyright 2004 Chaz McGarvey. All rights reserved. +// + +#import "SearchData.h" + + +@implementation SearchData + + +- (id)init +{ + if ( self = [super init] ) { + [self setVariableType:TCInt32]; + [self setIntegerSign:TCSigned]; + [self setSearchOperator:TCEqual]; + [self setValueUsed:TCGivenValue]; + + _undoes = -1; + _redoes = 0; + } + return self; +} + +- (void)dealloc +{ + [_variableValue release]; + TCReleaseArray( _addresses ); + TCReleaseArray( _values ); + [super dealloc]; +} + + +- (TCVariableType)variableType +{ + return _variableType; +} + +- (void)setVariableType:(TCVariableType)varType +{ + // can't change the variable type when there has been a search + if ( ![self hasSearchedOnce] ) { + _variableType = varType; + } +} + + +- (TCIntegerSign)integerSign +{ + return _integerSign; +} + +- (void)setIntegerSign:(TCIntegerSign)sign +{ + // can't change the integer sign when there has been a search + if ( ![self hasSearchedOnce] ) { + _integerSign = sign; + } +} + + +- (TCSearchOperator)searchOperator +{ + return _operator; +} + +- (void)setSearchOperator:(TCSearchOperator)op +{ + _operator = op; +} + + +- (TCSearchType)valueUsed +{ + if ( ![self hasSearchedOnce] ) { + // if there is no search, then use search value no matter what + _value = TCGivenValue; + } + return _value; +} + +- (void)setValueUsed:(TCSearchType)value +{ + _value = value; +} + + +- (Variable *)searchValue +{ + if ( !_variableValue ) { + // create a zero value if there is none + _variableValue = [[Variable alloc] init]; + } + return _variableValue; +} + +- (void)setSearchValue:(Variable *)value +{ + [value retain]; + [_variableValue release]; + _variableValue = value; +} + + +- (unsigned)numberOfResults +{ + if ( _addresses ) { + return TCArrayElementCount( _addresses ); + } + return 0; +} + +- (TCArray)addresses +{ + return _addresses; +} + +- (void)setAddresses:(TCArray)addresses +{ + TCReleaseArray( _addresses ); + _addresses = addresses; + + if ( !_addresses ) { + // clear the undoes and redoes if the search is cleared + _undoes = -1; + _redoes = 0; + } + + // clear the stored values + [self setValues:NULL]; +} + +- (TCArray)values +{ + return _values; +} + +- (void)setValues:(TCArray)values +{ + TCReleaseArray( _values ); + _values = values; +} + +- (void)setValue:(Variable *)value atIndex:(unsigned)index +{ + if ( _values ) { + if ( index < TCArrayElementCount( _values ) ) { + TCArraySetElementAtIndex( _values, index, [value value] ); + } + } +} + +- (BOOL)valuesLoaded +{ + return ( _values != NULL ); +} + +- (Variable *)variableAtIndex:(unsigned)index +{ + if ( [self hasSearchedOnce] ) { + Variable *var = [[Variable alloc] initWithType:[self variableType] integerSign:[self integerSign]]; + [var setAddress:*(TCAddress *)TCArrayElementAtIndex( [self addresses], index )]; + if ( [self valuesLoaded] ) { + [var setValue:TCArrayElementAtIndex( [self values], index ) size:TCArrayElementSize([self values])]; + } + return [var autorelease]; + } + return nil; +} + +- (NSString *)stringForRow:(unsigned)rowIndex +{ + Variable *var = [self variableAtIndex:rowIndex]; + + if ( var ) { + if ( [self valuesLoaded] ) { + if ( [var type] == TCString ) { + return [NSString stringWithFormat:@"%@ = \"%@\"", [var addressString], [var stringValue]]; + } + else { + return [NSString stringWithFormat:@"%@ = %@", [var addressString], [var stringValue]]; + } + } + else { + return [var addressString]; + } + } + return @""; +} + + +- (BOOL)hasSearchedOnce +{ + return ( _addresses != NULL ); +} + + +- (int)undoesLeft +{ + return _undoes; +} + +- (int)redoesLeft +{ + return _redoes; +} + +- (void)didAddResults +{ + _undoes++; + _redoes = 0; +} + +- (void)didUndo +{ + _undoes--; + _redoes++; +} + +- (void)didRedo +{ + _undoes++; + _redoes--; +} + + +- (BOOL)isTypeInteger +{ + return _variableType <= TCInt8; +} + + +- (void)clearResults +{ + [self setAddresses:NULL]; +} + + +@end