Mercurial > cgi-bin > hgwebdir.cgi > VMS > C_Libraries > Queue_impl
diff PrivateQueue.c @ 27:bd38feb38c80
Added numInPrivQ
| author | Some Random Person <seanhalle@yahoo.com> |
|---|---|
| date | Sun, 04 Mar 2012 14:25:24 -0800 |
| parents | 59781a4c9cf1 |
| children | a74011c0b78b |
line diff
1.1 --- a/PrivateQueue.c Mon Feb 13 10:36:44 2012 -0800 1.2 +++ b/PrivateQueue.c Sun Mar 04 14:25:24 2012 -0800 1.3 @@ -26,9 +26,9 @@ 1.4 PrivQueueStruc* makePrivQ() 1.5 { 1.6 PrivQueueStruc* retQ; 1.7 - retQ = (PrivQueueStruc *) VMS_int__malloc( sizeof( PrivQueueStruc ) ); 1.8 + retQ = (PrivQueueStruc *) VMS_WL__malloc( sizeof( PrivQueueStruc ) ); 1.9 1.10 - retQ->startOfData = VMS_int__malloc( 1024 * sizeof(void *) ); 1.11 + retQ->startOfData = VMS_WL__malloc( 1024 * sizeof(void *) ); 1.12 memset( retQ->startOfData, 0, 1024 * sizeof(void *) ); 1.13 retQ->extractPos = &(retQ->startOfData[0]); //side by side == empty 1.14 retQ->insertPos = &(retQ->startOfData[1]); // so start pos's have to be 1.15 @@ -46,7 +46,7 @@ 1.16 oldSize = Q->endOfData - Q->startOfData; 1.17 newSize = 2 * oldSize; 1.18 oldStartOfData = Q->startOfData; 1.19 - Q->startOfData = VMS_int__malloc( newSize * sizeof(void *) ); 1.20 + Q->startOfData = VMS_WL__malloc( newSize * sizeof(void *) ); 1.21 memcpy(Q->startOfData, oldStartOfData, oldSize * sizeof(void *)); 1.22 VMS_int__free(oldStartOfData); 1.23 1.24 @@ -139,3 +139,19 @@ 1.25 //Q is full 1.26 return FALSE; 1.27 } 1.28 + 1.29 +int 1.30 +numInPrivQ( PrivQueueStruc *Q ) 1.31 + { 1.32 + void **insertPos = Q->insertPos; 1.33 + void **extractPos = Q->extractPos; 1.34 + 1.35 + int numInQ; 1.36 + 1.37 + if( (numInQ = insertPos - extractPos) >= 0 ) return numInQ; 1.38 + else 1.39 + { int size = Q->endOfData - Q->startOfData; 1.40 + int numEmpty = extractPos - insertPos; //not efficient, but easier to read 1.41 + return size - numEmpty; 1.42 + } 1.43 + }
