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 */