#include "machdefs.h" #include #include #include #include #include #include "tvector.h" #include "nomtmatvecadapter.h" #include "piscdrawwdg.h" #include "pitvmaad.h" //---------------------------------------------------------------- // Class Adaptateur d'objet (Pour NamedObjMgr) d'objet TMatrix //---------------------------------------------------------------- /* --Methode-- */ template NOMAdapter_TMatrix::NOMAdapter_TMatrix(TMatrix* o) : NObjMgrAdapter(o) { mMtx = o; } /* --Methode-- */ template NOMAdapter_TMatrix::~NOMAdapter_TMatrix() { } /* --Methode-- */ template NObjMgrAdapter* NOMAdapter_TMatrix::Clone(AnyDataObj* o) { TMatrix* m = dynamic_cast *>(o); if (m) return ( new NOMAdapter_TMatrix(m) ); return ( new NObjMgrAdapter(o) ); } /* --Methode-- */ template AnyDataObj* NOMAdapter_TMatrix::GetCopyObj() { if (mMtx == NULL) return(NULL); TVector* v = dynamic_cast *>(mMtx); if (v != NULL) return( new TVector(*v) ); else return ( new TMatrix(*mMtx) ); } /* --Methode-- */ template void NOMAdapter_TMatrix::SavePPF(POutPersist& pos, string const & nom) { if (mMtx == NULL) return; TVector* v = dynamic_cast *>(mMtx); if (v != NULL) { FIO_TVector fio(v); fio.Write(pos, nom); } else { FIO_TMatrix fio(mMtx); fio.Write(pos, nom); } } /* --Methode-- */ template void NOMAdapter_TMatrix::Print(ostream& os) { TVector* v = dynamic_cast *>(mMtx); if (v != NULL) os << (*v); else os << (*mMtx); } /* --Methode-- */ template PIDrawer* NOMAdapter_TMatrix::GetDrawer(string & dopt) { TVector* v = dynamic_cast *>(mMtx); if (v == NULL) return(NULL); else { dopt = "thinline," + dopt; return( new PIYfXDrawer( new POTVectorAdapter(v, false), NULL, true) ); } } /* --Methode-- */ template P2DArrayAdapter* NOMAdapter_TMatrix::Get2DArray(string &) { return ( new POTMatrixAdapter(mMtx, false) ); } /* --Methode-- */ template NTupleInterface* NOMAdapter_TMatrix::GetNTupleInterface(bool& adel) { adel = true; return( new NTupInt_TMatrix(mMtx) ); } // ------------------------------------------------------------- /* --Methode-- */ template NTupInt_TMatrix::NTupInt_TMatrix(TMatrix* m) { mMtx = m; } /* --Methode-- */ template NTupInt_TMatrix::~NTupInt_TMatrix() { } /* --Methode-- */ template uint_4 NTupInt_TMatrix::NbLines() const { return( mMtx->NRows()*mMtx->NCols() ); } /* --Methode-- */ template uint_4 NTupInt_TMatrix::NbColumns() const { return(8); } /* --Methode-- */ template r_8* NTupInt_TMatrix::GetLineD(int n) const { int i,j; if ((n < 0) || (n >= (int)(mMtx->NRows()*mMtx->NCols()) )) { mRet[0] = n; for(i=1; i<8; i++) mRet[i] = 0.; } else { i = n/mMtx->NCols(); j = n%mMtx->NCols(); mRet[0] = n; mRet[1] = i; mRet[2] = j; mRet[3] = (*mMtx)(i,j); mRet[4] = mRet[2]; mRet[5] = 0.; mRet[6] = mRet[2]; mRet[7] = 0.; } return(mRet); } /* --Methode-- */ template string NTupInt_TMatrix::VarList_C(const char* nx) const { string nomx; if (nx) nomx = nx; else nomx = "_xh_"; string vardec = "double n,r,c,val,real,imag,mod,phas; \n"; vardec += "n = " + nomx + "[0]; r = " + nomx + "[1]; c = " + nomx + "[2]; \n"; vardec += "val = " + nomx + "[3]; \n"; vardec += "real = " + nomx + "[4]; imag = " + nomx + "[5]; \n"; vardec += "mod = " + nomx + "[6]; phas = " + nomx + "[7]; \n"; return(vardec); } /* --Methode-- */ r_8* NTupInt_TMatrix< complex >::GetLineD(int n) const { int i,j; if ((n < 0) || (n >= (int)(mMtx->NRows()*mMtx->NCols()) )) { mRet[0] = n; for(i=1; i<8; i++) mRet[i] = 0.; } else { i = n/mMtx->NCols(); j = n%mMtx->NCols(); mRet[0] = n; mRet[1] = i; mRet[2] = j; mRet[4] = (*mMtx)(i,j).real(); mRet[5] = (*mMtx)(i,j).imag(); mRet[3] = mRet[6] = sqrt(mRet[4]*mRet[4]+mRet[5]*mRet[5]); mRet[7] = atan2(mRet[5], mRet[4]); } return(mRet); } r_8* NTupInt_TMatrix< complex >::GetLineD(int n) const { int i,j; if ((n < 0) || (n >= (int)(mMtx->NRows()*mMtx->NCols()) )) { mRet[0] = n; for(i=1; i<8; i++) mRet[i] = 0.; } else { i = n/mMtx->NCols(); j = n%mMtx->NCols(); mRet[0] = n; mRet[1] = i; mRet[2] = j; mRet[4] = (*mMtx)(i,j).real(); mRet[5] = (*mMtx)(i,j).imag(); mRet[3] = mRet[6] = sqrt(mRet[4]*mRet[4]+mRet[5]*mRet[5]); mRet[7] = atan2(mRet[5], mRet[4]); } return(mRet); } #ifdef __CXX_PRAGMA_TEMPLATES__ //#pragma define_template NOMAdapter_TMatrix //#pragma define_template NOMAdapter_TMatrix #pragma define_template NOMAdapter_TMatrix #pragma define_template NOMAdapter_TMatrix #pragma define_template NOMAdapter_TMatrix #pragma define_template NOMAdapter_TMatrix< complex > #pragma define_template NOMAdapter_TMatrix< complex > //#pragma define_template NTupInt_TMatrix //#pragma define_template NTupInt_TMatrix #pragma define_template NTupInt_TMatrix #pragma define_template NTupInt_TMatrix #pragma define_template NTupInt_TMatrix #pragma define_template NTupInt_TMatrix< complex > #pragma define_template NTupInt_TMatrix< complex > #endif #if defined(ANSI_TEMPLATES) //template class NOMAdapter_TMatrix; //template class NOMAdapter_TMatrix; template class NOMAdapter_TMatrix; template class NOMAdapter_TMatrix; template class NOMAdapter_TMatrix; template class NOMAdapter_TMatrix< complex >; template class NOMAdapter_TMatrix< complex >; // template class NTupInt_TMatrix; // template class NTupInt_TMatrix; template class NTupInt_TMatrix; template class NTupInt_TMatrix; template class NTupInt_TMatrix; template class NTupInt_TMatrix< complex >; template class NTupInt_TMatrix< complex >; #endif