Exemplo n.º 1
0
void GetSubMatrix::operator=(const BaseMatrix& bmx)
{
   REPORT
   Tracer tr("SubMatrix(=)"); GeneralMatrix* gmx = 0;
   // MatrixConversionCheck mcc;         // Check for loss of info
   Try
   {
      SetUpLHS(); gmx = ((BaseMatrix&)bmx).Evaluate();
      if (row_number != gmx->Nrows() || col_number != gmx->Ncols())
         Throw(IncompatibleDimensionsException());
      LoadAndStoreFlag lasf =
         (  row_skip == col_skip
            && gm->type().is_symmetric()
            && gmx->type().is_symmetric() )
        ? LoadOnEntry+DirectPart
        : LoadOnEntry;
      MatrixRow mrx(gmx, lasf);
      MatrixRow mr(gm, LoadOnEntry+StoreOnExit+DirectPart, row_skip);
                                     // do need LoadOnEntry
      MatrixRowCol sub; int i = row_number;
      while (i--)
      {
         mr.SubRowCol(sub, col_skip, col_number);   // put values in sub
         sub.CopyCheck(mrx); mr.Next(); mrx.Next();
      }
      gmx->tDelete();
   }

   CatchAll
   {
      if (gmx) gmx->tDelete();
      ReThrow;
   }
}
Exemplo n.º 2
0
    void GetSubMatrix::operator=(const BaseMatrix& bmx) {
	REPORT
	    Tracer tr("SubMatrix(=)"); GeneralMatrix* gmx = 0;
	MatrixConversionCheck mcc;                    // Check for loss of info
	Try {
	    SetUpLHS(); gmx = ((BaseMatrix&)bmx).Evaluate();
	    if (row_number != gmx->Nrows() || col_number != gmx->Ncols())
		Throw(IncompatibleDimensionsException());
	    MatrixRow mrx(gmx, LoadOnEntry);
	    MatrixRow mr(gm, LoadOnEntry+StoreOnExit+DirectPart, row_skip);
	    // do need LoadOnEntry
	    MatrixRowCol sub; int i = row_number;
	    while (i--) {
		mr.SubRowCol(sub, col_skip, col_number);  // put values in sub
		sub.CopyCheck(mrx); mr.Next(); mrx.Next();
	    }
	    gmx->tDelete();
#ifdef TEMPS_DESTROYED_QUICKLY
	    delete this;
#endif
	}

	CatchAll {
	    if (gmx) gmx->tDelete();
#ifdef TEMPS_DESTROYED_QUICKLY
	    delete this;
#endif
	    ReThrow;
	}
    }