La Matriz Abstracta no Polimorfica:
 Todo Clases Namespaces Archivos Funciones Variables 'typedefs' Amigas 'defines'
Tipos públicos | Métodos públicos | Métodos protegidos | Amigas
Referencia de la plantilla de la Clase Mx::Matrix_BASE< E >

Esta es la plantilla base para las implementacion de la clase matriz chirrisquitica. Más...

#include <Matrix_BASE.h>

Diagrama de herencias de Mx::Matrix_BASE< E >
Mx::Matrix_Dense< E > Mx::Matrix_List< E > Mx::Matrix_Sparse< E >

Lista de todos los miembros.

Tipos públicos

typedef E value_type
 Tipo del objeto almacenado, similar al nombre usado en STL.
typedef value_typereference
 Referencia al objeto almacenado, similar al nombre usado en STL.
typedef const value_typeconst_reference
 Referencia constante al objeto almacenado, similar al nombre usado en STL.

Métodos públicos

bool same (const Matrix_BASE &M) const
 Retorna true si "M" comparte su valor con "*this".

Métodos protegidos

 Matrix_BASE (unsigned m=1, unsigned n=1)
 Constructor de vector.
 Matrix_BASE (const Matrix_BASE &M)
 Constructor de copia.
 Matrix_BASE (const E &val)
 Constructor escalar.
 ~Matrix_BASE ()
 Destructor.
unsigned rows () const
 Cantidad de filas de la matriz.
unsigned cols () const
 Cantidad de columnas de la matriz.
unsigned size () const
 Cantidad de valores almacenados en la matriz.
unsigned count () const
 Sinónimo de size().
unsigned capacity () const
 Cantidad máxima posible de valores diferentes que pueden ser almacenados en la matriz.
Matrix_BASEoperator= (const Matrix_BASE &M)
 Sinónimo de this->copy(M).
Matrix_BASEcopy (const Matrix_BASE &M)
 Copia desde "M".
Matrix_BASEmove (Matrix_BASE &M)
 Traslada el valor de "M" a "*this".
Matrix_BASEswap (Matrix_BASE &M)
 Intercambia los valores de "*this" y "M".
void clear ()
 Deja el valor de "*this" en el valor en que lo inicializa el constructor de vector.
bool equals (const Matrix_BASE &M) const
 ¿¿¿ A == B ???
E & operator() (unsigned i, unsigned j)
 Retorna una referencia al elemento [i][j] de la matriz.
const E & operator() (unsigned i, unsigned j) const
 Retorna una referencia constante al elemento [i][j] de la matriz [CONST].
E & at (unsigned i, unsigned j)
 Retorna una referencia al elemento [i][j] de la matriz.
const E & at (unsigned i, unsigned j) const
 Retorna una referencia constante al elemento [i][j] de la matriz [CONST].
void reShape (unsigned m, unsigned n)
 Le ajusta las dimensiones a la matriz.
void reSize (unsigned m, unsigned n)
 Le cambia las dimensiones a la matriz.
void transpose ()
 Transforma la matriz en su transpuesta.
void setDefault (const E &same)
 Define cuál es el valor almacenado en la mayor parte de la matriz.
const E & getDefault ()
 Valor almacenado en la mayor parte de la matriz.

Amigas

class test_Matrix
 BUnit Test.
template<class MAT >
bool check_ok_Matrix (const MAT &M)
 Verificación genérica de la invariante de la clase check_ok().
template<class MAT >
MAT operator+ (const Matrix_BASE< typename MAT::value_type > &A, const MAT &B)
 A+B
template<class MAT >
MAT operator- (const Matrix_BASE< typename MAT::value_type > &A, const MAT &B)
 A-B
template<class MAT >
MAT operator* (const Matrix_BASE< typename MAT::value_type > &A, const MAT &B)
 Res=A*B
template<class MAT >
bool operator== (const Matrix_BASE< typename MAT::value_type > &A, const MAT &B)
 ¿¿¿ (A == B) ???
template<class MAT >
bool operator!= (const Matrix_BASE< typename MAT::value_type > &A, const MAT &B)
 ¿¿¿ (A != B) ???
template<class MAT >
bool check_ok_Matrix (const MAT &M)
 Verificación genérica de la invariante de la clase check_ok().
template<class MAT >
unsigned count_Matrix (const MAT &M)
 Implementación por defecto para Matrix_BASE<E>::count()
template<class MAT >
void clear_Matrix (MAT &M)
 Implementación por defecto para Matrix_BASE<E>::clear()
template<class MAT >
bool equals_Matrix (const MAT &A, const MAT &B)
 Implementación por defecto para Matrix_BASE<E>::operator==()
template<class MAT >
void add_Matrix (MAT &Res, const MAT &M)
 Implementación por defecto para operator+( Matrix_BASE<E>&, Matrix_BASE<E> )
template<class MAT >
void substract_Matrix (MAT &Res, const MAT &M)
 Implementación por defecto para operator-( Matrix_BASE<E>&, Matrix_BASE<E> )
template<class MAT >
void multiply_Matrix (MAT &Res, const MAT &A, const MAT &B)
 Calcula la multiplicación A * B y almacena el resultado en "Res".
template<class MAT >
MAT::reference at_Matrix (MAT &M, unsigned i, unsigned j)
 Implementación por defecto para Matrix_BASE<E>::at()
template<class MAT >
MAT::const_reference at_Matrix (const MAT &M, unsigned i, unsigned j)
 Implementación por defecto para Matrix_BASE<E>::at() const.

Descripción detallada

template<class E>
class Mx::Matrix_BASE< E >

Esta es la plantilla base para las implementacion de la clase matriz chirrisquitica.

Definición en la línea 45 del archivo Matrix_BASE.h.


Documentación de los 'Typedef' miembros de la clase

template<class E>
Mx::Matrix_BASE< E >::value_type

Tipo del objeto almacenado, similar al nombre usado en STL.

Definición en la línea 47 del archivo Matrix_BASE.h.

template<class E>
Mx::Matrix_BASE< E >::reference

Referencia al objeto almacenado, similar al nombre usado en STL.

Definición en la línea 48 del archivo Matrix_BASE.h.

template<class E>
Mx::Matrix_BASE< E >::const_reference

Referencia constante al objeto almacenado, similar al nombre usado en STL.

Definición en la línea 49 del archivo Matrix_BASE.h.


Documentación del constructor y destructor

template<class E>
Mx::Matrix_BASE< E >::Matrix_BASE ( unsigned  m = 1,
unsigned  n = 1 
) [inline, protected]

Constructor de vector.

  • Obtiene suficiente memoria dinámica para almacenas los n * m valores de la matriz.
  • Si "value_type" es uno de los tipos escalares básicos, como lo son int o float, los valores almacenados en la matriz no son inicializados en cero.
  • Si "m" o "n" es cero, la matriz queda vacía.

Definición en la línea 51 del archivo Matrix_BASE.h.

template<class E>
Mx::Matrix_BASE< E >::Matrix_BASE ( const Matrix_BASE< E > &  M) [protected]

Constructor de copia.

template<class E>
Mx::Matrix_BASE< E >::Matrix_BASE ( const E &  val) [protected]

Constructor escalar.

  • La matriz es escalar de dimensiones 1x1 y valor "V".
template<class E>
Mx::Matrix_BASE< E >::~Matrix_BASE ( ) [inline, protected]

Destructor.

Definición en la línea 54 del archivo Matrix_BASE.h.


Documentación de las funciones miembro

template<class E>
unsigned Mx::Matrix_BASE< E >::rows ( ) const [protected]
template<class E>
unsigned Mx::Matrix_BASE< E >::cols ( ) const [protected]
template<class E>
unsigned Mx::Matrix_BASE< E >::size ( ) const [protected]

Cantidad de valores almacenados en la matriz.

Reimplementado en Mx::Matrix_List< E >, Mx::Matrix_List< rational< long > >, Mx::Matrix_Sparse< E > y Mx::Matrix_Dense< E >.

template<class E>
unsigned Mx::Matrix_BASE< E >::count ( ) const [protected]
template<class E>
unsigned Mx::Matrix_BASE< E >::capacity ( ) const [protected]

Cantidad máxima posible de valores diferentes que pueden ser almacenados en la matriz.

Reimplementado en Mx::Matrix_List< E >, Mx::Matrix_List< rational< long > >, Mx::Matrix_Sparse< E > y Mx::Matrix_Dense< E >.

template<class E>
Matrix_BASE< E > & Mx::Matrix_BASE< E >::operator= ( const Matrix_BASE< E > &  M) [protected]

Sinónimo de this->copy(M).

template<class E>
Matrix_BASE< E > & Mx::Matrix_BASE< E >::copy ( const Matrix_BASE< E > &  M) [protected]

Copia desde "M".

  • Copia todo el valor de "M" sobre "*this" de forma que el nuevo valor de "*this" sea un duplicado exacto del valor de "M".
  • El valor anterior de "*this" se pierde.
  • El objeto "M" mantiene su valor.
  • Luego de la copia, cuando el valor de "M" cambia, el de "*this" no cambiará, y viceversa, pues la copia es una copia profunda; no es superficial.
  • Si "*this" es "M" su valor no cambia.
  • Después de esta operación siempre es verdadero que *this == M .
Devuelve:
"*this"
Ver también:
http://www.di-mare.com/adolfo/binder/c04.htm#sc05
template<class E>
Matrix_BASE< E > & Mx::Matrix_BASE< E >::move ( Matrix_BASE< E > &  M) [protected]

Traslada el valor de "M" a "*this".

  • El valor anterior de "*this" se pierde
  • El nuevo valor de "*this" es el que "M" tuvo
  • "M" queda en el estado en que queda cualquier objeto cuando es inicializardo con el constructor de vector.
  • Si "*this" es "M" entonces su valor no cambia
  • En general, después de esta operación casi nunca ocurre que (*this == M)
Devuelve:
"*this"
Ver también:
http://www.di-mare.com/adolfo/binder/c04.htm#sc07
template<class E>
Matrix_BASE< E > & Mx::Matrix_BASE< E >::swap ( Matrix_BASE< E > &  M) [protected]

Intercambia los valores de "*this" y "M".

  • En muchas ocasiones toma menos tiempo esta operación que copy() o move().
Devuelve:
"*this"
Ver también:
http://www.di-mare.com/adolfo/binder/c04.htm#sc08
template<class E>
Matrix_BASE< E > & Mx::Matrix_BASE< E >::clear ( ) [protected]

Deja el valor de "*this" en el valor en que lo inicializa el constructor de vector.

Reimplementado en Mx::Matrix_List< E >, Mx::Matrix_List< rational< long > >, Mx::Matrix_Sparse< E > y Mx::Matrix_Dense< E >.

template<class E>
bool Mx::Matrix_BASE< E >::same ( const Matrix_BASE< E > &  M) const [inline]

Retorna true si "M" comparte su valor con "*this".

Definición en la línea 68 del archivo Matrix_BASE.h.

template<class E>
bool Mx::Matrix_BASE< E >::equals ( const Matrix_BASE< E > &  M) const [protected]

¿¿¿ A == B ???

template<class E>
reference Mx::Matrix_BASE< E >::operator() ( unsigned  i,
unsigned  j 
) [protected]

Retorna una referencia al elemento [i][j] de la matriz.

  • M(i,j) significa lo que en arreglos es M[i][j].
  • Esta referencia permite cambiar el valor almacenado.
  • M(i,j) = val; // M(i,j) es un "lvalue" (modificable)

Reimplementado en Mx::Matrix_List< E >, Mx::Matrix_List< rational< long > >, Mx::Matrix_Sparse< E > y Mx::Matrix_Dense< E >.

template<class E>
const_reference Mx::Matrix_BASE< E >::operator() ( unsigned  i,
unsigned  j 
) const [protected]

Retorna una referencia constante al elemento [i][j] de la matriz [CONST].

  • M(i,j) significa lo que en arreglos es M[i][j].
  • Esta referencia solo permite leer el valor almacenado.
  • val = M(i,j); // M(i,j) es un "rvalue" (const)

Reimplementado en Mx::Matrix_List< E >, Mx::Matrix_List< rational< long > >, Mx::Matrix_Sparse< E > y Mx::Matrix_Dense< E >.

template<class E>
reference Mx::Matrix_BASE< E >::at ( unsigned  i,
unsigned  j 
) [protected]

Retorna una referencia al elemento [i][j] de la matriz.

  • Vefica que en la matriz exista el valor de índices [i][j].
  • Si [i][j] está fuera de rango levanta una excepción de tipo std::out_of_range.
  • Esta referencia permite cambiar el valor almacenado.
  • M.at(i,j) = val; // M.at(i,j) es un "lvalue" (modificable)

Reimplementado en Mx::Matrix_List< E >, Mx::Matrix_List< rational< long > >, Mx::Matrix_Sparse< E > y Mx::Matrix_Dense< E >.

template<class E>
const_reference Mx::Matrix_BASE< E >::at ( unsigned  i,
unsigned  j 
) const [protected]

Retorna una referencia constante al elemento [i][j] de la matriz [CONST].

  • Vefica que en la matriz exista el valor de índices [i][j].
  • Si [i][j] está fuera de rango levanta una excepción de tipo std::out_of_range.
  • Esta referencia solo permite leer el valor almacenado.
  • val = M.at(i,j); // M.at(i,j) es un "rvalue" (const)

Reimplementado en Mx::Matrix_List< E >, Mx::Matrix_List< rational< long > >, Mx::Matrix_Sparse< E > y Mx::Matrix_Dense< E >.

template<class E>
void Mx::Matrix_BASE< E >::reShape ( unsigned  m,
unsigned  n 
) [protected]

Le ajusta las dimensiones a la matriz.

  • Trata de cambiar las dimensiones de la matriz conservando los valores almacenados actuales. De esta forma, una matriz 4x12 puede ser transformada en 8x6 sin tener que adquirir nueva memoria dinámica, lo que hace que esta operación en algunas ocasiones sea más rápida que reSize(m,n).
  • En muchos casos no es posible reajustar las dimensiones de la matriz.

Reimplementado en Mx::Matrix_List< E >, Mx::Matrix_List< rational< long > >, Mx::Matrix_Sparse< E > y Mx::Matrix_Dense< E >.

template<class E>
void Mx::Matrix_BASE< E >::reSize ( unsigned  m,
unsigned  n 
) [protected]

Le cambia las dimensiones a la matriz.

  • Si (m*n == 0) deja la matriz vacía.

Reimplementado en Mx::Matrix_List< E >, Mx::Matrix_List< rational< long > >, Mx::Matrix_Sparse< E > y Mx::Matrix_Dense< E >.

template<class E>
void Mx::Matrix_BASE< E >::transpose ( ) [protected]

Transforma la matriz en su transpuesta.

Reimplementado en Mx::Matrix_List< E >, Mx::Matrix_List< rational< long > >, Mx::Matrix_Sparse< E > y Mx::Matrix_Dense< E >.

template<class E>
Mx::Matrix_BASE< E >::setDefault ( const E &  same) [protected]

Define cuál es el valor almacenado en la mayor parte de la matriz.

  • En muchos casos reorganiza al matriz de manera que ocupe menos espacio usando como valor comodín a same.
  • Si same != getDefault() la matriz queda reducida como si hubiera sido invocado clear().

Reimplementado en Mx::Matrix_List< E >, Mx::Matrix_List< rational< long > >, Mx::Matrix_Sparse< E > y Mx::Matrix_Dense< E >.

template<class E>
Mx::Matrix_BASE< E >::getDefault ( ) [protected]

Valor almacenado en la mayor parte de la matriz.

Reimplementado en Mx::Matrix_List< E >, Mx::Matrix_List< rational< long > >, Mx::Matrix_Sparse< E > y Mx::Matrix_Dense< E >.


Documentación de las funciones relacionadas y clases amigas

template<class E>
friend class test_Matrix [friend]

BUnit Test.

Reimplementado en Mx::Matrix_List< E >, Mx::Matrix_List< rational< long > >, Mx::Matrix_Sparse< E > y Mx::Matrix_Dense< E >.

Definición en la línea 85 del archivo Matrix_BASE.h.

template<class E>
template<class MAT >
bool check_ok_Matrix ( const MAT &  M) [friend]

Verificación genérica de la invariante de la clase check_ok().

Comentarios:
Libera al programador de implementar el método Ok()
  • check_ok(): (M.rows() == 0) <==> (M.cols() == 0)

Definición en la línea 140 del archivo Matrix_BASE.h.

template<class E>
template<class MAT >
MAT operator+ ( const Matrix_BASE< typename MAT::value_type > &  A,
const MAT &  B 
) [friend]

A+B

Definición en la línea 368 del archivo Matrix_BASE.h.

template<class E>
template<class MAT >
MAT operator- ( const Matrix_BASE< typename MAT::value_type > &  A,
const MAT &  B 
) [friend]

A-B

Definición en la línea 448 del archivo Matrix_BASE.h.

template<class E>
template<class MAT >
MAT operator* ( const Matrix_BASE< typename MAT::value_type > &  A,
const MAT &  B 
) [friend]

Res=A*B

Definición en la línea 454 del archivo Matrix_BASE.h.

template<class E>
template<class MAT >
bool operator== ( const Matrix_BASE< typename MAT::value_type > &  A,
const MAT &  B 
) [friend]

¿¿¿ (A == B) ???

Definición en la línea 460 del archivo Matrix_BASE.h.

template<class E>
template<class MAT >
bool operator!= ( const Matrix_BASE< typename MAT::value_type > &  A,
const MAT &  B 
) [friend]

¿¿¿ (A != B) ???

Definición en la línea 466 del archivo Matrix_BASE.h.

template<class E>
template<class MAT >
bool check_ok_Matrix ( const MAT &  M) [friend]

Verificación genérica de la invariante de la clase check_ok().

Comentarios:
Libera al programador de implementar el método Ok()
  • check_ok(): (M.rows() == 0) <==> (M.cols() == 0)

Definición en la línea 140 del archivo Matrix_BASE.h.

template<class E>
template<class MAT >
unsigned count_Matrix ( const MAT &  M) [friend]

Implementación por defecto para Matrix_BASE<E>::count()

Definición en la línea 167 del archivo Matrix_BASE.h.

template<class E>
template<class MAT >
void clear_Matrix ( MAT &  M) [friend]

Implementación por defecto para Matrix_BASE<E>::clear()

Definición en la línea 178 del archivo Matrix_BASE.h.

template<class E>
template<class MAT >
bool equals_Matrix ( const MAT &  A,
const MAT &  B 
) [friend]

Implementación por defecto para Matrix_BASE<E>::operator==()

Definición en la línea 190 del archivo Matrix_BASE.h.

template<class E>
template<class MAT >
void add_Matrix ( MAT &  Res,
const MAT &  M 
) [friend]

Implementación por defecto para operator+( Matrix_BASE<E>&, Matrix_BASE<E> )

Precondición:
  • "*this" y "M" deben tener las mismas dimensiones.
  • rows() == M.rows() && cols() == M.cols() .
Comentarios:
  • Esta es la implementación para Matrix_BASE<E> operator+( Matrix_BASE<E>&, Matrix_BASE<E> ) .
  • El compilador tiene problemas en compilar un función amiga ("friend") definida con plantillas si esa función amiga no está definida (implementada) dentro de la declaración de la clase. Para solventar esta deficiencia existe esta función que realiza el trabajo, aunque es poco cómodo de usar.

Definición en la línea 239 del archivo Matrix_BASE.h.

template<class E>
template<class MAT >
void substract_Matrix ( MAT &  Res,
const MAT &  M 
) [friend]

Implementación por defecto para operator-( Matrix_BASE<E>&, Matrix_BASE<E> )

Definición en la línea 259 del archivo Matrix_BASE.h.

template<class E>
template<class MAT >
void multiply_Matrix ( MAT &  Res,
const MAT &  A,
const MAT &  B 
) [friend]

Calcula la multiplicación A * B y almacena el resultado en "Res".

  • Las dimensiones de "*this" se ajustan de manera que:
    Res.rows() == A.rows() && Res.cols() == B.cols()
  • Esta es la implementación de Matrix_BASE<E> operator*() .
Precondición:
  • "A" y "B" deben tener dimensiones compatibles.
  • A.cols() == B.rows() .
  • La multiplicación se hace [Fila x Columna], lo que implica que la cantidad de valores en la filas de "A" debe ser igual a la cantidad de columnas de "B".
Complejidad:
O( A.cols() * B.cols() * A.cols() )

Definición en la línea 307 del archivo Matrix_BASE.h.

template<class E>
template<class MAT >
MAT::reference at_Matrix ( MAT &  M,
unsigned  i,
unsigned  j 
) [friend]

Implementación por defecto para Matrix_BASE<E>::at()

Definición en la línea 335 del archivo Matrix_BASE.h.

template<class E>
template<class MAT >
MAT::const_reference at_Matrix ( const MAT &  M,
unsigned  i,
unsigned  j 
) [friend]

Implementación por defecto para Matrix_BASE<E>::at() const.

Definición en la línea 354 del archivo Matrix_BASE.h.


La documentación para esta clase fue generada a partir del siguiente fichero: