home *** CD-ROM | disk | FTP | other *** search
- #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 */
-