blob: d88e79f35249824059e06ddf7870429ef0367aa5 [file] [log] [blame]
#include <stdio.h>
#include <stddef.h>
#include <stdlib.h>
#include <string.h>
#include "mtxutl.h"
void MtxuntDouble( double **mtx, int n )
{
int i, j;
for( i=0; i<n; i++ ) for( j=0; j<n; j++ ) mtx[i][j] = 0.0;
for( i=0; i<n; i++ ) mtx[i][i] = 1.0;
}
void MtxmltDouble( double **mtx1, double **mtx2, int n )
{
int i, j, k;
double s, *tmp;
tmp = (double *)calloc( n, sizeof( double ) );
for( i=0; i<n; i++ )
{
for( k=0; k<n; k++ ) tmp[k] = mtx1[i][k];
for( j=0; j<n; j++ )
{
s = 0.0;
for( k=0; k<n; k++ ) s += tmp[k] * mtx2[k][j];
mtx1[i][j] = s;
}
}
free( tmp );
}
char *AllocateCharVec( int l1 )
{
char *cvec;
cvec = (char *)calloc( l1, sizeof( char ) );
if( cvec == NULL )
{
fprintf( stderr, "Cannot allocate %d character vector.\n", l1 );
exit( 1 );
}
return( cvec );
}
#if 0
void ReallocateCharMtx( char **mtx, int l1, int l2 )
{
int i;
char *bk = (char *)malloc( l2+1 ); // hontou ha iranai
if( bk == NULL )
{
fprintf( stderr, "Cannot allocate bk in ReallocateCharMtx\n" );
exit( 1 );
}
for( i=0; i<l1; i++ )
{
#if 1
strcpy( bk, mtx[i] );
mtx[i] = (char *)realloc( mtx[i], (l2+1) * sizeof( char ) );
if( mtx[i] == NULL )
{
fprintf( stderr, "Cannot reallocate %d x %d character matrix.\n", l1, l2 );
}
if( strcmp( bk, mtx[i] ) ) // hontou ha iranai
{
fprintf( stderr, "changed!! \n%s\n \nto\n%s\n in realloc..\n", bk, mtx[i] );
strcpy( mtx[i], bk );
}
#else
strcpy( bk, mtx[i] );
free( mtx[i] );
mtx[i] = (char *)calloc( (l2+1), sizeof( char ) );
strcpy( mtx[i], bk );
#endif
}
free( bk ); // hontou ha iranai
}
#else
void ReallocateCharMtx( char **mtx, int l1, int l2 )
{
int i;
for( i=0; i<l1; i++ )
{
mtx[i] = (char *)realloc( mtx[i], (l2+1) * sizeof( char ) );
if( mtx[i] == NULL )
{
fprintf( stderr, "Cannot reallocate %d x %d character matrix.\n", l1, l2 );
}
}
}
#endif
char **AllocateCharMtx( int l1, int l2 )
{
int i;
char **cmtx;
cmtx = (char **)calloc( l1+1, sizeof( char * ) );
if( cmtx == NULL )
{
fprintf( stderr, "Cannot allocate %d x %d character matrix.\n", l1, l2 );
exit( 1 );
}
if( l2 )
{
for( i=0; i<l1; i++ )
{
cmtx[i] = AllocateCharVec( l2 );
}
}
cmtx[l1] = NULL;
return( cmtx );
}
void FreeCharMtx( char **mtx )
{
/*
char **x;
x = mtx;
while( *x != NULL ) free( *x++ );
free( mtx );
*/
int i;
for( i=0; mtx[i]; i++ )
{
free( mtx[i] );
}
free( mtx );
}
float *AllocateFloatVec( int l1 )
{
float *vec;
vec = (float *)calloc( (unsigned int)l1, sizeof( float ) );
if( vec == NULL )
{
fprintf( stderr, "Allocation error ( %d fload vec )\n", l1 );
exit( 1 );
}
return( vec );
}
void FreeFloatVec( float *vec )
{
free( (char *)vec );
}
float **AllocateFloatHalfMtx( int ll1 )
{
float **mtx;
int i;
mtx = (float **)calloc( (unsigned int)ll1+1, sizeof( float * ) );
if( mtx == NULL )
{
fprintf( stderr, "Allocation error ( %d fload halfmtx )\n", ll1 );
exit( 1 );
}
for( i=0; i<ll1; i++ )
{
mtx[i] = (float *)calloc( ll1-i, sizeof( float ) );
if( !mtx[i] )
{
fprintf( stderr, "Allocation error( %d floathalfmtx )\n", ll1 );
exit( 1 );
}
}
mtx[ll1] = NULL;
return( mtx );
}
float **AllocateFloatMtx( int ll1, int ll2 )
{
float **mtx;
int i;
mtx = (float **)calloc( (unsigned int)ll1+1, sizeof( float * ) );
if( mtx == NULL )
{
fprintf( stderr, "Allocation error ( %d x %d fload mtx )\n", ll1, ll2 );
exit( 1 );
}
if( ll2 )
{
for( i=0; i<ll1; i++ )
{
mtx[i] = (float *)calloc( ll2, sizeof( float ) );
if( !mtx[i] )
{
fprintf( stderr, "Allocation error( %d x %d floatmtx )\n", ll1, ll2 );
exit( 1 );
}
}
}
mtx[ll1] = NULL;
return( mtx );
}
void FreeFloatHalfMtx( float **mtx, int n )
{
int i;
for( i=0; i<n; i++ )
{
if( mtx[i] ) FreeFloatVec( mtx[i] );
}
free( mtx );
}
void FreeFloatMtx( float **mtx )
{
int i;
for( i=0; mtx[i]; i++ )
{
FreeFloatVec( mtx[i] );
}
free( mtx );
}
int *AllocateIntVec( int ll1 )
{
int *vec;
vec = (int *)calloc( ll1, sizeof( int ) );
if( vec == NULL )
{
fprintf( stderr, "Allocation error( %d int vec )\n", ll1 );
exit( 1 );
}
return( vec );
}
void FreeIntVec( int *vec )
{
free( (char *)vec );
}
float **AllocateFloatTri( int ll1 )
{
float **tri;
int i;
tri = (float **)calloc( (unsigned int)ll1+1, sizeof( float * ) );
if( !tri )
{
fprintf( stderr, "Allocation error ( float tri )\n" );
exit( 1 );
}
for( i=0; i<ll1; i++ )
{
tri[i] = AllocateFloatVec( i+3 );
}
tri[ll1] = NULL;
return( tri );
}
void FreeFloatTri( float **tri )
{
/*
float **x;
x = tri;
while( *tri != NULL ) free( *tri++ );
free( x );
*/
int i;
for( i=0; tri[i]; i++ )
free( tri[i] );
free( tri );
}
int **AllocateIntMtx( int ll1, int ll2 )
{
int i;
int **mtx;
mtx = (int **)calloc( ll1+1, sizeof( int * ) );
if( !mtx )
{
fprintf( stderr, "Allocation error( %d x %d int mtx )\n", ll1, ll2 );
exit( 1 );
}
if( ll2 )
{
for( i=0; i<ll1; i++ )
{
mtx[i] = AllocateIntVec( ll2 );
}
}
mtx[ll1] = NULL;
return( mtx );
}
/*
void FreeIntMtx( int **mtx )
{
*
int **x;
x = mtx;
while( !*mtx ) free( *mtx++ );
free( x );
*
int i;
for( i=0; mtx[i] != NULL; i++ )
free( (char *)mtx[i] );
free( (char *)mtx );
}
*/
char ***AllocateCharCub( int ll1, int ll2, int ll3 )
{
int i;
char ***cub;
cub = (char ***)calloc( ll1+1, sizeof( char ** ) );
if( !cub )
{
fprintf( stderr, "Allocation error( %d x %d x %d char cube\n", ll1, ll2, ll3 );
exit( 1 );
}
if( ll2 )
{
for( i=0; i<ll1; i++ )
{
cub[i] = AllocateCharMtx( ll2, ll3 );
}
}
cub[ll1] = NULL;
return( cub );
}
void FreeCharCub( char ***cub )
{
int i;
for( i=0; cub[i]; i++ )
{
FreeCharMtx( cub[i] );
}
free( cub );
}
void freeintmtx( int **mtx, int ll1, int ll2 )
{
int i;
for( i=0; i<ll1; i++ )
free( (char *)mtx[i] );
free( (char *)mtx );
}
void FreeIntMtx( int **mtx )
{
int i;
for( i=0; mtx[i]; i++ )
free( (char *)mtx[i] );
free( (char *)mtx );
}
char ****AllocateCharHcu( int ll1, int ll2, int ll3, int ll4 )
{
int i;
char ****hcu;
hcu = (char ****)calloc( ll1+1, sizeof( char *** ) );
if( hcu == NULL ) exit( 1 );
for( i=0; i<ll1; i++ )
hcu[i] = AllocateCharCub( ll2, ll3, ll4 );
hcu[ll1] = NULL;
return( hcu );
}
void FreeCharHcu( char ****hcu )
{
int i;
for( i=0; hcu[i]; i++ )
{
FreeCharCub( hcu[i] );
}
free ( (char *)hcu );
}
double *AllocateDoubleVec( int ll1 )
{
double *vec;
vec = (double *)calloc( ll1, sizeof( double ) );
return( vec );
}
void FreeDoubleVec( double *vec )
{
free( vec );
}
int ***AllocateIntCub( int ll1, int ll2, int ll3 )
{
int i;
int ***cub;
cub = (int ***)calloc( ll1+1, sizeof( int ** ) );
if( cub == NULL )
{
fprintf( stderr, "cannot allocate IntCub\n" );
exit( 1 );
}
for( i=0; i<ll1; i++ )
cub[i] = AllocateIntMtx( ll2, ll3 );
cub[ll1] = NULL;
return cub;
}
void FreeIntCub( int ***cub )
{
int i;
for( i=0; cub[i]; i++ )
{
FreeIntMtx( cub[i] );
}
free( cub );
}
double **AllocateDoubleMtx( int ll1, int ll2 )
{
int i;
double **mtx;
mtx = (double **)calloc( ll1+1, sizeof( double * ) );
if( !mtx )
{
fprintf( stderr, "cannot allocate DoubleMtx\n" );
exit( 1 );
}
if( ll2 )
{
for( i=0; i<ll1; i++ )
mtx[i] = AllocateDoubleVec( ll2 );
}
mtx[ll1] = NULL;
return mtx;
}
void FreeDoubleMtx( double **mtx )
{
int i;
for( i=0; mtx[i]; i++ )
FreeDoubleVec( mtx[i] );
free( mtx );
}
float ***AllocateFloatCub( int ll1, int ll2, int ll3 )
{
int i;
float ***cub;
cub = (float ***)calloc( ll1+1, sizeof( float ** ) );
if( !cub )
{
fprintf( stderr, "cannot allocate float cube.\n" );
exit( 1 );
}
for( i=0; i<ll1; i++ )
{
cub[i] = AllocateFloatMtx( ll2, ll3 );
}
cub[ll1] = NULL;
return( cub );
}
void FreeFloatCub( float ***cub )
{
int i;
for( i=0; cub[i]; i++ )
{
FreeFloatMtx( cub[i] );
}
free( cub );
}
double ***AllocateDoubleCub( int ll1, int ll2, int ll3 )
{
int i;
double ***cub;
cub = (double ***)calloc( ll1+1, sizeof( double ** ) );
if( !cub )
{
fprintf( stderr, "cannot allocate double cube.\n" );
exit( 1 );
}
for( i=0; i<ll1; i++ )
{
cub[i] = AllocateDoubleMtx( ll2, ll3 );
}
cub[ll1] = NULL;
return( cub );
}
void FreeDoubleCub( double ***cub )
{
int i;
for( i=0; cub[i]; i++ )
{
FreeDoubleMtx( cub[i] );
}
free( cub );
}
short *AllocateShortVec( int ll1 )
{
short *vec;
vec = (short *)calloc( ll1, sizeof( short ) );
if( vec == NULL )
{
fprintf( stderr, "Allocation error( %d short vec )\n", ll1 );
exit( 1 );
}
return( vec );
}
void FreeShortVec( short *vec )
{
free( (char *)vec );
}
short **AllocateShortMtx( int ll1, int ll2 )
{
int i;
short **mtx;
mtx = (short **)calloc( ll1+1, sizeof( short * ) );
if( !mtx )
{
fprintf( stderr, "Allocation error( %d x %d short mtx ) \n", ll1, ll2 );
exit( 1 );
}
for( i=0; i<ll1; i++ )
{
mtx[i] = AllocateShortVec( ll2 );
}
mtx[ll1] = NULL;
return( mtx );
}
void FreeShortMtx( short **mtx )
{
int i;
for( i=0; mtx[i]; i++ )
free( (char *)mtx[i] );
free( (char *)mtx );
}