#ifndef CLOOG_MATRIX_H #define CLOOG_MATRIX_H #if defined(__cplusplus) extern "C" { #endif /* The CloogMatrix structure is equivalent to the PolyLib Matrix data structure * (see Wil93). This structure is devoted to represent a set of constraints. * * The whole matrix is stored in memory row after row at the p_Init address. p * is an array of pointers where p[i] points to the first element of the i^{th * row. NbRows and NbColumns are respectively the number of rows and columns of * the matrix. Each row corresponds to a constraint. The first element of each * row is an equality/inequality tag. The constraint is an equality p(x) = 0 if * the first element is 0, but it is an inequality p(x) \geq 0 if the first * element is 1. The next elements are the unknown coefficients, followed by * the parameter coefficients, then the constant term. For instance, the * following three constraints: * * -i + m = 0 * -j + n >= 0 * i + j - k >= 0 * * would be represented by the following rows: * * # eq/in i j k m n cst * 0 0 -1 0 1 0 0 * 1 -1 0 0 0 1 0 * 1 1 1 -1 0 0 0 * * To be able to provide different precision version (CLooG supports 32 bits, * 64 bits and arbitrary precision through the GMP library), the cloog_int_t * type depends on the configuration options (it may be long int for 32 bits * version, long long int for 64 bits version, and mpz_t for multiple precision * version). */ struct cloogmatrix { unsigned NbRows; /* Number of rows. */ unsigned NbColumns; /* Number of columns. */ cloog_int_t ** p; /* Array of pointers to the matrix rows. */ cloog_int_t * p_Init; /* Matrix rows contiguously in memory. */ }; typedef struct cloogmatrix CloogMatrix; CloogMatrix *cloog_matrix_alloc (unsigned, unsigned); void cloog_matrix_free (CloogMatrix *); void cloog_matrix_print_structure(FILE *file, CloogMatrix *M, const char *prefix, const char *suffix); CloogMatrix *cloog_matrix_read(FILE *input); CloogMatrix *cloog_matrix_read_of_size(FILE *input, unsigned n_row, unsigned n_col); void cloog_matrix_print(FILE*, CloogMatrix*); #if defined(__cplusplus) } #endif #endif /* define _H */