Mercurial > cgi-bin > hgwebdir.cgi > VMS > C_Libraries > Queue_impl
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 */ |
