Mercurial > cgi-bin > hgwebdir.cgi > VMS > C_Libraries > Queue_impl
comparison PrivateQueue.c @ 24:677afc259a58
fix branch to compile with new folder structure
| author | Merten Sach <msach@mailbox.tu-berlin.de> |
|---|---|
| date | Mon, 13 Feb 2012 19:32:12 +0100 |
| parents | 7c9e00ff1bf4 |
| children |
comparison
equal
deleted
inserted
replaced
| 12:4f82930118bf | 16:8a47778831c0 |
|---|---|
| 10 #include <string.h> | 10 #include <string.h> |
| 11 #include <errno.h> | 11 #include <errno.h> |
| 12 #include <stdlib.h> | 12 #include <stdlib.h> |
| 13 | 13 |
| 14 #include "PrivateQueue.h" | 14 #include "PrivateQueue.h" |
| 15 #include "../vmalloc.h" | 15 #include "VMS_Implementations/VMS_impl/vmalloc.h" |
| 16 | 16 |
| 17 | 17 |
| 18 | 18 |
| 19 //=========================================================================== | 19 //=========================================================================== |
| 20 | 20 |
| 21 /*This kind of queue is private to a single core at a time -- has no | 21 /*This kind of queue is private to a single core at a time -- has no |
| 22 * synchronizations | 22 * synchronizations |
| 23 */ | 23 */ |
| 24 | 24 |
| 25 PrivQueueStruc* makeVMSPrivQ() | 25 PrivQueueStruc* makePrivQ() |
| 26 { | 26 { |
| 27 PrivQueueStruc *retQ; | 27 PrivQueueStruc *retQ; |
| 28 retQ = VMS__malloc( sizeof( PrivQueueStruc ) ); | 28 retQ = VMS_int__malloc( sizeof( PrivQueueStruc ) ); |
| 29 retQ->startOfData = (void*)VMS__malloc( 1024 * sizeof(void *) ); | 29 retQ->startOfData = (void*)VMS_int__malloc( 1024 * sizeof(void *) ); |
| 30 memset( retQ->startOfData, 0, 1024 ); | 30 memset( retQ->startOfData, 0, 1024 ); |
| 31 | 31 |
| 32 retQ->extractPos = &(retQ->startOfData[0]); //side by side == empty | 32 retQ->extractPos = &(retQ->startOfData[0]); //side by side == empty |
| 33 retQ->insertPos = &(retQ->startOfData[1]); // so start pos's have to be | 33 retQ->insertPos = &(retQ->startOfData[1]); // so start pos's have to be |
| 34 retQ->endOfData = &(retQ->startOfData[1023]); | 34 retQ->endOfData = &(retQ->startOfData[1023]); |
| 43 void **oldStartOfData; | 43 void **oldStartOfData; |
| 44 | 44 |
| 45 oldSize = Q->endOfData - Q->startOfData + 1; | 45 oldSize = Q->endOfData - Q->startOfData + 1; |
| 46 newSize = 2 * oldSize; | 46 newSize = 2 * oldSize; |
| 47 oldStartOfData = Q->startOfData; | 47 oldStartOfData = Q->startOfData; |
| 48 Q->startOfData = VMS__malloc( newSize * sizeof(void*)); | 48 Q->startOfData = VMS_int__malloc( newSize * sizeof(void*)); |
| 49 //copy second half | 49 //copy second half |
| 50 size_t secondHalfSize = Q->endOfData - Q->extractPos + 1; | 50 size_t secondHalfSize = Q->endOfData - Q->extractPos + 1; |
| 51 memcpy(Q->startOfData,Q->extractPos, secondHalfSize * sizeof(void*)); | 51 memcpy(Q->startOfData,Q->extractPos, secondHalfSize * sizeof(void*)); |
| 52 //copy first half | 52 //copy first half |
| 53 memcpy(Q->startOfData + secondHalfSize, oldStartOfData, | 53 memcpy(Q->startOfData + secondHalfSize, oldStartOfData, |
| 54 (oldSize-secondHalfSize) * sizeof(void*)); | 54 (oldSize-secondHalfSize) * sizeof(void*)); |
| 55 VMS__free(oldStartOfData); | 55 VMS_int__free(oldStartOfData); |
| 56 | 56 |
| 57 Q->extractPos = Q->startOfData; | 57 Q->extractPos = Q->startOfData; |
| 58 Q->insertPos = Q->startOfData + oldSize - 1; | 58 Q->insertPos = Q->startOfData + oldSize - 1; |
| 59 Q->endOfData = &(Q->startOfData[newSize - 1]); | 59 Q->endOfData = &(Q->startOfData[newSize - 1]); |
| 60 } | 60 } |
| 196 } | 196 } |
| 197 | 197 |
| 198 void | 198 void |
| 199 freePrivQ( PrivQueueStruc *Q ) | 199 freePrivQ( PrivQueueStruc *Q ) |
| 200 { | 200 { |
| 201 VMS__free( Q->startOfData ); | 201 VMS_int__free( Q->startOfData ); |
| 202 VMS__free( Q ); | 202 VMS_int__free( Q ); |
| 203 } | 203 } |
