You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

192 lines
3.6 KiB

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