#ifndef MTRXGAUD_H #define MTRXGAUD_H #include #include /*---Matrix--- *Abstract type that describe a boolean matrix * *@colCount : the number of columns of the matrix *@rowIndex : the number of rows of the matrix * *@rows : pointer on the first row that contains a true value *@cols : pointer on the first col that contains a true value * */ typedef struct Matrix { int colCount; int rowCount; List *cols; List *rows; }Matrix; /** * Abstract type for a matrix of booleans * @param rows number of rows of the matrix * @param cols numbers of columns of the matrix * @param data the matrix * @see CreateBooleanMatrix to create one */ typedef struct { int rows; int cols; bool **data; } BooleanMatrix; /** * Function creating an empty boolean matrix * @param cols number of cols * @param rows number of rows * @return booleanmatrix a new matrix */ BooleanMatrix CreateBooleanMatrix(int cols, int rows); /** * Randomize a BooleanMatrix * @param matrix a BooleanMatrix * @return booleanmatrix the processed matrix */ BooleanMatrix RandomizeBooleanMatrix(BooleanMatrix matrix); /** * Free a BooleanMatrix * @param matrix a BooleanMatrix * @return */ void FreeBooleanMatrix(BooleanMatrix matrix); /** * Create a Matrix from its array-based representation * @param bmatrix BooleanMatrix * @return m Matrix */ Matrix newMatrix(BooleanMatrix bmatrix); /*---applyRules--- *A function tha allows you to apply some rules n times on the matrix and returns it * *@matrix : A matrix on whitch you would apply the rules * *@Rules : Integer describing the rules * *@N : number of time the rules will be applied * */ Matrix applyRules(Matrix matrix,int Rules, int N); /** *Create a void Matrix * *@return a matrix * */ Matrix CreateMatrix(); /** *Find and return the cell in the given matrix * *@param matrix the Matrix where we search *@param ColPos an int indicating the column of the cell *@param RowPos an int indicating the row of the cell * *@return a cellElement * */ cellElement * FindMatrixElem(Matrix matrix, int ColPos, int RowPos); /** *Create the cell in the given matrix * *@param matrix the Matrix *@param ColPos an int indicating the column of the cell *@param RowPos an int indicating the row of the cell * *@return a bool (error code) * */ bool CreateMatrixElem(Matrix matrix, int ColPos, int RowPos); /** *Delete the cell in the given matrix * *@param matrix the Matrix *@param ColPos an int indicating the column of the cell *@param RowPos an int indicating the row of the cell * *@return an error code (int) * */ int SupprMatrixElem(Matrix matrix, int ColPos, int RowPos); /** *Delete or create the cell in the given matrix to fit the value * *@param matrix the Matrix *@param ColPos an int indicating the column of the cell *@param RowPos an int indicating the row of the cell * *@return an error code (bool) * */ bool SetCellValue(Matrix matrix, int ColPos, int RowPos, bool value); /** *Checks out the value of the cell in the given matrix * *@param matrix the Matrix *@param ColPos an int indicating the column of the cell *@param RowPos an int indicating the row of the cell * *@return the value (bool) * */ bool GetCellValue(Matrix matrix, int ColPos, int RowPos); /** *Set the number of columns and rows of the matrix and returns it * *@param matrix the Matrix *@param nbCols an int indicating the number of columns *@param nbRows an int indicating the number of rows * *@return the matrix * */ Matrix SetMatrixDim(Matrix matrix,int nbCols,int nbRows); /** *Basically print the Matrix in the standard output * *@param matrix the Matrix * *@return void * */ void BasicPrintMatrix(Matrix matrix); bool RecursiveFreeCol(Matrix matrix, cellElement * elem); Matrix freeMatrix(Matrix matrix); /** * Given an input matrix with M rows and N columns, computes a matrix with * M rows and N-1 columns were each element corresponds to the operator boolean operation * between two successive horizontal elements in the input matrix * @param m a Matrix * @param operator a function * @return matrix the copmuted matrix */ Matrix colSequenceOnMatrix(Matrix m, bool (operator)(bool, bool)); /** * Given an input matrix with M rows and N columns, computes a matrix with * M-1 rows and N columns were each element corresponds to the operator boolean operation * between two succesive vertical elements in the input matrix * @param m a Matrix * @param operator a function * @return matrix the copmuted matrix */ Matrix rowSequenceOnMatrix(Matrix m, bool (operator)(bool, bool)); /** * Given an input matrix with M rows and N columns, computes a matrix with * M rows and N-1 columns were each element corresponds to the AND boolean operation * between two successive horizontal elements in the input matrix * @param m a Matrix * @return matrix the copmuted matrix */ Matrix andColSequenceOnMatrix(Matrix m); /** * Given an input matrix with M rows and N columns, computes a matrix with * M rows and N-1 columns were each element corresponds to the OR boolean operation * between two successive horizontal elements in the input matrix * @param m a Matrix * @return matrix the copmuted matrix */ Matrix orColSequenceOnMatrix(Matrix m); /** * Given an input matrix with M rows and N columns, computes a matrix with * M-1 rows and N columns were each element corresponds to the AND boolean operation * between two succesive vertical elements in the input matrix * @param m a Matrix * @return matrix the copmuted matrix */ Matrix andRowSequenceOnMatrix(Matrix m); /** * Given an input matrix with M rows and N columns, computes a matrix with * M-1 rows and N columns were each element corresponds to the OR boolean operation * between two succesive vertical elements in the input matrix * @param m a Matrix * @return matrix the copmuted matrix */ Matrix orRowSequenceOnMatrix(Matrix m); Matrix sumMatrix(Matrix matrix1,Matrix matrix2); Matrix mulMatrix(Matrix matrix1,Matrix matrix2); #endif