# HG changeset patch # User Sean Halle # Date 1339030859 25200 # Node ID b9cb01d8ce569a10a031cf37d2aec59b7b12c621 # Parent 3f5e365143fd46dde395bf6ec9bd67395022277c First working version diff -r 3f5e365143fd -r b9cb01d8ce56 PrivateQueue.c --- a/PrivateQueue.c Wed Mar 14 23:22:00 2012 -0700 +++ b/PrivateQueue.c Wed Jun 06 18:00:59 2012 -0700 @@ -30,7 +30,7 @@ retQ = (PrivQueueStruc *) VMS_int__malloc( sizeof( PrivQueueStruc ) ); //This malloc is not safe to use in wrapper lib nor app code! - retQ->startOfData = VMS_WL__malloc( 1024 * sizeof(void *) ); + retQ->startOfData = VMS_int__malloc( 1024 * sizeof(void *) ); memset( retQ->startOfData, 0, 1024 * sizeof(void *) ); retQ->extractPos = &(retQ->startOfData[0]); //side by side == empty retQ->insertPos = &(retQ->startOfData[1]); // so start pos's have to be @@ -103,6 +103,48 @@ } +/*Returns TRUE when queue is empty + */ +bool32 isEmptyPrivQ( PrivQueueStruc* Q ) + { void *out = 0; + void **startOfData = Q->startOfData; + void **endOfData = Q->endOfData; + + void **insertPos = Q->insertPos; + void **extractPos = Q->extractPos; + + //if not empty -- (extract is just below insert when empty) + if( insertPos - extractPos != 1 && + !(extractPos == endOfData && insertPos == startOfData)) + { + return FALSE; + } + //Q is empty + return TRUE; + } + +/*Returns NULL when queue is empty + */ +void* peekPrivQ( PrivQueueStruc* Q ) + { void *out = 0; + void **startOfData = Q->startOfData; + void **endOfData = Q->endOfData; + + void **insertPos = Q->insertPos; + void **extractPos = Q->extractPos; + + //if not empty -- (extract is just below insert when empty) + if( insertPos - extractPos != 1 && + !(extractPos == endOfData && insertPos == startOfData)) + { + out = *(Q->extractPos); + return out; + } + //Q is empty + return NULL; + } + + /*Returns NULL when queue is empty */ void* readPrivQ( PrivQueueStruc* Q ) diff -r 3f5e365143fd -r b9cb01d8ce56 PrivateQueue.h --- a/PrivateQueue.h Wed Mar 14 23:22:00 2012 -0700 +++ b/PrivateQueue.h Wed Jun 06 18:00:59 2012 -0700 @@ -32,6 +32,8 @@ typedef void (*DynArrayFnPtr) ( void * ); //fn has to cast void * PrivQueueStruc* makePrivQ ( ); +bool32 isEmptyPrivQ ( PrivQueueStruc *Q ); //ret TRUE if empty +void* peekPrivQ ( PrivQueueStruc *Q ); //ret NULL if empty void* readPrivQ ( PrivQueueStruc *Q ); //ret NULL if empty void writePrivQ( void *in, PrivQueueStruc *Q ); //return false when full