1 /* Simple matrix operations. 2 * 3 * Compare: 4 * esl_vectorops: simple vector operations. 5 * esl_dmatrix: matrix algebra, double precision 6 * 7 * Note: 8 * We deliberately don't use <const> qualifiers on input matrices. 9 * The rules in C for using const qualifiers on nested pointers (like 10 * <int **foo>) are arcane and unhelpful. 11 */ 12 #ifndef eslMATRIXOPS_INCLUDED 13 #define eslMATRIXOPS_INCLUDED 14 #include "esl_config.h" 15 16 extern double **esl_mat_DCreate(int M, int N); 17 extern float **esl_mat_FCreate(int M, int N); 18 extern int **esl_mat_ICreate(int M, int N); 19 extern char **esl_mat_CCreate(int M, int N); 20 21 extern double **esl_mat_DClone(double **A, int M, int N); 22 extern float **esl_mat_FClone(float **A, int M, int N); 23 extern int **esl_mat_IClone(int **A, int M, int N); 24 25 extern int esl_mat_DGrowTo(double ***ret_A, int M, int N); 26 extern int esl_mat_FGrowTo(float ***ret_A, int M, int N); 27 extern int esl_mat_IGrowTo(int ***ret_A, int M, int N); 28 extern int esl_mat_CGrowTo(char ***ret_A, int M, int N); 29 30 extern size_t esl_mat_DSizeof(int M, int N); 31 extern size_t esl_mat_FSizeof(int M, int N); 32 extern size_t esl_mat_ISizeof(int M, int N); 33 extern size_t esl_mat_CSizeof(int M, int N); 34 35 extern void esl_mat_DSet(double **A, int M, int N, double value); 36 extern void esl_mat_FSet(float **A, int M, int N, float value); 37 extern void esl_mat_ISet(int **A, int M, int N, int value); 38 39 extern void esl_mat_DScale(double **A, int M, int N, double x); 40 extern void esl_mat_FScale(float **A, int M, int N, float x); 41 extern void esl_mat_IScale(int **A, int M, int N, int x); 42 43 extern void esl_mat_DCopy(double **src, int M, int N, double **dest); 44 extern void esl_mat_FCopy(float **src, int M, int N, float **dest); 45 extern void esl_mat_ICopy(int **src, int M, int N, int **dest); 46 extern void esl_mat_WCopy(int16_t **src, int M, int N, int16_t **dest); 47 extern void esl_mat_BCopy(int8_t **src, int M, int N, int8_t **dest); 48 49 extern double esl_mat_DMax(double **A, int M, int N); 50 extern float esl_mat_FMax(float **A, int M, int N); 51 extern int esl_mat_IMax(int **A, int M, int N); 52 53 extern int esl_mat_DCompare(double **A, double **B, int M, int N, double tol); 54 extern int esl_mat_FCompare(float **A, float **B, int M, int N, float tol); 55 extern int esl_mat_ICompare(int **A, int **B, int M, int N); 56 57 extern void esl_mat_DDestroy(double **A); 58 extern void esl_mat_FDestroy(float **A); 59 extern void esl_mat_IDestroy(int **A); 60 extern void esl_mat_CDestroy(char **A); 61 62 extern int esl_mat_DDump(double **A, int M, int N); 63 extern int esl_mat_FDump( float **A, int M, int N); 64 extern int esl_mat_IDump( int **A, int M, int N); 65 66 67 #endif // eslMATRIXOPS_INCLUDED 68