# HG changeset patch # User Some Random Person # Date 1330899924 28800 # Node ID bd38feb38c802c8105d248218b85108b27f302b9 # Parent c3049c8bd0fe080f57e7f73f7b68dd6ce279f0d5 Added numInPrivQ diff -r c3049c8bd0fe -r bd38feb38c80 BlockingQueue.c --- a/BlockingQueue.c Mon Feb 13 10:36:44 2012 -0800 +++ b/BlockingQueue.c Sun Mar 04 14:25:24 2012 -0800 @@ -34,7 +34,7 @@ CASQueueStruc* makeCASQ() { CASQueueStruc* retQ; - retQ = (CASQueueStruc *) VMS_int__malloc( sizeof( CASQueueStruc ) ); + retQ = (CASQueueStruc *) VMS_WL__malloc( sizeof( CASQueueStruc ) ); retQ->insertLock = UNLOCKED; retQ->extractLock= UNLOCKED; @@ -159,7 +159,7 @@ SRSWQueueStruc* makeSRSWQ() { SRSWQueueStruc* retQ; - retQ = (SRSWQueueStruc *) VMS_int__malloc( sizeof( SRSWQueueStruc ) ); + retQ = (SRSWQueueStruc *) VMS_WL__malloc( sizeof( SRSWQueueStruc ) ); memset( retQ->startOfData, 0, 1024 * sizeof(void *) ); retQ->extractPos = &(retQ->startOfData[0]); //side by side == empty @@ -298,11 +298,11 @@ SRMWQueueStruc* makeSRMWQ() { SRMWQueueStruc* retQ; - retQ = (SRMWQueueStruc *) VMS_int__malloc( sizeof( SRMWQueueStruc ) ); + retQ = (SRMWQueueStruc *) VMS_WL__malloc( sizeof( SRMWQueueStruc ) ); retQ->numInternalQs = 0; retQ->internalQsSz = 10; - retQ->internalQs = VMS_int__malloc( retQ->internalQsSz * sizeof(SRSWQueueStruc *)); + retQ->internalQs = VMS_WL__malloc( retQ->internalQsSz * sizeof(SRSWQueueStruc *)); retQ->lastQReadFrom = 0; @@ -328,7 +328,7 @@ oldSz = Q->internalQsSz; oldArray = Q->internalQs; Q->internalQsSz *= 2; - Q->internalQs = VMS_int__malloc( Q->internalQsSz * sizeof(SRSWQueueStruc *)); + Q->internalQs = VMS_WL__malloc( Q->internalQsSz * sizeof(SRSWQueueStruc *)); for( i = 0; i < oldSz; i++ ) { Q->internalQs[i] = oldArray[i]; } diff -r c3049c8bd0fe -r bd38feb38c80 PrivateQueue.c --- a/PrivateQueue.c Mon Feb 13 10:36:44 2012 -0800 +++ b/PrivateQueue.c Sun Mar 04 14:25:24 2012 -0800 @@ -26,9 +26,9 @@ PrivQueueStruc* makePrivQ() { PrivQueueStruc* retQ; - retQ = (PrivQueueStruc *) VMS_int__malloc( sizeof( PrivQueueStruc ) ); + retQ = (PrivQueueStruc *) VMS_WL__malloc( sizeof( PrivQueueStruc ) ); - retQ->startOfData = VMS_int__malloc( 1024 * sizeof(void *) ); + retQ->startOfData = VMS_WL__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 @@ -46,7 +46,7 @@ oldSize = Q->endOfData - Q->startOfData; newSize = 2 * oldSize; oldStartOfData = Q->startOfData; - Q->startOfData = VMS_int__malloc( newSize * sizeof(void *) ); + Q->startOfData = VMS_WL__malloc( newSize * sizeof(void *) ); memcpy(Q->startOfData, oldStartOfData, oldSize * sizeof(void *)); VMS_int__free(oldStartOfData); @@ -139,3 +139,19 @@ //Q is full return FALSE; } + +int +numInPrivQ( PrivQueueStruc *Q ) + { + void **insertPos = Q->insertPos; + void **extractPos = Q->extractPos; + + int numInQ; + + if( (numInQ = insertPos - extractPos) >= 0 ) return numInQ; + else + { int size = Q->endOfData - Q->startOfData; + int numEmpty = extractPos - insertPos; //not efficient, but easier to read + return size - numEmpty; + } + } diff -r c3049c8bd0fe -r bd38feb38c80 PrivateQueue.h --- a/PrivateQueue.h Mon Feb 13 10:36:44 2012 -0800 +++ b/PrivateQueue.h Sun Mar 04 14:25:24 2012 -0800 @@ -34,6 +34,7 @@ void* readPrivQ ( PrivQueueStruc *Q ); void writePrivQ( void *in, PrivQueueStruc *Q ); int writeIfSpacePrivQ( void * in, PrivQueueStruc* Q ); //return +int numInPrivQ( PrivQueueStruc *Q ); // false when full #endif /* _PRIVATE_QUEUE_H */