Mercurial > cgi-bin > hgwebdir.cgi > VMS > C_Libraries > Queue_impl
changeset 37:b9cb01d8ce56 MC_shared
First working version
| author | Sean Halle <seanhalle@yahoo.com> |
|---|---|
| date | Wed, 06 Jun 2012 18:00:59 -0700 |
| parents | 3f5e365143fd |
| children | b66352de717e d01d48b023ca |
| files | PrivateQueue.c PrivateQueue.h |
| diffstat | 2 files changed, 45 insertions(+), 1 deletions(-) [+] |
line diff
1.1 --- a/PrivateQueue.c Wed Mar 14 23:22:00 2012 -0700 1.2 +++ b/PrivateQueue.c Wed Jun 06 18:00:59 2012 -0700 1.3 @@ -30,7 +30,7 @@ 1.4 retQ = (PrivQueueStruc *) VMS_int__malloc( sizeof( PrivQueueStruc ) ); 1.5 1.6 //This malloc is not safe to use in wrapper lib nor app code! 1.7 - retQ->startOfData = VMS_WL__malloc( 1024 * sizeof(void *) ); 1.8 + retQ->startOfData = VMS_int__malloc( 1024 * sizeof(void *) ); 1.9 memset( retQ->startOfData, 0, 1024 * sizeof(void *) ); 1.10 retQ->extractPos = &(retQ->startOfData[0]); //side by side == empty 1.11 retQ->insertPos = &(retQ->startOfData[1]); // so start pos's have to be 1.12 @@ -103,6 +103,48 @@ 1.13 } 1.14 1.15 1.16 +/*Returns TRUE when queue is empty 1.17 + */ 1.18 +bool32 isEmptyPrivQ( PrivQueueStruc* Q ) 1.19 + { void *out = 0; 1.20 + void **startOfData = Q->startOfData; 1.21 + void **endOfData = Q->endOfData; 1.22 + 1.23 + void **insertPos = Q->insertPos; 1.24 + void **extractPos = Q->extractPos; 1.25 + 1.26 + //if not empty -- (extract is just below insert when empty) 1.27 + if( insertPos - extractPos != 1 && 1.28 + !(extractPos == endOfData && insertPos == startOfData)) 1.29 + { 1.30 + return FALSE; 1.31 + } 1.32 + //Q is empty 1.33 + return TRUE; 1.34 + } 1.35 + 1.36 +/*Returns NULL when queue is empty 1.37 + */ 1.38 +void* peekPrivQ( PrivQueueStruc* Q ) 1.39 + { void *out = 0; 1.40 + void **startOfData = Q->startOfData; 1.41 + void **endOfData = Q->endOfData; 1.42 + 1.43 + void **insertPos = Q->insertPos; 1.44 + void **extractPos = Q->extractPos; 1.45 + 1.46 + //if not empty -- (extract is just below insert when empty) 1.47 + if( insertPos - extractPos != 1 && 1.48 + !(extractPos == endOfData && insertPos == startOfData)) 1.49 + { 1.50 + out = *(Q->extractPos); 1.51 + return out; 1.52 + } 1.53 + //Q is empty 1.54 + return NULL; 1.55 + } 1.56 + 1.57 + 1.58 /*Returns NULL when queue is empty 1.59 */ 1.60 void* readPrivQ( PrivQueueStruc* Q )
2.1 --- a/PrivateQueue.h Wed Mar 14 23:22:00 2012 -0700 2.2 +++ b/PrivateQueue.h Wed Jun 06 18:00:59 2012 -0700 2.3 @@ -32,6 +32,8 @@ 2.4 typedef void (*DynArrayFnPtr) ( void * ); //fn has to cast void * 2.5 2.6 PrivQueueStruc* makePrivQ ( ); 2.7 +bool32 isEmptyPrivQ ( PrivQueueStruc *Q ); //ret TRUE if empty 2.8 +void* peekPrivQ ( PrivQueueStruc *Q ); //ret NULL if empty 2.9 void* readPrivQ ( PrivQueueStruc *Q ); //ret NULL if empty 2.10 void writePrivQ( void *in, PrivQueueStruc *Q ); 2.11 //return false when full
