Mercurial > cgi-bin > hgwebdir.cgi > VMS > C_Libraries > Queue_impl
comparison PrivateQueue.c @ 29:7d35d7f42cd5
added casts to fix warnings
| author | Some Random Person <seanhalle@yahoo.com> |
|---|---|
| date | Mon, 12 Mar 2012 05:39:45 -0700 |
| parents | 59781a4c9cf1 |
| children | a74011c0b78b |
comparison
equal
deleted
inserted
replaced
| 15:0ad3a21206a8 | 17:88cbfcc3f46e |
|---|---|
| 24 */ | 24 */ |
| 25 | 25 |
| 26 PrivQueueStruc* makePrivQ() | 26 PrivQueueStruc* makePrivQ() |
| 27 { | 27 { |
| 28 PrivQueueStruc* retQ; | 28 PrivQueueStruc* retQ; |
| 29 retQ = (PrivQueueStruc *) VMS_int__malloc( sizeof( PrivQueueStruc ) ); | 29 retQ = (PrivQueueStruc *) VMS_WL__malloc( sizeof( PrivQueueStruc ) ); |
| 30 | 30 |
| 31 retQ->startOfData = VMS_int__malloc( 1024 * sizeof(void *) ); | 31 retQ->startOfData = VMS_WL__malloc( 1024 * sizeof(void *) ); |
| 32 memset( retQ->startOfData, 0, 1024 * sizeof(void *) ); | 32 memset( retQ->startOfData, 0, 1024 * sizeof(void *) ); |
| 33 retQ->extractPos = &(retQ->startOfData[0]); //side by side == empty | 33 retQ->extractPos = &(retQ->startOfData[0]); //side by side == empty |
| 34 retQ->insertPos = &(retQ->startOfData[1]); // so start pos's have to be | 34 retQ->insertPos = &(retQ->startOfData[1]); // so start pos's have to be |
| 35 retQ->endOfData = &(retQ->startOfData[1023]); | 35 retQ->endOfData = &(retQ->startOfData[1023]); |
| 36 | 36 |
| 44 void **oldStartOfData; | 44 void **oldStartOfData; |
| 45 | 45 |
| 46 oldSize = Q->endOfData - Q->startOfData; | 46 oldSize = Q->endOfData - Q->startOfData; |
| 47 newSize = 2 * oldSize; | 47 newSize = 2 * oldSize; |
| 48 oldStartOfData = Q->startOfData; | 48 oldStartOfData = Q->startOfData; |
| 49 Q->startOfData = VMS_int__malloc( newSize * sizeof(void *) ); | 49 Q->startOfData = VMS_WL__malloc( newSize * sizeof(void *) ); |
| 50 memcpy(Q->startOfData, oldStartOfData, oldSize * sizeof(void *)); | 50 memcpy(Q->startOfData, oldStartOfData, oldSize * sizeof(void *)); |
| 51 VMS_int__free(oldStartOfData); | 51 VMS_int__free(oldStartOfData); |
| 52 | 52 |
| 53 Q->extractPos = &(Q->startOfData[0]); //side by side == empty | 53 Q->extractPos = &(Q->startOfData[0]); //side by side == empty |
| 54 Q->insertPos = &(Q->startOfData[1]); // so start pos's have to be | 54 Q->insertPos = &(Q->startOfData[1]); // so start pos's have to be |
| 137 return TRUE; | 137 return TRUE; |
| 138 } | 138 } |
| 139 //Q is full | 139 //Q is full |
| 140 return FALSE; | 140 return FALSE; |
| 141 } | 141 } |
| 142 | |
| 143 int | |
| 144 numInPrivQ( PrivQueueStruc *Q ) | |
| 145 { | |
| 146 void **insertPos = Q->insertPos; | |
| 147 void **extractPos = Q->extractPos; | |
| 148 | |
| 149 int numInQ; | |
| 150 | |
| 151 if( (numInQ = insertPos - extractPos) >= 0 ) return numInQ; | |
| 152 else | |
| 153 { int size = Q->endOfData - Q->startOfData; | |
| 154 int numEmpty = extractPos - insertPos; //not efficient, but easier to read | |
| 155 return size - numEmpty; | |
| 156 } | |
| 157 } |
