blob: 4d5af5ae443d0dbec6046233d2b217b8ec3bddb9 [file] [log] [blame]
#ifndef MATRIX
#define MATRIX
void __matrix_check (void **matrix);
cass_size_t __matrix_col (void **matrix, cass_size_t size);
cass_size_t __matrix_row (void **matrix);
void **__array2matrix (cass_size_t row, cass_size_t col, cass_size_t size, void *data);
void *__matrix2array (void **); /* free the matrix index structure */
void **__matrix_alloc (cass_size_t row, cass_size_t col, cass_size_t size);
void ***__matrix3_alloc (cass_size_t num, cass_size_t row, cass_size_t col, cass_size_t size);
void **__matrix_dup (cass_size_t row, cass_size_t col, cass_size_t size, void **data);
void __matrix_free (void **data);
void __matrix3_free (void ***data);
int matrix_load_stream_compat (CASS_FILE *fin, cass_size_t size, cass_size_t *row, cass_size_t *col, void ***matrix);
int matrix_load_stream_x (CASS_FILE *fin, cass_size_t *size, cass_size_t *row, cass_size_t *col, void ***matrix, cass_size_t nrow);
int matrix_load_stream (CASS_FILE *fin, cass_size_t *size, cass_size_t *row, cass_size_t *col, void ***matrix);
int matrix_dump_stream (CASS_FILE *fout, cass_size_t size, cass_size_t row, cass_size_t col, void **matrix);
int matrix_load_file_head (const char *filename, cass_size_t *size, cass_size_t *row, cass_size_t *col);
int matrix_load_file (const char *filename, cass_size_t *size, cass_size_t *row, cass_size_t *col, void ***matrix);
int matrix_dump_file (const char *filename, cass_size_t size, cass_size_t row, cass_size_t col, void **matrix);
/* read only */
int matrix_map_file (const char *filename, cass_size_t *size, cass_size_t *row, cass_size_t *col, void ***matrix);
int matrix_unmap_file (void **matrix);
#define type_alloc(type) ((type*)malloc(sizeof(type)))
#define type_calloc(type,col) ((type*)calloc(sizeof(type), col))
#define type_realloc(type,ptr, col) ((type*)realloc(ptr, sizeof(type)*col))
#define matrix_check(matrix) __matrix_check((void **)matrix)
#define type_matrix_row(matrix,type) __matrix_row((void **)matrix)
#define type_matrix_col(matrix,type) __matrix_col((void **)matrix, sizeof(type))
#define type_array2matrix(type,row,col,data) (type**)__array2matrix(row,col,sizeof (type), (void*)data)
#define type_matrix2array(type,data) (type *)__matrix2array((void **)data)
#define type_matrix_data(type,data) (((type **)data)[0])
#define type_matrix_alloc(type,row,col) (type **)__matrix_alloc(row, col, sizeof (type))
#define type_matrix3_alloc(type,num,row,col) (type ***)__matrix3_alloc(num,row,col, sizeof (type))
#define type_matrix_dup(type,row,col,data) (type**)__matrix_dup(row, col, sizeof (type), (void *)data)
#define matrix_free(data) __matrix_free((void **)data)
#define matrix3_free(data) __matrix3_free((void ***)data)
#define matrix_free_index(data) free((void *)data)
#define type_matrix_load_stream(type,fin,row,col,matrix) \
do { \
cass_size_t ___size; \
void **___p; \
matrix_load_stream(fin,&___size,row,col, &___p); \
assert(___size == sizeof(type)); \
*matrix = ___p; \
} while (0)
#define type_matrix_load_stream_x(type,fin,row,col,matrix,cnt) \
do { \
cass_size_t ___size; \
void **___p; \
matrix_load_stream_x(fin,&___size,row,col,&___P,cnt); \
assert(___size == sizeof(type)); \
*matrix = ___p; \
} while (0)
#define type_matrix_dump_stream(type,fout,row,col,matrix) \
matrix_dump_stream(fout,sizeof(type),row,col,(void **)matrix)
#define type_matrix_load_file(type,fin,row,col,matrix) \
do { \
cass_size_t ___size; \
void **___p; \
matrix_load_file(fin,&___size,row,col, &___p); \
assert(___size == sizeof(type)); \
*matrix = ___p; \
} while (0)
#define type_matrix_map_file(type,fin,row,col,matrix) \
do { \
cass_size_t ___size; \
void **___p; \
matrix_map_file(fin,&___size,row,col,&___p); \
assert(___size == sizeof(type)); \
*matrix = ___p; \
} while (0)
#define type_matrix_dump_file(type,fout,row,col,matrix) \
matrix_dump_file(fout,sizeof(type),row,col,(void **)matrix)
#endif