This is COWSStack.m in view mode; [Download] [Up]
/* Copyright (C) 1994 Sean Luke COWSStack.m Version 1.0 Sean Luke */ #import "COWSStack.h" #import "COWSNode.h" #import "COWSStateNode.h" #import "COWSSymbolNode.h" #import <stdio.h> @implementation COWSStack - init { id returnval= [super init]; current=NULL; return returnval; } - push:this { [this setNext:current]; [this setPrev:NULL]; if (current!=NULL) [current setPrev:this]; current=this; return current; } - pop { id temp=current; if (temp!=NULL) { if ([temp next]!=NULL) [[temp next] setPrev:NULL]; current=[current next]; [temp setNext:NULL]; } return temp; } - top { return current; } - _symbolHelper:pos // private helper function for topSymbol { if (pos==NULL) return NULL; if (![pos isKindOf:[COWSNode class]]) { printf ("ERROR! Something wrong with Stack!\n"); return NULL; } if ([pos isMemberOf:[COWSStateNode class]]) return NULL; if ([pos isMemberOf:[COWSSymbolNode class]]) return pos; return [self _symbolHelper:[pos next]]; } - topSymbol { return [self _symbolHelper:current]; } - _stateHelper:pos // private helper function for topState { if (pos==NULL) return NULL; if (![pos isKindOf:[COWSNode class]]) { printf ("ERROR! Something wrong with Stack!\n"); return NULL; } if ([pos isMemberOf:[COWSStateNode class]]) return pos; return [self _stateHelper:[pos next]]; } - topState { return [self _stateHelper:current]; } - clear { while (current!=NULL) { [[self pop] free]; } return self; } - (int) number { int x=0; id temp=current; while (temp!=NULL) { x++; temp=[temp next]; } return x; } - free { [self clear]; return [super free]; } - printContents { id temp=current; while (temp!=NULL) { [temp printContents]; temp=[temp next]; } return self; } @end
These are the contents of the former NiCE NeXT User Group NeXTSTEP/OpenStep software archive, currently hosted by Netfuture.ch.