#ifndef NERV_GENERIC_MATRIX_H #define NERV_GENERIC_MATRIX_H #include #include typedef struct Matrix { size_t stride; /* size of a row */ long ncol, nrow, nmax; /* dimension of the matrix */ int dim; /* dim == 2 for a matrix, dim == 1 for row vector */ union { float *f; double *d; long *i; } data; /* pointer to actual storage */ unsigned long offset; /* the actual beginning of the matrix */ long *data_ref; curandGenerator_t *curand_gen; } Matrix; #define MATRIX_ROW_PTR(self, row) \ (MATRIX_ELEM *)((char *)MATRIX_ELEM_PTR(self) + (row) * (self)->stride) #define MATRIX_NEXT_ROW_PTR(self, stride) \ (MATRIX_ELEM *)((char *)self + stride) #endif