# include "ppc_xmalloc.h" # define make_vector(v,n) ((v)=xmalloc((n)*sizeof*(v))) # define print_vector(fmt,v,n) do { \ size_t print_vector_loop_counter; \ for ( print_vector_loop_counter = 0; \ print_vector_loop_counter < ( n ); \ print_vector_loop_counter++ ) \ { \ printf ( fmt, (v)[print_vector_loop_counter] ); \ putchar ( '\n' ); \ } \ } while (0) # define free_vector(v) do { free(v); v = NULL; } while (0) # define make_matrix(a,m,n) do { \ size_t make_matrix_loop_counter; \ make_vector ( a, (m) + 1 ); \ for ( make_matrix_loop_counter = 0; \ make_matrix_loop_counter < ( m ); \ make_matrix_loop_counter++ ) \ make_vector((a)[make_matrix_loop_counter], (n) ); \ (a)[m] = NULL; \ } while (0) # define print_matrix(fmt,a,m,n) do { \ size_t print_matrix_loop_counter_i; \ size_t print_matrix_loop_counter_j; \ for ( print_matrix_loop_counter_i = 0; \ print_matrix_loop_counter_i < ( m ); \ print_matrix_loop_counter_i++ ) \ { \ for ( print_matrix_loop_counter_j = 0; \ print_matrix_loop_counter_j < ( n ); \ print_matrix_loop_counter_j++ ) \ { \ printf ( fmt, (a)[print_matrix_loop_counter_i][print_matrix_loop_counter_j] ); \ } \ putchar ( '\n' ); \ } \ } while (0) # define free_matrix(a) do { \ if (a) \ { \ size_t make_matrix_loop_counter; \ for ( make_matrix_loop_counter = 0; \ (a)[make_matrix_loop_counter]; \ make_matrix_loop_counter++ ) \ free_vector((a)[make_matrix_loop_counter] ); \ free_vector(a); \ a = NULL; \ } \ } while ( 0 ) void free_matrix_double ( double **a ); void free_matrix_float ( float **a ); void free_matrix_int ( int **a ); void free_vector_int ( int *a ); double **make_matrix_double ( size_t m, size_t n ); float **make_matrix_float ( size_t m, size_t n ); int **make_matrix_int ( size_t m, size_t n ); int *make_vector_int ( size_t n );