/* File: dense.h

   Header file for Dense Matrix Operations
*/

#ifndef dense_h
#define dense_h

/* Abstract Data Type for Dense Matrices */

typedef struct {
   int      rows ;      /* number of rows in the matrix */
   int      columns ;   /* number of columns */
   double   **matrix ;  /* Two dimensional array of doubles */
} dense_matrix ;

typedef dense_matrix *dm_ptr ;


/* Function Prototypes */

dm_ptr LoadDense(char *filename) ;

int StoreDense(char *filename, dm_ptr A) ;

dm_ptr AddDense(dm_ptr A, dm_ptr B) ;

dm_ptr SubtractDense(dm_ptr A, dm_ptr B) ;

dm_ptr MultiplyDense(dm_ptr A, dm_ptr B) ;

dm_ptr PowerDense(dm_ptr A, int n) ;

dm_ptr CopyDense (dm_ptr A) ;

void FreeDense (dm_ptr A) ;

double CompareDense(dm_ptr A, dm_ptr B) ;

#endif
