changeset 14:9de0a9369134

added eol handling and .brch__default to indicate brch (and reason for it)
author Me@portablequad
date Sat, 11 Feb 2012 17:43:20 -0800
parents f9776626259b
children 596260ad0ede bb1217c5d15b
files .brch__default .hgeol DynArray.c DynArray.h
diffstat 4 files changed, 122 insertions(+), 34 deletions(-) [+]
line diff
     1.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
     1.2 +++ b/.brch__default	Sat Feb 11 17:43:20 2012 -0800
     1.3 @@ -0,0 +1,1 @@
     1.4 +The default branch is for use with normal C code.  Other branches specialize the library for use with VMS..  they may need VMS header files, and the working directory may be located at various different positions relative to the VMS implementation.
     1.5 \ No newline at end of file
     2.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
     2.2 +++ b/.hgeol	Sat Feb 11 17:43:20 2012 -0800
     2.3 @@ -0,0 +1,14 @@
     2.4 +
     2.5 +[patterns]
     2.6 +**.py = native
     2.7 +**.txt = native
     2.8 +**.c = native
     2.9 +**.h = native
    2.10 +**.cpp = native
    2.11 +**.java = native
    2.12 +**.class = bin
    2.13 +**.jar = bin
    2.14 +**.sh = native
    2.15 +**.pl = native
    2.16 +**.jpg = bin
    2.17 +**.gif = bin
     3.1 --- a/DynArray.c	Thu Feb 09 15:44:39 2012 +0100
     3.2 +++ b/DynArray.c	Sat Feb 11 17:43:20 2012 -0800
     3.3 @@ -7,31 +7,49 @@
     3.4  
     3.5  
     3.6  #include <stdio.h>
     3.7 -#include <malloc.h>
     3.8  
     3.9  #include "DynArray.h"
    3.10 +#include "../vmalloc.h"
    3.11  
    3.12 +//== declarations
    3.13 +void
    3.14 +increaseSizeOfDynArrayTo_Ext( PrivDynArrayInfo *info, int32 newSize );
    3.15 +//==
    3.16  
    3.17 +PrivDynArrayInfo *
    3.18 +makePrivDynArrayInfoFrom( void ***addrOfPtrToArray, int32 sizeOfArray )
    3.19 + { PrivDynArrayInfo *info;
    3.20  
    3.21 -DynArrayInfo *
    3.22 -makeDynArrayInfoFrom( void ***addrOfPtrToArray, int32 sizeOfArray )
    3.23 - { DynArrayInfo *info;
    3.24 -
    3.25 -   info = malloc( sizeof(DynArrayInfo) );
    3.26 +   info = malloc( sizeof(PrivDynArrayInfo) );
    3.27  
    3.28     info->addrOfPtrToArray = addrOfPtrToArray;
    3.29     info->sizeOfArray      = sizeOfArray;
    3.30     info->numInArray       = 0;
    3.31 +   return info;
    3.32   }
    3.33  
    3.34 -DynArrayInfo *
    3.35 -makeDynArrayOfSize( void ***addrOfPtrToArray, int32 sizeOfArray )
    3.36 - { DynArrayInfo *info;
    3.37 +PrivDynArrayInfo *
    3.38 +makePrivDynArrayOfSize( void ***addrOfPtrToArray, int32 sizeOfArray )
    3.39 + { PrivDynArrayInfo *info;
    3.40  
    3.41 -   info = malloc( sizeof(DynArrayInfo) );
    3.42 +   info = malloc( sizeof(PrivDynArrayInfo) );
    3.43  
    3.44     info->addrOfPtrToArray = addrOfPtrToArray;
    3.45 -   
    3.46 +
    3.47 +   *(addrOfPtrToArray)    = malloc( sizeOfArray * sizeof(void *) );
    3.48 +   info->sizeOfArray      = sizeOfArray;
    3.49 +   info->numInArray       = 0;
    3.50 +   return info;
    3.51 + }
    3.52 +
    3.53 +PrivDynArrayInfo *
    3.54 +makePrivDynArrayOfSize_Ext( void ***addrOfPtrToArray, int32 sizeOfArray )
    3.55 + { PrivDynArrayInfo *info;
    3.56 +
    3.57 +   info = malloc( sizeof(PrivDynArrayInfo) );
    3.58 +
    3.59 +   info->addrOfPtrToArray = addrOfPtrToArray;
    3.60 +
    3.61     *(addrOfPtrToArray)    = malloc( sizeOfArray * sizeof(void *) );
    3.62     info->sizeOfArray      = sizeOfArray;
    3.63     info->numInArray       = 0;
    3.64 @@ -47,10 +65,10 @@
    3.65   *Only need to use this Fn when need a new index, higher than any previous
    3.66   */
    3.67  int32
    3.68 -addToDynArray( void *value, DynArrayInfo *info )
    3.69 +addToDynArray( void *value, PrivDynArrayInfo *info )
    3.70   { int32 numInArray, sizeOfArray;
    3.71     void **array;
    3.72 - 
    3.73 +
    3.74     numInArray = info->numInArray;
    3.75     sizeOfArray    = info->sizeOfArray;
    3.76  
    3.77 @@ -58,7 +76,26 @@
    3.78      {
    3.79        increaseSizeOfDynArrayTo( info, sizeOfArray * 2 );
    3.80      }
    3.81 -   
    3.82 +
    3.83 +   array = *(info->addrOfPtrToArray);
    3.84 +   array[ numInArray ] = value;
    3.85 +   info->numInArray++;
    3.86 +
    3.87 +   return numInArray; //pre-incr value is the index put value into
    3.88 + }
    3.89 +int32
    3.90 +addToDynArray_Ext( void *value, PrivDynArrayInfo *info )
    3.91 + { int32 numInArray, sizeOfArray;
    3.92 +   void **array;
    3.93 +
    3.94 +   numInArray = info->numInArray;
    3.95 +   sizeOfArray    = info->sizeOfArray;
    3.96 +
    3.97 +   if( numInArray >= sizeOfArray )
    3.98 +    {
    3.99 +      increaseSizeOfDynArrayTo_Ext( info, sizeOfArray * 2 );
   3.100 +    }
   3.101 +
   3.102     array = *(info->addrOfPtrToArray);
   3.103     array[ numInArray ] = value;
   3.104     info->numInArray++;
   3.105 @@ -75,7 +112,7 @@
   3.106   * exponentially increase size..
   3.107   */
   3.108  void
   3.109 -makeHighestDynArrayIndexBe( DynArrayInfo *info, int32 highestIndex )
   3.110 +makeHighestDynArrayIndexBe( PrivDynArrayInfo *info, int32 highestIndex )
   3.111   {
   3.112     if( info->sizeOfArray <= highestIndex )
   3.113      {
   3.114 @@ -84,17 +121,24 @@
   3.115     info->numInArray = highestIndex + 1;
   3.116   }
   3.117  
   3.118 +void
   3.119 +makeHighestDynArrayIndexBeAtLeast(PrivDynArrayInfo *info, int32 index)
   3.120 + {
   3.121 +   if( index < info->numInArray ) return;
   3.122 +   else makeHighestDynArrayIndexBe( info, index );
   3.123 + }
   3.124 +
   3.125  
   3.126  /*Only use this if certain new size is bigger than current size
   3.127   */
   3.128  void
   3.129 -increaseSizeOfDynArrayTo( DynArrayInfo *info, int32 newSize )
   3.130 +increaseSizeOfDynArrayTo( PrivDynArrayInfo *info, int32 newSize )
   3.131   { int32 oldSizeOfArray, i;
   3.132     void **newArray, **oldArray;
   3.133 - 
   3.134 +
   3.135     oldSizeOfArray   = info->sizeOfArray;
   3.136     if( newSize <= oldSizeOfArray ) return;
   3.137 -   
   3.138 +
   3.139     oldArray         = *(info->addrOfPtrToArray);
   3.140     newArray         = malloc( newSize * sizeof(void *) );
   3.141  
   3.142 @@ -108,11 +152,36 @@
   3.143     free( oldArray );
   3.144   }
   3.145  
   3.146 +/*Can't mix malloc locations with external malloc locations -- so use
   3.147 + * this version inside VMS, which will perform normal malloc in the core
   3.148 + * loop -- hopefully avoiding the annoying system-stack bugs..
   3.149 + */
   3.150 +void
   3.151 +increaseSizeOfDynArrayTo_Ext( PrivDynArrayInfo *info, int32 newSize )
   3.152 + { int32 oldSizeOfArray, i;
   3.153 +   void **newArray, **oldArray;
   3.154 +
   3.155 +   oldSizeOfArray   = info->sizeOfArray;
   3.156 +   if( newSize <= oldSizeOfArray ) return;
   3.157 +
   3.158 +   oldArray         = *(info->addrOfPtrToArray);
   3.159 +   newArray         = malloc( newSize * sizeof(void *) );
   3.160 +
   3.161 +   for( i = 0; i < oldSizeOfArray; i++ )
   3.162 +    {
   3.163 +      newArray[i] = oldArray[i];
   3.164 +    }
   3.165 +   *(info->addrOfPtrToArray) = newArray; //change location of array-ptr
   3.166 +   info->sizeOfArray = newSize;
   3.167 +
   3.168 +   free( oldArray );
   3.169 + }
   3.170 +
   3.171  
   3.172  /* Frees the array, plus the info
   3.173   */
   3.174  void
   3.175 -freeDynArrayDeep( DynArrayInfo *info, FreeFnPtr freeFnPtr )
   3.176 +freeDynArrayDeep( PrivDynArrayInfo *info, FreeFnPtr freeFnPtr )
   3.177   {
   3.178     forAllInDynArrayDo( info, freeFnPtr );
   3.179     free( *(info->addrOfPtrToArray) );
   3.180 @@ -122,7 +191,7 @@
   3.181  /* Only frees the info
   3.182   */
   3.183  void
   3.184 -freeDynArrayFlat( DynArrayInfo *info )
   3.185 +freeDynArrayFlat( PrivDynArrayInfo *info )
   3.186   {
   3.187     free( info );
   3.188   }
   3.189 @@ -132,7 +201,7 @@
   3.190   * So, the function has to internally cast void * to whatever data struc..
   3.191   */
   3.192  void
   3.193 -forAllInDynArrayDo( DynArrayInfo *info, DynArrayFnPtr fnPtr )
   3.194 +forAllInDynArrayDo( PrivDynArrayInfo *info, DynArrayFnPtr fnPtr )
   3.195   { int32 idx;
   3.196     void **array;
   3.197  
     4.1 --- a/DynArray.h	Thu Feb 09 15:44:39 2012 +0100
     4.2 +++ b/DynArray.h	Sat Feb 11 17:43:20 2012 -0800
     4.3 @@ -8,8 +8,6 @@
     4.4  #ifndef _DYNARRAY_H
     4.5  #define	_DYNARRAY_H
     4.6  
     4.7 -#include "../../VMS_Implementations/VMS_impl/VMS_primitive_data_types.h"
     4.8 -
     4.9  
    4.10     //A dynamic array is same as any other array, but add a DynArrayInfo next
    4.11     // to it.  Accesses and updates of array indexes are done normally, it's
    4.12 @@ -22,36 +20,42 @@
    4.13     int32   numInArray;
    4.14     int32   sizeOfArray;
    4.15   }
    4.16 -DynArrayInfo;
    4.17 +PrivDynArrayInfo;
    4.18  
    4.19 -DynArrayInfo *
    4.20 -makeDynArrayInfoFrom( void ***addrOfPtrToArray, int32 sizeOfArray );
    4.21 +PrivDynArrayInfo *
    4.22 +makePrivDynArrayInfoFrom( void ***addrOfPtrToArray, int32 sizeOfArray );
    4.23  
    4.24 -DynArrayInfo *
    4.25 -makeDynArrayOfSize( void ***addrOfPtrToArray, int32 sizeOfArray );
    4.26 +PrivDynArrayInfo *
    4.27 +makePrivDynArrayOfSize( void ***addrOfPtrToArray, int32 sizeOfArray );
    4.28 +
    4.29 +PrivDynArrayInfo *
    4.30 +makePrivDynArrayOfSize_Ext( void ***addrOfPtrToArray, int32 sizeOfArray );
    4.31  
    4.32  int32
    4.33 -addToDynArray( void *value, DynArrayInfo *info );
    4.34 +addToDynArray( void *value, PrivDynArrayInfo *info );
    4.35  
    4.36  void
    4.37 -makeHighestDynArrayIndexBe( DynArrayInfo *info, int32 highestIndex );
    4.38 +makeHighestDynArrayIndexBe( PrivDynArrayInfo *info, int32 highestIndex );
    4.39  
    4.40  void
    4.41 -increaseSizeOfDynArrayTo( DynArrayInfo *info, int32 newSize );
    4.42 +makeHighestDynArrayIndexBeAtLeast(PrivDynArrayInfo *info,int32 highestIndex);
    4.43 +
    4.44 +void
    4.45 +increaseSizeOfDynArrayTo( PrivDynArrayInfo *info, int32 newSize );
    4.46  
    4.47  typedef void  (*FreeFnPtr)  ( void * ); //fn has to cast void * to whatever
    4.48  
    4.49  void
    4.50 -freeDynArrayDeep( DynArrayInfo *info, FreeFnPtr freeFnPtr );
    4.51 +freeDynArrayDeep( PrivDynArrayInfo *info, FreeFnPtr freeFnPtr );
    4.52  
    4.53  void
    4.54 -freeDynArrayFlat( DynArrayInfo *info );
    4.55 +freeDynArrayFlat( PrivDynArrayInfo *info );
    4.56  
    4.57  
    4.58  typedef void  (*DynArrayFnPtr)  ( void * );  //fn has to cast void *
    4.59  
    4.60  void
    4.61 -forAllInDynArrayDo( DynArrayInfo *info, DynArrayFnPtr fnPtr );
    4.62 +forAllInDynArrayDo( PrivDynArrayInfo *info, DynArrayFnPtr fnPtr );
    4.63  
    4.64  #endif	/* _DYNARRAY_H */
    4.65