1 #ifndef CLOOG_MATRIX_H 2 #define CLOOG_MATRIX_H 3 #if defined(__cplusplus) 4 extern "C" 5 { 6 #endif 7 8 /* The CloogMatrix structure is equivalent to the PolyLib Matrix data structure 9 * (see Wil93). This structure is devoted to represent a set of constraints. 10 * 11 * The whole matrix is stored in memory row after row at the p_Init address. p 12 * is an array of pointers where p[i] points to the first element of the i^{th 13 * row. NbRows and NbColumns are respectively the number of rows and columns of 14 * the matrix. Each row corresponds to a constraint. The first element of each 15 * row is an equality/inequality tag. The constraint is an equality p(x) = 0 if 16 * the first element is 0, but it is an inequality p(x) \geq 0 if the first 17 * element is 1. The next elements are the unknown coefficients, followed by 18 * the parameter coefficients, then the constant term. For instance, the 19 * following three constraints: 20 * 21 * -i + m = 0 22 * -j + n >= 0 23 * i + j - k >= 0 24 * 25 * would be represented by the following rows: 26 * 27 * # eq/in i j k m n cst 28 * 0 0 -1 0 1 0 0 29 * 1 -1 0 0 0 1 0 30 * 1 1 1 -1 0 0 0 31 * 32 * To be able to provide different precision version (CLooG supports 32 bits, 33 * 64 bits and arbitrary precision through the GMP library), the cloog_int_t 34 * type depends on the configuration options (it may be long int for 32 bits 35 * version, long long int for 64 bits version, and mpz_t for multiple precision 36 * version). */ 37 38 struct cloogmatrix 39 { unsigned NbRows; /* Number of rows. */ 40 unsigned NbColumns; /* Number of columns. */ 41 cloog_int_t ** p; /* Array of pointers to the matrix rows. */ 42 cloog_int_t * p_Init; /* Matrix rows contiguously in memory. */ 43 }; 44 45 typedef struct cloogmatrix CloogMatrix; 46 47 CloogMatrix *cloog_matrix_alloc (unsigned, unsigned); 48 void cloog_matrix_free (CloogMatrix *); 49 void cloog_matrix_print_structure(FILE *file, CloogMatrix *M, 50 const char *prefix, const char *suffix); 51 CloogMatrix *cloog_matrix_read(FILE *input); 52 CloogMatrix *cloog_matrix_read_of_size(FILE *input, 53 unsigned n_row, unsigned n_col); 54 void cloog_matrix_print(FILE*, CloogMatrix*); 55 56 #if defined(__cplusplus) 57 } 58 #endif 59 #endif /* define _H */ 60