blob: 5b180f25c967b741ab37c8577eab8084fa9d0dd8 [file] [log] [blame]
//
// ANTLRPtrStack.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 "ANTLRPtrStack.h"
#import "ANTLRTree.h"
/*
* Start of ANTLRPtrStack
*/
@implementation ANTLRPtrStack
+(ANTLRPtrStack *)newANTLRPtrStack
{
return [[ANTLRPtrStack alloc] init];
}
+(ANTLRPtrStack *)newANTLRPtrStack:(NSInteger)cnt
{
return [[ANTLRPtrStack 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 ANTLRPtrStack" );
#endif
[super dealloc];
}
-(void)deleteANTLRPtrStack:(ANTLRPtrStack *)np
{
ANTLRLinkBase *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( ANTLRPtrStack *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: ANTLRRuleMemo * pointer to entry
*
* Last Revision 9/03/90
*/
#endif
-(id)lookup:(NSString *)s
{
ANTLRLinkBase *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( ANTLRPtrStack *self, id sym );
*
* Inputs: ANTLRRuleMemo *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
{
ANTLRLinkBase *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