Mercurial > cgi-bin > hgwebdir.cgi > VMS > C_Libraries > Queue_impl
changeset 27:bd38feb38c80 MC_shared
Added numInPrivQ
| author | Some Random Person <seanhalle@yahoo.com> |
|---|---|
| date | Sun, 04 Mar 2012 14:25:24 -0800 |
| parents | c3049c8bd0fe |
| children | dabefab7d264 |
| files | BlockingQueue.c PrivateQueue.c PrivateQueue.h |
| diffstat | 3 files changed, 25 insertions(+), 8 deletions(-) [+] |
line diff
1.1 --- a/BlockingQueue.c Mon Feb 13 10:36:44 2012 -0800 1.2 +++ b/BlockingQueue.c Sun Mar 04 14:25:24 2012 -0800 1.3 @@ -34,7 +34,7 @@ 1.4 CASQueueStruc* makeCASQ() 1.5 { 1.6 CASQueueStruc* retQ; 1.7 - retQ = (CASQueueStruc *) VMS_int__malloc( sizeof( CASQueueStruc ) ); 1.8 + retQ = (CASQueueStruc *) VMS_WL__malloc( sizeof( CASQueueStruc ) ); 1.9 1.10 retQ->insertLock = UNLOCKED; 1.11 retQ->extractLock= UNLOCKED; 1.12 @@ -159,7 +159,7 @@ 1.13 SRSWQueueStruc* makeSRSWQ() 1.14 { 1.15 SRSWQueueStruc* retQ; 1.16 - retQ = (SRSWQueueStruc *) VMS_int__malloc( sizeof( SRSWQueueStruc ) ); 1.17 + retQ = (SRSWQueueStruc *) VMS_WL__malloc( sizeof( SRSWQueueStruc ) ); 1.18 memset( retQ->startOfData, 0, 1024 * sizeof(void *) ); 1.19 1.20 retQ->extractPos = &(retQ->startOfData[0]); //side by side == empty 1.21 @@ -298,11 +298,11 @@ 1.22 SRMWQueueStruc* makeSRMWQ() 1.23 { SRMWQueueStruc* retQ; 1.24 1.25 - retQ = (SRMWQueueStruc *) VMS_int__malloc( sizeof( SRMWQueueStruc ) ); 1.26 + retQ = (SRMWQueueStruc *) VMS_WL__malloc( sizeof( SRMWQueueStruc ) ); 1.27 1.28 retQ->numInternalQs = 0; 1.29 retQ->internalQsSz = 10; 1.30 - retQ->internalQs = VMS_int__malloc( retQ->internalQsSz * sizeof(SRSWQueueStruc *)); 1.31 + retQ->internalQs = VMS_WL__malloc( retQ->internalQsSz * sizeof(SRSWQueueStruc *)); 1.32 1.33 retQ->lastQReadFrom = 0; 1.34 1.35 @@ -328,7 +328,7 @@ 1.36 oldSz = Q->internalQsSz; 1.37 oldArray = Q->internalQs; 1.38 Q->internalQsSz *= 2; 1.39 - Q->internalQs = VMS_int__malloc( Q->internalQsSz * sizeof(SRSWQueueStruc *)); 1.40 + Q->internalQs = VMS_WL__malloc( Q->internalQsSz * sizeof(SRSWQueueStruc *)); 1.41 for( i = 0; i < oldSz; i++ ) 1.42 { Q->internalQs[i] = oldArray[i]; 1.43 }
2.1 --- a/PrivateQueue.c Mon Feb 13 10:36:44 2012 -0800 2.2 +++ b/PrivateQueue.c Sun Mar 04 14:25:24 2012 -0800 2.3 @@ -26,9 +26,9 @@ 2.4 PrivQueueStruc* makePrivQ() 2.5 { 2.6 PrivQueueStruc* retQ; 2.7 - retQ = (PrivQueueStruc *) VMS_int__malloc( sizeof( PrivQueueStruc ) ); 2.8 + retQ = (PrivQueueStruc *) VMS_WL__malloc( sizeof( PrivQueueStruc ) ); 2.9 2.10 - retQ->startOfData = VMS_int__malloc( 1024 * sizeof(void *) ); 2.11 + retQ->startOfData = VMS_WL__malloc( 1024 * sizeof(void *) ); 2.12 memset( retQ->startOfData, 0, 1024 * sizeof(void *) ); 2.13 retQ->extractPos = &(retQ->startOfData[0]); //side by side == empty 2.14 retQ->insertPos = &(retQ->startOfData[1]); // so start pos's have to be 2.15 @@ -46,7 +46,7 @@ 2.16 oldSize = Q->endOfData - Q->startOfData; 2.17 newSize = 2 * oldSize; 2.18 oldStartOfData = Q->startOfData; 2.19 - Q->startOfData = VMS_int__malloc( newSize * sizeof(void *) ); 2.20 + Q->startOfData = VMS_WL__malloc( newSize * sizeof(void *) ); 2.21 memcpy(Q->startOfData, oldStartOfData, oldSize * sizeof(void *)); 2.22 VMS_int__free(oldStartOfData); 2.23 2.24 @@ -139,3 +139,19 @@ 2.25 //Q is full 2.26 return FALSE; 2.27 } 2.28 + 2.29 +int 2.30 +numInPrivQ( PrivQueueStruc *Q ) 2.31 + { 2.32 + void **insertPos = Q->insertPos; 2.33 + void **extractPos = Q->extractPos; 2.34 + 2.35 + int numInQ; 2.36 + 2.37 + if( (numInQ = insertPos - extractPos) >= 0 ) return numInQ; 2.38 + else 2.39 + { int size = Q->endOfData - Q->startOfData; 2.40 + int numEmpty = extractPos - insertPos; //not efficient, but easier to read 2.41 + return size - numEmpty; 2.42 + } 2.43 + }
3.1 --- a/PrivateQueue.h Mon Feb 13 10:36:44 2012 -0800 3.2 +++ b/PrivateQueue.h Sun Mar 04 14:25:24 2012 -0800 3.3 @@ -34,6 +34,7 @@ 3.4 void* readPrivQ ( PrivQueueStruc *Q ); 3.5 void writePrivQ( void *in, PrivQueueStruc *Q ); 3.6 int writeIfSpacePrivQ( void * in, PrivQueueStruc* Q ); //return 3.7 +int numInPrivQ( PrivQueueStruc *Q ); 3.8 // false when full 3.9 3.10 #endif /* _PRIVATE_QUEUE_H */
