Mercurial > cgi-bin > hgwebdir.cgi > VMS > C_Libraries > Queue_impl
comparison PrivateQueue.c @ 33:501206566d16
fixed numInPrivQ
| author | Some Random Person <seanhalle@yahoo.com> |
|---|---|
| date | Wed, 14 Mar 2012 22:56:28 -0700 |
| parents | a74011c0b78b |
| children | 3f5e365143fd |
comparison
equal
deleted
inserted
replaced
| 18:6ee7f4c5afae | 19:595b35fd1045 |
|---|---|
| 192 | 192 |
| 193 if( Q->insertPos < Q->extractPos ) | 193 if( Q->insertPos < Q->extractPos ) |
| 194 { //insert has wrapped around so numIn is: | 194 { //insert has wrapped around so numIn is: |
| 195 // insertPos + size - extractPos -- Consider, is empty when | 195 // insertPos + size - extractPos -- Consider, is empty when |
| 196 // extractPos = endOfData and insert = start -- correctly get zero | 196 // extractPos = endOfData and insert = start -- correctly get zero |
| 197 size = Q->endOfData - Q->startOfData; | 197 size = Q->endOfData - Q->startOfData + 1; //sz of 10 is 0..9 |
| 198 numIn = Q->insertPos + size - Q->extractPos; | 198 numIn = Q->insertPos - Q->extractPos + size - 1; //-1 bec insrt empty |
| 199 } | 199 } |
| 200 else | 200 else |
| 201 { | 201 { |
| 202 numIn = Q->insertPos - Q->extractPos -1;//-1 bec empty @ side-by-side | 202 numIn = Q->insertPos - Q->extractPos -1;//-1 bec insertPos empty |
| 203 } | 203 } |
| 204 return numIn; | 204 return numIn; |
| 205 } | 205 } |
| 206 | 206 |
| 207 | |
| 208 int | |
| 209 numInPrivQ( PrivQueueStruc *Q ) | |
| 210 { | |
| 211 void **insertPos = Q->insertPos; | |
| 212 void **extractPos = Q->extractPos; | |
| 213 | |
| 214 int numInQ; | |
| 215 | |
| 216 if( (numInQ = insertPos - extractPos) >= 0 ) return numInQ; | |
| 217 else | |
| 218 { int size = Q->endOfData - Q->startOfData; | |
| 219 int numEmpty = extractPos - insertPos; //not efficient, but easier to read | |
| 220 return size - numEmpty; | |
| 221 } | |
| 222 } | |
| 223 | 207 |
| 224 /*Treats queue as a stack -- no matter contents, if read done right after | 208 /*Treats queue as a stack -- no matter contents, if read done right after |
| 225 * a push, then the pushed item is what comes out. | 209 * a push, then the pushed item is what comes out. |
| 226 * Expands the queue size automatically when it's full. | 210 * Expands the queue size automatically when it's full. |
| 227 */ | 211 */ |
