get rid of length field....
authorbdemsky <bdemsky>
Wed, 23 Mar 2011 23:52:28 +0000 (23:52 +0000)
committerbdemsky <bdemsky>
Wed, 23 Mar 2011 23:52:28 +0000 (23:52 +0000)
Robust/src/Runtime/oooJava/Queue_RCR.c
Robust/src/Runtime/oooJava/Queue_RCR.h

index 745861aca1bed49f2b12e6dba4eb6cc185dae68d..bf499543223f9a688a9d0cd866cefb51b84986af 100644 (file)
@@ -7,40 +7,40 @@ __thread struct RCRQueue myRCRQueue;
 void resetRCRQueue() {
   myRCRQueue.head = 0;
   myRCRQueue.tail = 0;
-  myRCRQueue.length = 0;
 }
 
 //0 would mean success
 //1 would mean fail
 int enqueueRCRQueue(void * ptr, int traverserState) {
-  if (myRCRQueue.length & SIZE)
-      return 1;
+  unsigned int oldhead=myRCRQueue.head+1;
+  unsigned int head=oldhead;
+  if (head&SIZE)
+    head=0;
 
-  myRCRQueue.length++;
-  myRCRQueue.elements[myRCRQueue.head].object = ptr;
-  myRCRQueue.elements[myRCRQueue.head].traverserState = traverserState;
-  myRCRQueue.head++;
-
-  if (myRCRQueue.head&SIZE)
-    myRCRQueue.head=0;
+  if (head==myRCRQueue.tail)
+    return 1;
 
+  myRCRQueue.elements[oldhead].object = ptr;
+  myRCRQueue.elements[oldhead].traverserState = traverserState;
+  myRCRQueue.head=head;
 
   return 0;
 }
 
 RCRQueueEntry * dequeueRCRQueue() {
-  if(!myRCRQueue.length)
+  unsigned int tail=myRCRQueue.tail;
+  if(myRCRQueue.head==tail)
     return NULL;
-
-  myRCRQueue.length--;
-  void * ptr = &myRCRQueue.elements[myRCRQueue.tail++];
-  if(myRCRQueue.tail & SIZE)
-    myRCRQueue.tail =  0;
+  RCRQueueEntry * ptr = &myRCRQueue.elements[tail];
+  tail++;
+  if (tail & SIZE)
+    tail=0;
+  myRCRQueue.tail=tail;
   return ptr;
 }
 
 int isEmptyRCRQueue() {
-  return !myRCRQueue.length;
+  return myRCRQueue.head==myRCRQueue.tail;
 }
 
 
index fa91cbcab9bc29b7dfc134b6f5c3044ca729792b..b06d53ec39bc29e19ad223acffe0a058ded86b79 100644 (file)
@@ -14,7 +14,6 @@ struct RCRQueue {
   RCRQueueEntry elements[SIZE];
   unsigned int head;
   unsigned int tail;
-  unsigned int length;
 };
 
 int enqueueRCRQueue(void * ptr, int traverserState);