Browse Source

Fixed struct array init issues.
Requires bcc 0.105.

woollybah 6 years ago
parent
commit
8a0fe4ab72
3 changed files with 21 additions and 11 deletions
  1. 16 8
      blitz.mod/blitz_array.c
  2. 4 2
      blitz.mod/blitz_array.h
  3. 1 1
      blitz.mod/blitz_enum.c

+ 16 - 8
blitz.mod/blitz_array.c

@@ -141,7 +141,7 @@ static void *arrayInitializer( BBArray *arr ){
 	return 0;
 }
 
-static void initializeArray( BBArray *arr ){
+static void initializeArray( BBArray *arr, BBArrayStructInit structInit ){
 	void *init,**p;
 	
 	if( !arr->size ) return;
@@ -154,6 +154,14 @@ static void initializeArray( BBArray *arr ){
 		for( k=arr->scales[0];k>0;--k ) *p++=init;
 	}else{
 		memset( p,0,arr->size );
+		if (structInit) {
+			int k;
+			char * s = p;
+			for( k=arr->scales[0];k>0;--k ) {
+				structInit(s);
+				s += arr->data_size;
+			}
+		}
 	}
 }
 
@@ -179,12 +187,12 @@ BBArray *bbArrayNew( const char *type,int dims,... ){
 
 	BBArray *arr=allocateArray( type,dims, &lens, 0 );
 	
-	initializeArray( arr );
+	initializeArray( arr, 0 );
 	
 	return arr;
 }
 
-BBArray *bbArrayNewStruct( const char *type, unsigned short data_size, int dims, ... ){
+BBArray *bbArrayNewStruct( const char *type, unsigned short data_size, BBArrayStructInit init, int dims, ... ){
 
 	int lens[256];
 
@@ -200,7 +208,7 @@ BBArray *bbArrayNewStruct( const char *type, unsigned short data_size, int dims,
 
 	BBArray *arr=allocateArray( type,dims, &lens, data_size );
 	
-	initializeArray( arr );
+	initializeArray( arr, init );
 	
 	return arr;
 }
@@ -209,7 +217,7 @@ BBArray *bbArrayNewEx( const char *type,int dims,int *lens ){
 
 	BBArray *arr=allocateArray( type,dims,lens,0 );
 	
-	initializeArray( arr );
+	initializeArray( arr, 0 );
 	
 	return arr;
 }
@@ -218,16 +226,16 @@ BBArray *bbArrayNew1D( const char *type,int length ){
 
 	BBArray *arr=allocateArray( type,1,&length, 0 );
 	
-	initializeArray( arr );
+	initializeArray( arr, 0 );
 	
 	return arr;
 }
 
-BBArray *bbArrayNew1DStruct( const char *type,int length, unsigned short data_size ){
+BBArray *bbArrayNew1DStruct( const char *type,int length, unsigned short data_size, BBArrayStructInit init ){
 
 	BBArray *arr=allocateArray( type,1,&length, data_size );
 	
-	initializeArray( arr );
+	initializeArray( arr, init );
 	
 	return arr;
 }

+ 4 - 2
blitz.mod/blitz_array.h

@@ -46,8 +46,10 @@ BBArray*	bbArrayConcat( const char *type,BBArray *x,BBArray *y );
 
 void*	bbArrayIndex( BBArray *, int, int );
 
-BBArray*	bbArrayNew1DStruct( const char *type,int length, unsigned short data_size );
-BBArray*	bbArrayNewStruct( const char *type,unsigned short data_size, int dims, ... );
+typedef void (*BBArrayStructInit)(void * ref);
+
+BBArray*	bbArrayNew1DStruct( const char *type,int length, unsigned short data_size, BBArrayStructInit init );
+BBArray*	bbArrayNewStruct( const char *type,unsigned short data_size, BBArrayStructInit init, int dims, ... );
 BBArray*	bbArrayFromDataStruct( const char *type,int length,void *data, unsigned short data_size );
 
 void bbArrayCopy(BBArray * srcArr, int srcPos, BBArray * dstArr, int dstPos, int length);

+ 1 - 1
blitz.mod/blitz_enum.c

@@ -16,7 +16,7 @@ BBArray * bbEnumValues(BBEnum * bbEnum) {
 		case 'z':size=sizeof(BBSIZET);break;
 	}
 
-	values = bbArrayNew1DStruct(bbEnum->atype, bbEnum->length, size);
+	values = bbArrayNew1DStruct(bbEnum->atype, bbEnum->length, size, 0);
 
 	char * p = BBARRAYDATA(values, 0);