changeset 24:677afc259a58 VMS__malloc_brch

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
files .brch__VMS__malloc_brch BlockingQueue.c PrivateQueue.c PrivateQueue.h
diffstat 3 files changed, 249 insertions(+), 249 deletions(-) [+]
line diff
     1.1 --- a/BlockingQueue.c	Wed Jun 22 18:49:17 2011 +0200
     1.2 +++ b/BlockingQueue.c	Mon Feb 13 19:32:12 2012 +0100
     1.3 @@ -13,7 +13,7 @@
     1.4  #include <sched.h>
     1.5  
     1.6  #include "BlockingQueue.h"
     1.7 -#include "../vmalloc.h"
     1.8 +#include "VMS_Implementations/VMS_impl/vmalloc.h"
     1.9  
    1.10  #define INC(x) (++x == 1024) ? (x) = 0 : (x)
    1.11  
    1.12 @@ -26,7 +26,7 @@
    1.13   {
    1.14     PThdQueueStruc* retQ;
    1.15     int retCode;
    1.16 -   retQ = (PThdQueueStruc *) VMS__malloc( sizeof( PThdQueueStruc ) );
    1.17 +   retQ = (PThdQueueStruc *) VMS_int__malloc( sizeof( PThdQueueStruc ) );
    1.18  
    1.19  
    1.20     retCode =
    1.21 @@ -118,7 +118,7 @@
    1.22  CASQueueStruc* makeCASQ()
    1.23   {
    1.24     CASQueueStruc* retQ;
    1.25 -   retQ = (CASQueueStruc *) VMS__malloc( sizeof( CASQueueStruc ) );
    1.26 +   retQ = (CASQueueStruc *) VMS_int__malloc( sizeof( CASQueueStruc ) );
    1.27  
    1.28     retQ->insertLock = UNLOCKED;
    1.29     retQ->extractLock= UNLOCKED;
    1.30 @@ -243,7 +243,7 @@
    1.31  SRSWQueueStruc* makeSRSWQ()
    1.32   {
    1.33     SRSWQueueStruc* retQ;
    1.34 -   retQ = (SRSWQueueStruc *) VMS__malloc( sizeof( SRSWQueueStruc ) );
    1.35 +   retQ = (SRSWQueueStruc *) VMS_int__malloc( sizeof( SRSWQueueStruc ) );
    1.36     
    1.37     retQ->extractPos = &(retQ->startOfData[0]); //side by side == empty
    1.38     retQ->insertPos  = &(retQ->startOfData[1]); // so start pos's have to be
    1.39 @@ -255,7 +255,7 @@
    1.40  void
    1.41  freeSRSWQ( SRSWQueueStruc* Q )
    1.42   {
    1.43 -   VMS__free( Q );
    1.44 +   VMS_int__free( Q );
    1.45   }
    1.46  
    1.47  void* readSRSWQ( SRSWQueueStruc* Q )
    1.48 @@ -380,11 +380,11 @@
    1.49  SRMWQueueStruc* makeSRMWQ()
    1.50   { SRMWQueueStruc* retQ;
    1.51     
    1.52 -   retQ = (SRMWQueueStruc *) VMS__malloc( sizeof( SRMWQueueStruc ) );
    1.53 +   retQ = (SRMWQueueStruc *) VMS_int__malloc( sizeof( SRMWQueueStruc ) );
    1.54     
    1.55     retQ->numInternalQs = 0;
    1.56     retQ->internalQsSz  = 10;
    1.57 -   retQ->internalQs = VMS__malloc( retQ->internalQsSz *
    1.58 +   retQ->internalQs = VMS_int__malloc( retQ->internalQsSz *
    1.59                                     sizeof(SRSWQueueStruc *) );
    1.60     
    1.61     retQ->lastQReadFrom = 0;
    1.62 @@ -411,11 +411,11 @@
    1.63        oldSz            = Q->internalQsSz;
    1.64        oldArray         = Q->internalQs;
    1.65        Q->internalQsSz *= 2;
    1.66 -      Q->internalQs    = VMS__malloc( Q->internalQsSz * sizeof(SRSWQueueStruc *));
    1.67 +      Q->internalQs    = VMS_int__malloc( Q->internalQsSz * sizeof(SRSWQueueStruc *));
    1.68        for( i = 0; i < oldSz; i++ )
    1.69         { Q->internalQs[i] = oldArray[i];
    1.70         }
    1.71 -      VMS__free( oldArray );
    1.72 +      VMS_int__free( oldArray );
    1.73      }
    1.74     Q->internalQs[ Q->numInternalQs - 1 ] = makeSRSWQ();
    1.75     return Q->numInternalQs - 1;
     2.1 --- a/PrivateQueue.c	Wed Jun 22 18:49:17 2011 +0200
     2.2 +++ b/PrivateQueue.c	Mon Feb 13 19:32:12 2012 +0100
     2.3 @@ -1,203 +1,203 @@
     2.4 -/*
     2.5 - *  Copyright 2009 OpenSourceStewardshipFoundation.org
     2.6 - *  Licensed under GNU General Public License version 2
     2.7 - *
     2.8 - * Author: seanhalle@yahoo.com
     2.9 - */
    2.10 -
    2.11 -
    2.12 -#include <stdio.h>
    2.13 -#include <string.h>
    2.14 -#include <errno.h>
    2.15 -#include <stdlib.h>
    2.16 -
    2.17 -#include "PrivateQueue.h"
    2.18 -#include "../vmalloc.h"
    2.19 -
    2.20 -
    2.21 -
    2.22 -//===========================================================================
    2.23 -
    2.24 -/*This kind of queue is private to a single core at a time -- has no
    2.25 - * synchronizations 
    2.26 - */
    2.27 -
    2.28 -PrivQueueStruc* makeVMSPrivQ()
    2.29 - {
    2.30 -   PrivQueueStruc *retQ;
    2.31 -   retQ = VMS__malloc( sizeof( PrivQueueStruc ) );
    2.32 -   retQ->startOfData = (void*)VMS__malloc( 1024 * sizeof(void *) );
    2.33 -   memset( retQ->startOfData, 0, 1024 );
    2.34 -
    2.35 -   retQ->extractPos = &(retQ->startOfData[0]); //side by side == empty
    2.36 -   retQ->insertPos  = &(retQ->startOfData[1]); // so start pos's have to be
    2.37 -   retQ->endOfData  = &(retQ->startOfData[1023]);
    2.38 -
    2.39 -   return retQ;
    2.40 - }
    2.41 -
    2.42 -
    2.43 -void
    2.44 -enlargePrivQ( PrivQueueStruc *Q )
    2.45 - { size_t    oldSize, newSize;
    2.46 -   void **oldStartOfData;
    2.47 -
    2.48 -   oldSize           = Q->endOfData - Q->startOfData + 1;
    2.49 -   newSize           = 2 * oldSize;
    2.50 -   oldStartOfData = Q->startOfData;
    2.51 -   Q->startOfData = VMS__malloc( newSize * sizeof(void*));
    2.52 -   //copy second half
    2.53 -   size_t secondHalfSize = Q->endOfData - Q->extractPos + 1;
    2.54 -   memcpy(Q->startOfData,Q->extractPos, secondHalfSize * sizeof(void*));
    2.55 -   //copy first half
    2.56 -   memcpy(Q->startOfData + secondHalfSize, oldStartOfData, 
    2.57 -                        (oldSize-secondHalfSize) * sizeof(void*));
    2.58 -   VMS__free(oldStartOfData);
    2.59 -   
    2.60 -   Q->extractPos  = Q->startOfData;
    2.61 -   Q->insertPos   = Q->startOfData + oldSize - 1;
    2.62 -   Q->endOfData   = &(Q->startOfData[newSize - 1]);
    2.63 - }
    2.64 -
    2.65 -
    2.66 -/*Returns NULL when queue is empty
    2.67 - */
    2.68 -void* readPrivQ( PrivQueueStruc* Q )
    2.69 - { void *out    = 0;
    2.70 -   void **startOfData = Q->startOfData;
    2.71 -   void **endOfData   = Q->endOfData;
    2.72 -
    2.73 -   void **insertPos  = Q->insertPos;
    2.74 -   void **extractPos = Q->extractPos;
    2.75 -
    2.76 -      //if not empty -- (extract is just below insert when empty)
    2.77 -   if( insertPos - extractPos != 1 &&
    2.78 -       !(extractPos == endOfData && insertPos == startOfData))
    2.79 -    {    //move before read
    2.80 -      if( extractPos == endOfData ) //write new pos exactly once, correctly
    2.81 -       { Q->extractPos = startOfData; //can't overrun then fix it 'cause
    2.82 -       }                              // other thread might read bad pos
    2.83 -      else
    2.84 -       { Q->extractPos++;
    2.85 -       }
    2.86 -      out = *(Q->extractPos);
    2.87 -      return out;
    2.88 -    }
    2.89 -      //Q is empty
    2.90 -   return NULL;
    2.91 - }
    2.92 -
    2.93 -int32
    2.94 -numInPrivQ( PrivQueueStruc *Q )
    2.95 - { int32 size, numIn;
    2.96 - 
    2.97 -   if( Q->insertPos < Q->extractPos )
    2.98 -    {    //insert has wrapped around so numIn is:
    2.99 -         // insertPos + size - extractPos -- Consider, is empty when
   2.100 -         // extractPos = endOfData and insert = start -- correctly get zero
   2.101 -      size  = Q->endOfData - Q->startOfData;
   2.102 -      numIn = Q->insertPos + size - Q->extractPos;
   2.103 -    }
   2.104 -   else
   2.105 -    {
   2.106 -      numIn =  Q->insertPos -  Q->extractPos -1;//-1 bec empty @ side-by-side
   2.107 -    }
   2.108 -   return numIn;
   2.109 - }
   2.110 -
   2.111 -
   2.112 -/*Expands the queue size automatically when it's full
   2.113 - */
   2.114 -void
   2.115 -writePrivQ( void * in, PrivQueueStruc* Q )
   2.116 - {
   2.117 -   while(1){
   2.118 -       void **startOfData = Q->startOfData;
   2.119 -       void **endOfData   = Q->endOfData;
   2.120 -
   2.121 -       void **insertPos  = Q->insertPos;
   2.122 -       void **extractPos = Q->extractPos;
   2.123 -
   2.124 -          //Full? (insert is just below extract when full)
   2.125 -       if( extractPos - insertPos != 1 &&
   2.126 -           !(insertPos == endOfData && extractPos == startOfData))
   2.127 -        { *(Q->insertPos) = in;   //insert before move
   2.128 -          if( insertPos == endOfData ) //write new pos exactly once, correctly
   2.129 -           { Q->insertPos = startOfData;
   2.130 -           }
   2.131 -          else
   2.132 -           { Q->insertPos++;
   2.133 -           }
   2.134 -          return;
   2.135 -        }
   2.136 -          //Q is full
   2.137 -       enlargePrivQ( Q );
   2.138 -   }
   2.139 - }
   2.140 -
   2.141 -
   2.142 -/*Returns false when the queue was full.
   2.143 - * have option of calling make_larger_PrivQ to make more room, then try again
   2.144 - */
   2.145 -int writeIfSpacePrivQ( void * in, PrivQueueStruc* Q )
   2.146 - {
   2.147 -   void **startOfData = Q->startOfData;
   2.148 -   void **endOfData   = Q->endOfData;
   2.149 -
   2.150 -   void **insertPos  = Q->insertPos;
   2.151 -   void **extractPos = Q->extractPos;
   2.152 -
   2.153 -   if( extractPos - insertPos != 1 &&
   2.154 -       !(insertPos == endOfData && extractPos == startOfData))
   2.155 -    { *(Q->insertPos) = in;   //insert before move
   2.156 -      if( insertPos == endOfData ) //write new pos exactly once, correctly
   2.157 -       { Q->insertPos = startOfData;
   2.158 -       }
   2.159 -      else
   2.160 -       { Q->insertPos++;
   2.161 -       }
   2.162 -      return TRUE;
   2.163 -    }
   2.164 -      //Q is full
   2.165 -   return FALSE;
   2.166 - }
   2.167 -
   2.168 -/*Treats queue as a stack -- no matter contents, if read done right after
   2.169 - * a push, then the pushed item is what comes out.
   2.170 - * Expands the queue size automatically when it's full.
   2.171 - */
   2.172 -void
   2.173 -pushPrivQ( void * in, PrivQueueStruc* Q )
   2.174 - {
   2.175 -   while(1){
   2.176 -       void **startOfData = Q->startOfData;
   2.177 -       void **endOfData   = Q->endOfData;
   2.178 -
   2.179 -       void **insertPos  = Q->insertPos;
   2.180 -       void **extractPos = Q->extractPos;
   2.181 -
   2.182 -          //Full? (insert is just below extract when full)
   2.183 -       if( extractPos - insertPos != 1 &&
   2.184 -           !(insertPos == endOfData && extractPos == startOfData))
   2.185 -        {    //insert -- but go backwards, inserting at read position then
   2.186 -             // move read pos backwards
   2.187 -          *(Q->extractPos) = in;
   2.188 -          if( extractPos == startOfData ) //write new pos exactly once, correctly
   2.189 -           { Q->extractPos = endOfData;   //can't overrun then fix it 'cause
   2.190 -           }                              // other thread might read bad pos
   2.191 -          else
   2.192 -           { Q->extractPos--;
   2.193 -           }
   2.194 -          return;
   2.195 -        }
   2.196 -          //Q is full
   2.197 -       enlargePrivQ( Q );
   2.198 -   }
   2.199 - }
   2.200 -
   2.201 -void
   2.202 -freePrivQ( PrivQueueStruc *Q )
   2.203 - {
   2.204 -   VMS__free( Q->startOfData );
   2.205 -   VMS__free( Q );
   2.206 +/*
   2.207 + *  Copyright 2009 OpenSourceStewardshipFoundation.org
   2.208 + *  Licensed under GNU General Public License version 2
   2.209 + *
   2.210 + * Author: seanhalle@yahoo.com
   2.211 + */
   2.212 +
   2.213 +
   2.214 +#include <stdio.h>
   2.215 +#include <string.h>
   2.216 +#include <errno.h>
   2.217 +#include <stdlib.h>
   2.218 +
   2.219 +#include "PrivateQueue.h"
   2.220 +#include "VMS_Implementations/VMS_impl/vmalloc.h"
   2.221 +
   2.222 +
   2.223 +
   2.224 +//===========================================================================
   2.225 +
   2.226 +/*This kind of queue is private to a single core at a time -- has no
   2.227 + * synchronizations 
   2.228 + */
   2.229 +
   2.230 +PrivQueueStruc* makePrivQ()
   2.231 + {
   2.232 +   PrivQueueStruc *retQ;
   2.233 +   retQ = VMS_int__malloc( sizeof( PrivQueueStruc ) );
   2.234 +   retQ->startOfData = (void*)VMS_int__malloc( 1024 * sizeof(void *) );
   2.235 +   memset( retQ->startOfData, 0, 1024 );
   2.236 +
   2.237 +   retQ->extractPos = &(retQ->startOfData[0]); //side by side == empty
   2.238 +   retQ->insertPos  = &(retQ->startOfData[1]); // so start pos's have to be
   2.239 +   retQ->endOfData  = &(retQ->startOfData[1023]);
   2.240 +
   2.241 +   return retQ;
   2.242 + }
   2.243 +
   2.244 +
   2.245 +void
   2.246 +enlargePrivQ( PrivQueueStruc *Q )
   2.247 + { size_t    oldSize, newSize;
   2.248 +   void **oldStartOfData;
   2.249 +
   2.250 +   oldSize           = Q->endOfData - Q->startOfData + 1;
   2.251 +   newSize           = 2 * oldSize;
   2.252 +   oldStartOfData = Q->startOfData;
   2.253 +   Q->startOfData = VMS_int__malloc( newSize * sizeof(void*));
   2.254 +   //copy second half
   2.255 +   size_t secondHalfSize = Q->endOfData - Q->extractPos + 1;
   2.256 +   memcpy(Q->startOfData,Q->extractPos, secondHalfSize * sizeof(void*));
   2.257 +   //copy first half
   2.258 +   memcpy(Q->startOfData + secondHalfSize, oldStartOfData, 
   2.259 +                        (oldSize-secondHalfSize) * sizeof(void*));
   2.260 +   VMS_int__free(oldStartOfData);
   2.261 +   
   2.262 +   Q->extractPos  = Q->startOfData;
   2.263 +   Q->insertPos   = Q->startOfData + oldSize - 1;
   2.264 +   Q->endOfData   = &(Q->startOfData[newSize - 1]);
   2.265 + }
   2.266 +
   2.267 +
   2.268 +/*Returns NULL when queue is empty
   2.269 + */
   2.270 +void* readPrivQ( PrivQueueStruc* Q )
   2.271 + { void *out    = 0;
   2.272 +   void **startOfData = Q->startOfData;
   2.273 +   void **endOfData   = Q->endOfData;
   2.274 +
   2.275 +   void **insertPos  = Q->insertPos;
   2.276 +   void **extractPos = Q->extractPos;
   2.277 +
   2.278 +      //if not empty -- (extract is just below insert when empty)
   2.279 +   if( insertPos - extractPos != 1 &&
   2.280 +       !(extractPos == endOfData && insertPos == startOfData))
   2.281 +    {    //move before read
   2.282 +      if( extractPos == endOfData ) //write new pos exactly once, correctly
   2.283 +       { Q->extractPos = startOfData; //can't overrun then fix it 'cause
   2.284 +       }                              // other thread might read bad pos
   2.285 +      else
   2.286 +       { Q->extractPos++;
   2.287 +       }
   2.288 +      out = *(Q->extractPos);
   2.289 +      return out;
   2.290 +    }
   2.291 +      //Q is empty
   2.292 +   return NULL;
   2.293 + }
   2.294 +
   2.295 +int32
   2.296 +numInPrivQ( PrivQueueStruc *Q )
   2.297 + { int32 size, numIn;
   2.298 + 
   2.299 +   if( Q->insertPos < Q->extractPos )
   2.300 +    {    //insert has wrapped around so numIn is:
   2.301 +         // insertPos + size - extractPos -- Consider, is empty when
   2.302 +         // extractPos = endOfData and insert = start -- correctly get zero
   2.303 +      size  = Q->endOfData - Q->startOfData;
   2.304 +      numIn = Q->insertPos + size - Q->extractPos;
   2.305 +    }
   2.306 +   else
   2.307 +    {
   2.308 +      numIn =  Q->insertPos -  Q->extractPos -1;//-1 bec empty @ side-by-side
   2.309 +    }
   2.310 +   return numIn;
   2.311 + }
   2.312 +
   2.313 +
   2.314 +/*Expands the queue size automatically when it's full
   2.315 + */
   2.316 +void
   2.317 +writePrivQ( void * in, PrivQueueStruc* Q )
   2.318 + {
   2.319 +   while(1){
   2.320 +       void **startOfData = Q->startOfData;
   2.321 +       void **endOfData   = Q->endOfData;
   2.322 +
   2.323 +       void **insertPos  = Q->insertPos;
   2.324 +       void **extractPos = Q->extractPos;
   2.325 +
   2.326 +          //Full? (insert is just below extract when full)
   2.327 +       if( extractPos - insertPos != 1 &&
   2.328 +           !(insertPos == endOfData && extractPos == startOfData))
   2.329 +        { *(Q->insertPos) = in;   //insert before move
   2.330 +          if( insertPos == endOfData ) //write new pos exactly once, correctly
   2.331 +           { Q->insertPos = startOfData;
   2.332 +           }
   2.333 +          else
   2.334 +           { Q->insertPos++;
   2.335 +           }
   2.336 +          return;
   2.337 +        }
   2.338 +          //Q is full
   2.339 +       enlargePrivQ( Q );
   2.340 +   }
   2.341 + }
   2.342 +
   2.343 +
   2.344 +/*Returns false when the queue was full.
   2.345 + * have option of calling make_larger_PrivQ to make more room, then try again
   2.346 + */
   2.347 +int writeIfSpacePrivQ( void * in, PrivQueueStruc* Q )
   2.348 + {
   2.349 +   void **startOfData = Q->startOfData;
   2.350 +   void **endOfData   = Q->endOfData;
   2.351 +
   2.352 +   void **insertPos  = Q->insertPos;
   2.353 +   void **extractPos = Q->extractPos;
   2.354 +
   2.355 +   if( extractPos - insertPos != 1 &&
   2.356 +       !(insertPos == endOfData && extractPos == startOfData))
   2.357 +    { *(Q->insertPos) = in;   //insert before move
   2.358 +      if( insertPos == endOfData ) //write new pos exactly once, correctly
   2.359 +       { Q->insertPos = startOfData;
   2.360 +       }
   2.361 +      else
   2.362 +       { Q->insertPos++;
   2.363 +       }
   2.364 +      return TRUE;
   2.365 +    }
   2.366 +      //Q is full
   2.367 +   return FALSE;
   2.368 + }
   2.369 +
   2.370 +/*Treats queue as a stack -- no matter contents, if read done right after
   2.371 + * a push, then the pushed item is what comes out.
   2.372 + * Expands the queue size automatically when it's full.
   2.373 + */
   2.374 +void
   2.375 +pushPrivQ( void * in, PrivQueueStruc* Q )
   2.376 + {
   2.377 +   while(1){
   2.378 +       void **startOfData = Q->startOfData;
   2.379 +       void **endOfData   = Q->endOfData;
   2.380 +
   2.381 +       void **insertPos  = Q->insertPos;
   2.382 +       void **extractPos = Q->extractPos;
   2.383 +
   2.384 +          //Full? (insert is just below extract when full)
   2.385 +       if( extractPos - insertPos != 1 &&
   2.386 +           !(insertPos == endOfData && extractPos == startOfData))
   2.387 +        {    //insert -- but go backwards, inserting at read position then
   2.388 +             // move read pos backwards
   2.389 +          *(Q->extractPos) = in;
   2.390 +          if( extractPos == startOfData ) //write new pos exactly once, correctly
   2.391 +           { Q->extractPos = endOfData;   //can't overrun then fix it 'cause
   2.392 +           }                              // other thread might read bad pos
   2.393 +          else
   2.394 +           { Q->extractPos--;
   2.395 +           }
   2.396 +          return;
   2.397 +        }
   2.398 +          //Q is full
   2.399 +       enlargePrivQ( Q );
   2.400 +   }
   2.401 + }
   2.402 +
   2.403 +void
   2.404 +freePrivQ( PrivQueueStruc *Q )
   2.405 + {
   2.406 +   VMS_int__free( Q->startOfData );
   2.407 +   VMS_int__free( Q );
   2.408   }
   2.409 \ No newline at end of file
     3.1 --- a/PrivateQueue.h	Wed Jun 22 18:49:17 2011 +0200
     3.2 +++ b/PrivateQueue.h	Mon Feb 13 19:32:12 2012 +0100
     3.3 @@ -1,38 +1,38 @@
     3.4 -/*
     3.5 - *  Copyright 2009 OpenSourceStewardshipFoundation.org
     3.6 - *  Licensed under GNU General Public License version 2
     3.7 - *
     3.8 - * Author: seanhalle@yahoo.com
     3.9 - */
    3.10 -
    3.11 -#ifndef _PRIVATE_QUEUE_H
    3.12 -#define	_PRIVATE_QUEUE_H
    3.13 -
    3.14 -#include "../VMS_primitive_data_types.h"
    3.15 -
    3.16 -#define TRUE     1
    3.17 -#define FALSE    0
    3.18 -
    3.19 -#define LOCKED   1
    3.20 -#define UNLOCKED 0
    3.21 -
    3.22 -
    3.23 -typedef struct
    3.24 - { void      **insertPos;
    3.25 -   void      **extractPos;
    3.26 -   void      **startOfData;  //data is pointers
    3.27 -   void      **endOfData;    //set when alloc data
    3.28 - }
    3.29 -PrivQueueStruc;
    3.30 -
    3.31 -
    3.32 -PrivQueueStruc*  makeVMSPrivQ ( );
    3.33 -void*            readPrivQ ( PrivQueueStruc *Q );
    3.34 -void             writePrivQ( void *in, PrivQueueStruc *Q );
    3.35 -int32            writeIfSpacePrivQ( void * in, PrivQueueStruc* Q ); //return
    3.36 -                    // false when full
    3.37 -int32            numInPrivQ( PrivQueueStruc *Q );
    3.38 -void             pushPrivQ( void * in, PrivQueueStruc* Q );
    3.39 -
    3.40 -#endif	/* _PRIVATE_QUEUE_H */
    3.41 -
    3.42 +/*
    3.43 + *  Copyright 2009 OpenSourceStewardshipFoundation.org
    3.44 + *  Licensed under GNU General Public License version 2
    3.45 + *
    3.46 + * Author: seanhalle@yahoo.com
    3.47 + */
    3.48 +
    3.49 +#ifndef _PRIVATE_QUEUE_H
    3.50 +#define	_PRIVATE_QUEUE_H
    3.51 +
    3.52 +#include "VMS_Implementations/VMS_impl/VMS_primitive_data_types.h"
    3.53 +
    3.54 +#define TRUE     1
    3.55 +#define FALSE    0
    3.56 +
    3.57 +#define LOCKED   1
    3.58 +#define UNLOCKED 0
    3.59 +
    3.60 +
    3.61 +typedef struct
    3.62 + { void      **insertPos;
    3.63 +   void      **extractPos;
    3.64 +   void      **startOfData;  //data is pointers
    3.65 +   void      **endOfData;    //set when alloc data
    3.66 + }
    3.67 +PrivQueueStruc;
    3.68 +
    3.69 +
    3.70 +PrivQueueStruc*  makePrivQ ( );
    3.71 +void*            readPrivQ ( PrivQueueStruc *Q );
    3.72 +void             writePrivQ( void *in, PrivQueueStruc *Q );
    3.73 +int32            writeIfSpacePrivQ( void * in, PrivQueueStruc* Q ); //return
    3.74 +                    // false when full
    3.75 +int32            numInPrivQ( PrivQueueStruc *Q );
    3.76 +void             pushPrivQ( void * in, PrivQueueStruc* Q );
    3.77 +
    3.78 +#endif	/* _PRIVATE_QUEUE_H */
    3.79 +