/** @(#) matrixdouble/matrixdouble.h */
#ifndef MATRIXDOUBLE_H
#define MATRIXDOUBLE_H
//----------------------------------------------------------------------------
#include "../mathpos/arraypos.h"
#include "../utilpos/interfacepos.h"
#include <iomanip>
#include <iostream>
#include <string>
#include <stdexcept>	// runtime_error
using namespace std;

/**
* Crea una matriz fija bidimensional de numeros de tipo "double" para el manejo
* de operaciones del Algebra Lineal.
* Usar la referencia a la matriz (logica) cuando sea la posicion
* relativa al elemento de la matriz (i, j).
* @author Omar Posada Villarreal
* @version 2.3, 03/03/2002 Sin VectorDouble *m
* @version 2.2, 03/03/2002 VectorDouble *m
* @version 2.1, 02/03/2002
* @version 2.0 27/02/2002 C++
* @version 1.7 02/12/2001 Java
*/
class MatrixDouble {
public:
	MatrixDouble(int theRows, int theColumns, int theLogic = 0);

        /**
        * Obtiene la logica.
        * @return La logica de la matriz [0 | 1}.
        */
        int getLogic() const {
        	return logic;
        }

        /**
        * Cambia la logica de la matriz.
        * @param theLogica 0: Logica cero. !=0: Logica 1.
        */
        virtual void setLogic(int theLogic) = 0;

	// Destructor predeterminado. Las heredadas hacen el manejo de memoria

        /** Obtiene los renglones. Logica uno. @return Numero de renglones. */
	int getRows() const {
		return rows;
	}

        /** Obtiene las columnas. Logica uno. @return Numero de Columnas. */
	int getColumns() const {
		return columns;
	}

protected:	// public: const int logic ...
	/** Numero logico de renglones. rows = 1...N.*/
	int rows;
	/** Numero logico de columnas. columns = 1...N. */
	int columns;
	/** Logica del arreglo, solo es valido logica 0 y 1.
	* Es el numero donde se encuentra el primer elemento: A[0] o A[1]. */
	int logic;
private:
};
//----------------------------------------------------------------------------
	/** [][] para numericalPoder usar Numerical Recipes. ADVERTENCIA: Puede ser mal usado. */
/*	double **getArray() { // const { ?
		return m;
	}
*/

#endif
// Fin------------------------------------------------------------------------