Main Page   Class Hierarchy   Compound List   File List   Compound Members   File Members  

mem_circ_queue.h

Go to the documentation of this file.
00001 
00002 /*
00003  *   THIS FILE IS UNDER RCS - DO NOT MODIFY UNLESS YOU HAVE
00004  *   CHECKED IT OUT USING THE COMMAND CHECKOUT.
00005  *
00006  *    $Id: mem__circ__queue_8h-source.html 2161 2006-05-19 16:55:03Z paulf $
00007  *
00008  *    Revision history:
00009  *     $Log$
00009  *     Revision 1.1  2006/05/19 16:55:02  paulf
00009  *     first inclusion
00009  *
00010  *     Revision 1.5  2001/04/12 03:59:07  lombard
00011  *     changed "peak" to "peek"
00012  *
00013  *     Revision 1.4  2001/04/12 03:09:16  lombard
00014  *     Added functions for saving queue to disk and recovering.
00015  *
00016  *     Revision 1.3  2001/01/14 22:16:07  lombard
00017  *     spelling!
00018  *
00019  *     Revision 1.2  2001/01/14 22:14:44  lombard
00020  *     added include file <transport.h>, required for use with mem_circ_queue.
00021  *
00022  *     Revision 1.1  2000/02/14 20:05:54  lucky
00023  *     Initial revision
00024  *
00025  *
00026  */
00027 
00028 
00029 /* circular memory queue which allocates all its memory at startup */
00030 
00031 #ifndef MEM_CIRC_QUEUE_H
00032 #define MEM_CIRC_QUEUE_H
00033 
00034 #include <transport.h>
00035 
00036 /* The scheme involves three glops of memory: 
00037         a small structure QUEUE - one for each queue, defined below;
00038         an array of message buffer descriptors  (QUEUE_ENTRY) and 
00039         a large region of message buffers where we'll store the messages 
00040         (each pointed to by d in the QUEUE_ENTRY structures).
00041 */
00042 
00043 typedef char*           DATA;
00044 typedef int     Q_POS;
00045 
00046 
00047 typedef struct 
00048 {
00049    long               length;
00050    MSG_LOGO           queueLogo;
00051    DATA               d;
00052 } QUEUE_ENTRY;
00053 
00054 typedef  struct
00055 {
00056      QUEUE_ENTRY * pQE;  /* pointer to start of queue element array */
00057      Q_POS     first;       /* position of the first(oldest) element of the queue */
00058      Q_POS     last;        /* position of the last(youngest) element of the queue */
00059      long      MyMaxSize;               /* largest message we'll ever see */
00060      long      MyMaxElements;   /* number of message buffers in ring */
00061      long      NumOfElements;
00062    
00063 }  QUEUE;
00064 
00065 
00066 int initqueue( QUEUE* q, unsigned long maxElements, unsigned long elementMaxSize );
00067 int dequeue( QUEUE *q, DATA x, long* size, MSG_LOGO* userLogoPtr );
00068 int enqueue( QUEUE *q, DATA x, long size, MSG_LOGO userLogo );
00069 int getNumOfElementsInQueue( QUEUE * q);
00070 int dumpqueue( QUEUE *p, char *filename);
00071 int undumpqueue( QUEUE *q, char *filename);
00072 Q_POS getNext(QUEUE * q, int QueuePosition);
00073 Q_POS getPrev(QUEUE * q, int QueuePosition);
00074 Q_POS getPosFirst(QUEUE * q);
00075 Q_POS getPosLast(QUEUE * q);
00076 DATA peekNextElement( QUEUE *q );
00077 
00078 #endif

Generated on Tue May 6 09:16:04 2003 for Earthworm Libs by doxygen1.3-rc3