| // |
| // PtrStack.m |
| // ANTLR |
| // |
| // Created by Alan Condit on 6/9/10. |
| // Copyright 2010 Alan's MachineWorks. All rights reserved. |
| // |
| #define SUCCESS (0) |
| #define FAILURE (-1) |
| |
| #import "PtrStack.h" |
| #import "Tree.h" |
| |
| /* |
| * Start of PtrStack |
| */ |
| @implementation PtrStack |
| |
| +(PtrStack *)newPtrStack |
| { |
| return [[PtrStack alloc] init]; |
| } |
| |
| +(PtrStack *)newPtrStack:(NSInteger)cnt |
| { |
| return [[PtrStack alloc] initWithLen:cnt]; |
| } |
| |
| -(id)init |
| { |
| self = [super initWithLen:HASHSIZE]; |
| if ( self != nil ) { |
| } |
| return( self ); |
| } |
| |
| -(id)initWithLen:(NSInteger)cnt |
| { |
| self = [super initWithLen:cnt]; |
| if ( self != nil ) { |
| } |
| return( self ); |
| } |
| |
| -(void)dealloc |
| { |
| #ifdef DEBUG_DEALLOC |
| NSLog( @"called dealloc in PtrStack" ); |
| #endif |
| [super dealloc]; |
| } |
| |
| -(void)deletePtrStack:(PtrStack *)np |
| { |
| LinkBase *tmp, *rtmp; |
| NSInteger idx; |
| |
| if ( self.fNext != nil ) { |
| for( idx = 0; idx < BuffSize; idx++ ) { |
| tmp = ptrBuffer[idx]; |
| while ( tmp ) { |
| rtmp = tmp; |
| tmp = [tmp getfNext]; |
| [rtmp release]; |
| } |
| } |
| } |
| } |
| |
| #ifdef DONTUSENOMO |
| #ifdef USERDOC |
| /* |
| * HASH hash entry to get index to table |
| * NSInteger hash( PtrStack *self, char *s ); |
| * |
| * Inputs: NSString *s string to find |
| * |
| * Returns: NSInteger hashed value |
| * |
| * Last Revision 9/03/90 |
| */ |
| #endif |
| -(NSInteger)hash:(NSString *)s /* form hash value for string s */ |
| { |
| NSInteger hashval; |
| const char *tmp; |
| |
| tmp = [s cStringUsingEncoding:NSASCIIStringEncoding]; |
| for( hashval = 0; *tmp != '\0'; ) |
| hashval += *tmp++; |
| LastHash = hashval % HashSize; |
| return( LastHash ); |
| } |
| |
| #ifdef USERDOC |
| /* |
| * LOOKUP search hashed list for entry |
| * id lookup:(NSString *)s; |
| * |
| * Inputs: NSString *s string to find |
| * |
| * Returns: RuleMemo * pointer to entry |
| * |
| * Last Revision 9/03/90 |
| */ |
| #endif |
| -(id)lookup:(NSString *)s |
| { |
| LinkBase *np; |
| |
| for( np = ptrBuffer[[self hash:s]]; np != nil; np = [np getfNext] ) { |
| if ( [s isEqualToString:[np getName]] ) { |
| return( np ); /* found it */ |
| } |
| } |
| return( nil ); /* not found */ |
| } |
| |
| #ifdef USERDOC |
| /* |
| * INSTALL search hashed list for entry |
| * NSInteger install( PtrStack *self, id sym ); |
| * |
| * Inputs: RuleMemo *sym -- symbol ptr to install |
| * NSInteger scope -- level to find |
| * |
| * Returns: Boolean TRUE if installed |
| * FALSE if already in table |
| * |
| * Last Revision 9/03/90 |
| */ |
| #endif |
| -(id)install:(id)sym |
| { |
| LinkBase *np; |
| |
| np = [self lookup:[sym getName]]; |
| if ( np == nil ) { |
| [sym setFNext:ptrBuffer[ LastHash ]]; |
| ptrBuffer[ LastHash ] = [sym retain]; |
| return( ptrBuffer[ LastHash ] ); |
| } |
| return( nil ); /* not found */ |
| } |
| #endif |
| |
| -(id)getptrBufferEntry:(NSInteger)idx |
| { |
| return( ptrBuffer[idx] ); |
| } |
| |
| -(id *)getptrBuffer |
| { |
| return( ptrBuffer ); |
| } |
| |
| -(void)setptrBuffer:(id *)np |
| { |
| ptrBuffer = np; |
| } |
| |
| #ifdef DONTUSENOMO |
| /* |
| * works only for maplist indexed not by name but by TokenNumber |
| */ |
| - (id)getName:(NSInteger)ttype |
| { |
| id np; |
| NSInteger aTType; |
| |
| aTType = ttype % HashSize; |
| for( np = ptrBuffer[ttype]; np != nil; np = [np getfNext] ) { |
| if ( np.index == ttype ) { |
| return( np ); /* found it */ |
| } |
| } |
| return( nil ); /* not found */ |
| } |
| |
| - (id)getTType:(NSString *)name |
| { |
| return [self lookup:name]; |
| } |
| #endif |
| |
| - (id) copyWithZone:(NSZone *)aZone |
| { |
| return [super copyWithZone:aZone]; |
| } |
| |
| @end |