This is Queue.h in view mode; [Download] [Up]
#ifndef _QUEUE_H #define _QUEUE_H //H+ // A first-in, first-out queue, or last-in, first-out stack. // // Holds a series of (void *)pointers for generality, but may require // casting to get the push: method to compile clean. // // $Id: Queue.h,v 1.3 94/05/23 20:33:04 ediger Exp Locker: ediger $ /* $Log: Queue.h,v $ * Revision 1.3 94/05/23 20:33:04 ediger * better comments * * Revision 1.2 94/05/15 18:55:28 ediger * remove a method namespace clash by changing -empty to -isEmpty. * * Revision 1.1 94/05/14 17:44:50 ediger * Initial revision * */ //H- #import <objc/Object.h> // Here's the data structure for the implementation: a doubly-linked list. // Elaborate struct tag to avoid name-space collisions. struct qs_internal_node { struct qs_internal_node *prev; struct qs_internal_node *next; void *ptr; }; // It's possible that the ptr member should be a union of all // inherent Obj-C datatypes. That would certainly ensure that // enough space is reserved for the stored data. Doing the class // with that data would require "typed" pushes and pops, wouldn't it? // At least to avoid casting the data on pushes or pops. @interface Queue: Object { struct qs_internal_node *head; struct qs_internal_node *tail; } - init; - push:(void *)something; // put something on end of container -(void *)first; // FIFO access to container -(void *)pop; // LIFO access to container -(void *)head; // peek at what's at the head of container -(void *)tail; // peek at what's at the tail of container -(BOOL)isEmpty; // check if container has something in it. - free; // deallocate implementation of container @end #endif /* _QUEUE_H */
These are the contents of the former NiCE NeXT User Group NeXTSTEP/OpenStep software archive, currently hosted by Netfuture.ch.