comparison PrivateQueue.c @ 38:b66352de717e

Updated default branch to working versions of all the sub repos
author Sean Halle <seanhalle@yahoo.com>
date Mon, 10 Sep 2012 01:11:54 -0700
parents 3f5e365143fd
children 8fcbe46de60a d01d48b023ca
comparison
equal deleted inserted replaced
21:35ee366125e5 23:f63ccb59d744
28 PrivQueueStruc* retQ; 28 PrivQueueStruc* retQ;
29 //This malloc is not safe to use in wrapper lib nor app code! 29 //This malloc is not safe to use in wrapper lib nor app code!
30 retQ = (PrivQueueStruc *) VMS_int__malloc( sizeof( PrivQueueStruc ) ); 30 retQ = (PrivQueueStruc *) VMS_int__malloc( sizeof( PrivQueueStruc ) );
31 31
32 //This malloc is not safe to use in wrapper lib nor app code! 32 //This malloc is not safe to use in wrapper lib nor app code!
33 retQ->startOfData = VMS_WL__malloc( 1024 * sizeof(void *) ); 33 retQ->startOfData = VMS_int__malloc( 1024 * sizeof(void *) );
34 memset( retQ->startOfData, 0, 1024 * sizeof(void *) ); 34 memset( retQ->startOfData, 0, 1024 * sizeof(void *) );
35 retQ->extractPos = &(retQ->startOfData[0]); //side by side == empty 35 retQ->extractPos = &(retQ->startOfData[0]); //side by side == empty
36 retQ->insertPos = &(retQ->startOfData[1]); // so start pos's have to be 36 retQ->insertPos = &(retQ->startOfData[1]); // so start pos's have to be
37 retQ->endOfData = &(retQ->startOfData[1023]); 37 retQ->endOfData = &(retQ->startOfData[1023]);
38 38
98 memcpy( newStartOfData, oldStartOfData, bottPartSize ); 98 memcpy( newStartOfData, oldStartOfData, bottPartSize );
99 Q->insertPos = (void **)(newStartOfData + bottPartSize); 99 Q->insertPos = (void **)(newStartOfData + bottPartSize);
100 } 100 }
101 //This free is not safe to use in wrapper lib nor app code! 101 //This free is not safe to use in wrapper lib nor app code!
102 VMS_int__free(oldStartOfData); 102 VMS_int__free(oldStartOfData);
103 }
104
105
106 /*Returns TRUE when queue is empty
107 */
108 bool32 isEmptyPrivQ( PrivQueueStruc* Q )
109 { void *out = 0;
110 void **startOfData = Q->startOfData;
111 void **endOfData = Q->endOfData;
112
113 void **insertPos = Q->insertPos;
114 void **extractPos = Q->extractPos;
115
116 //if not empty -- (extract is just below insert when empty)
117 if( insertPos - extractPos != 1 &&
118 !(extractPos == endOfData && insertPos == startOfData))
119 {
120 return FALSE;
121 }
122 //Q is empty
123 return TRUE;
124 }
125
126 /*Returns NULL when queue is empty
127 */
128 void* peekPrivQ( PrivQueueStruc* Q )
129 { void *out = 0;
130 void **startOfData = Q->startOfData;
131 void **endOfData = Q->endOfData;
132
133 void **insertPos = Q->insertPos;
134 void **extractPos = Q->extractPos;
135
136 //if not empty -- (extract is just below insert when empty)
137 if( insertPos - extractPos != 1 &&
138 !(extractPos == endOfData && insertPos == startOfData))
139 {
140 out = *(Q->extractPos);
141 return out;
142 }
143 //Q is empty
144 return NULL;
103 } 145 }
104 146
105 147
106 /*Returns NULL when queue is empty 148 /*Returns NULL when queue is empty
107 */ 149 */