OSSIM - Open Source Software Image Map  Version 1.9.0 (20180803)
Public Member Functions | Protected Member Functions | Friends | List of all members
SPMatrix Class Reference

#include <newmat.h>

Inheritance diagram for SPMatrix:
AddedMatrix MultipliedMatrix BaseMatrix

Public Member Functions

 ~SPMatrix ()
 
GeneralMatrixEvaluate (MatrixType mt=MatrixTypeUnSp)
 
MatrixBandWidth BandWidth () const
 
- Public Member Functions inherited from AddedMatrix
 ~AddedMatrix ()
 
- Public Member Functions inherited from MultipliedMatrix
 ~MultipliedMatrix ()
 
- Public Member Functions inherited from BaseMatrix
AddedMatrix operator+ (const BaseMatrix &) const
 
MultipliedMatrix operator* (const BaseMatrix &) const
 
SubtractedMatrix operator- (const BaseMatrix &) const
 
ConcatenatedMatrix operator| (const BaseMatrix &) const
 
StackedMatrix operator & (const BaseMatrix &) const
 
ShiftedMatrix operator+ (Real) const
 
ScaledMatrix operator* (Real) const
 
ScaledMatrix operator/ (Real) const
 
ShiftedMatrix operator- (Real) const
 
TransposedMatrix t () const
 
NegatedMatrix operator- () const
 
ReversedMatrix Reverse () const
 
InvertedMatrix i () const
 
RowedMatrix AsRow () const
 
ColedMatrix AsColumn () const
 
DiagedMatrix AsDiagonal () const
 
MatedMatrix AsMatrix (int, int) const
 
GetSubMatrix SubMatrix (int, int, int, int) const
 
GetSubMatrix SymSubMatrix (int, int) const
 
GetSubMatrix Row (int) const
 
GetSubMatrix Rows (int, int) const
 
GetSubMatrix Column (int) const
 
GetSubMatrix Columns (int, int) const
 
Real AsScalar () const
 
virtual LogAndSign LogDeterminant () const
 
Real Determinant () const
 
virtual Real SumSquare () const
 
Real NormFrobenius () const
 
virtual Real SumAbsoluteValue () const
 
virtual Real Sum () const
 
virtual Real MaximumAbsoluteValue () const
 
virtual Real MaximumAbsoluteValue1 (int &i) const
 
virtual Real MaximumAbsoluteValue2 (int &i, int &j) const
 
virtual Real MinimumAbsoluteValue () const
 
virtual Real MinimumAbsoluteValue1 (int &i) const
 
virtual Real MinimumAbsoluteValue2 (int &i, int &j) const
 
virtual Real Maximum () const
 
virtual Real Maximum1 (int &i) const
 
virtual Real Maximum2 (int &i, int &j) const
 
virtual Real Minimum () const
 
virtual Real Minimum1 (int &i) const
 
virtual Real Minimum2 (int &i, int &j) const
 
virtual Real Trace () const
 
Real Norm1 () const
 
Real NormInfinity () const
 
virtual void CleanUp ()
 
void IEQND () const
 

Protected Member Functions

 SPMatrix (const BaseMatrix *bm1x, const BaseMatrix *bm2x)
 
- Protected Member Functions inherited from AddedMatrix
 AddedMatrix (const BaseMatrix *bm1x, const BaseMatrix *bm2x)
 
- Protected Member Functions inherited from MultipliedMatrix
 MultipliedMatrix (const BaseMatrix *bm1x, const BaseMatrix *bm2x)
 
int search (const BaseMatrix *) const
 

Friends

class BaseMatrix
 
class GeneralMatrix
 
class GenericMatrix
 
SPMatrix SP (const BaseMatrix &, const BaseMatrix &)
 

Additional Inherited Members

- Protected Attributes inherited from MultipliedMatrix
union {
   const BaseMatrix *   bm1
 
   GeneralMatrix *   gm1
 
}; 
 
union {
   const BaseMatrix *   bm2
 
   GeneralMatrix *   gm2
 
}; 
 

Detailed Description

Definition at line 1252 of file newmat.h.

Constructor & Destructor Documentation

◆ SPMatrix()

SPMatrix::SPMatrix ( const BaseMatrix bm1x,
const BaseMatrix bm2x 
)
inlineprotected

Definition at line 1255 of file newmat.h.

1256  : AddedMatrix(bm1x,bm2x) {}
AddedMatrix(const BaseMatrix *bm1x, const BaseMatrix *bm2x)
Definition: newmat.h:1239

◆ ~SPMatrix()

SPMatrix::~SPMatrix ( )
inline

Definition at line 1262 of file newmat.h.

1262 {}

Member Function Documentation

◆ BandWidth()

MatrixBandWidth SPMatrix::BandWidth ( ) const
virtual

Reimplemented from AddedMatrix.

Definition at line 450 of file newmat4.cpp.

References BaseMatrix::BandWidth(), MultipliedMatrix::gm1, MultipliedMatrix::gm2, MatrixBandWidth::minimum(), and REPORT.

451  { REPORT return gm1->BandWidth().minimum(gm2->BandWidth()); }
virtual MatrixBandWidth BandWidth() const
Definition: newmat4.cpp:431
#define REPORT
Definition: newmat4.cpp:19
MatrixBandWidth minimum(const MatrixBandWidth &) const
Definition: bandmat.cpp:187
GeneralMatrix * gm2
Definition: newmat.h:1222
GeneralMatrix * gm1
Definition: newmat.h:1220

◆ Evaluate()

GeneralMatrix * SPMatrix::Evaluate ( MatrixType  mt = MatrixTypeUnSp)
virtual

Reimplemented from AddedMatrix.

Definition at line 649 of file newmat7.cpp.

References MatrixType::DataLossOK, GeneralMatrix::Evaluate(), GeneralMatrix::Ncols(), MatrixType::New(), GeneralMatrix::Nrows(), GeneralMatrix::ReleaseAndDelete(), REPORT, GeneralMatrix::reuse(), GeneralMatrix::SimpleAddOK(), MatrixType::SP(), SP(), GeneralMatrix::tDelete(), and GeneralMatrix::Type().

650 {
651  REPORT
652  Tracer tr("SPMatrix::Evaluate");
653  gm1=((BaseMatrix*&)bm1)->Evaluate(); gm2=((BaseMatrix*&)bm2)->Evaluate();
654  int nr=gm1->Nrows(); int nc=gm1->Ncols();
655  if (nr!=gm2->Nrows() || nc!=gm2->Ncols())
656  {
657  Try { Throw(IncompatibleDimensionsException(*gm1, *gm2)); }
658  CatchAll
659  {
660  gm1->tDelete(); gm2->tDelete();
661  ReThrow;
662  }
663  }
664  MatrixType mt1 = gm1->Type(), mt2 = gm2->Type();
665  MatrixType mts = mt1.SP(mt2);
666  if (!mtd) { REPORT mtd = mts; }
667  else if (!(mtd.DataLossOK || mtd >= mts))
668  {
669  gm1->tDelete(); gm2->tDelete();
670  Throw(ProgramException("Illegal Conversion", mts, mtd));
671  }
672  GeneralMatrix* gmx;
673  bool c1 = (mtd == mt1), c2 = (mtd == mt2);
674  if ( c1 && c2 && (gm1->SimpleAddOK(gm2) == 0) )
675  {
676  if (gm1->reuse()) { REPORT SP(gm1,gm2); gm2->tDelete(); gmx = gm1; }
677  else if (gm2->reuse()) { REPORT SP(gm2,gm1); gmx = gm2; }
678  else
679  {
680  REPORT
681  Try { gmx = mt1.New(nr,nc,this); }
682  CatchAll
683  {
684  ReThrow;
685  }
686  gmx->ReleaseAndDelete(); SP(gmx,gm1,gm2);
687  }
688  }
689  else
690  {
691  if (c1 && c2)
692  {
693  short SAO = gm1->SimpleAddOK(gm2);
694  if (SAO & 1) { REPORT c2 = false; } // c1 and c2 swapped
695  if (SAO & 2) { REPORT c1 = false; }
696  }
697  if (c1 && gm1->reuse() ) // must have type test first
698  { REPORT SPDS(gm1,gm2); gm2->tDelete(); gmx = gm1; }
699  else if (c2 && gm2->reuse() )
700  { REPORT SPDS(gm2,gm1); if (!c1) gm1->tDelete(); gmx = gm2; }
701  else
702  {
703  REPORT
704  // what if New throws and exception
705  Try { gmx = mtd.New(nr,nc,this); }
706  CatchAll
707  {
708  if (!c1) gm1->tDelete(); if (!c2) gm2->tDelete();
709  ReThrow;
710  }
711  SPDS(gmx,gm1,gm2);
712  if (!c1) gm1->tDelete(); if (!c2) gm2->tDelete();
713  gmx->ReleaseAndDelete();
714  }
715  }
716  return gmx;
717 }
void tDelete()
Definition: newmat4.cpp:535
const BaseMatrix * bm2
Definition: newmat.h:1222
int Ncols() const
Definition: newmat.h:431
GeneralMatrix * Evaluate(MatrixType mt=MatrixTypeUnSp)
Definition: newmat5.cpp:79
GeneralMatrix * New() const
virtual short SimpleAddOK(const GeneralMatrix *)
Definition: newmat.h:419
#define REPORT
Definition: newmat7.cpp:18
friend SPMatrix SP(const BaseMatrix &, const BaseMatrix &)
Definition: newmat6.cpp:274
void ReleaseAndDelete()
Definition: newmat.h:442
bool reuse()
Definition: newmat4.cpp:568
virtual MatrixType Type() const =0
const BaseMatrix * bm1
Definition: newmat.h:1220
int Nrows() const
Definition: newmat.h:430
MatrixType SP(const MatrixType &) const
Definition: newmat1.cpp:40
GeneralMatrix * gm2
Definition: newmat.h:1222
GeneralMatrix * gm1
Definition: newmat.h:1220

Friends And Related Function Documentation

◆ BaseMatrix

friend class BaseMatrix
friend

Definition at line 1258 of file newmat.h.

◆ GeneralMatrix

friend class GeneralMatrix
friend

Definition at line 1259 of file newmat.h.

◆ GenericMatrix

friend class GenericMatrix
friend

Definition at line 1260 of file newmat.h.

◆ SP

SPMatrix SP ( const BaseMatrix bm1,
const BaseMatrix bm2 
)
friend

Definition at line 274 of file newmat6.cpp.

275 { REPORT return SPMatrix(&bm1, &bm2); }
const BaseMatrix * bm2
Definition: newmat.h:1222
SPMatrix(const BaseMatrix *bm1x, const BaseMatrix *bm2x)
Definition: newmat.h:1255
#define REPORT
Definition: newmat6.cpp:19
const BaseMatrix * bm1
Definition: newmat.h:1220

The documentation for this class was generated from the following files: