// Persistence manager for template numerical arrays // R. Ansari, C.Magneville 03/2000 #include "pexceptions.h" #include "fioarr.h" // -------------------------------------------------------- // Les objets delegues pour la gestion de persistance // -------------------------------------------------------- /////////////////////////////////////////////////////////// template FIO_TArray::FIO_TArray() { dobj=new TArray; ownobj=true; } template FIO_TArray::FIO_TArray(string const & filename) { dobj=new TArray; ownobj=true; Read(filename); } template FIO_TArray::FIO_TArray(const TArray & obj) { dobj = new TArray(obj); ownobj=true; } template FIO_TArray::FIO_TArray(TArray * obj) { dobj = obj; ownobj=false; } template FIO_TArray::~FIO_TArray() { if (ownobj && dobj) delete dobj; } template AnyDataObj* FIO_TArray::DataObj() { return(dobj); } template void FIO_TArray::SetDataObj(AnyDataObj & o) { TArray * po = dynamic_cast< TArray * >(&o); if (po == NULL) return; if (ownobj && dobj) delete dobj; dobj = po; ownobj = false; } template void FIO_TArray::ReadSelf(PInPersist& is) { // On lit les 3 premiers uint_4 // 0: Numero de version, : NRows, 2 : NCol uint_4 itab[5]; is.Get(itab,5); if (dobj == NULL) dobj = new TArray; // On lit les tailles, etc ... is.Get(dobj->ndim_); is.Get(dobj->size_, BASEARRAY_MAXNDIMS); is.Get(dobj->totsize_); is.Get(dobj->step_, BASEARRAY_MAXNDIMS); is.Get(dobj->minstep_); is.Get(dobj->moystep_); is.Get(dobj->offset_); is.Get(dobj->marowi_); is.Get(dobj->macoli_); // On lit le datablock is >> dobj->DataBlock(); // On ecrit le DVList info si necessaire if (itab[2] != 0) is >> dobj->Info(); } template void FIO_TArray::WriteSelf(POutPersist& os) const { if (dobj == NULL) return; // On ecrit 4 uint_4 .... // 0: Numero de version, 1 : Type (Array, matrix, Vector, ...) 2 != 0 , has Info uint_4 itab[5]; itab[0] = 1; // Numero de version a 1 itab[1] = 0; itab[2] = (dobj->mInfo != NULL) ? 1 : 0; itab[3] = itab[4] = 0; os.Put(itab,3); // On ecrit les tailles, etc ... os.Put(dobj->ndim_); os.Put(dobj->size_, BASEARRAY_MAXNDIMS); os.Put(dobj->totsize_); os.Put(dobj->step_, BASEARRAY_MAXNDIMS); os.Put(dobj->minstep_); os.Put(dobj->moystep_); os.Put(dobj->offset_); os.Put(dobj->marowi_); os.Put(dobj->macoli_); // On ecrit le datablock os << dobj->DataBlock(); // On ecrit le DVList info si necessaire if (itab[2] != 0) os << dobj->Info(); } /////////////////////////////////////////////////////////////// #ifdef __CXX_PRAGMA_TEMPLATES__ // Instances des delegues FileIO (PPersist) #pragma define_template FIO_TArray #pragma define_template FIO_TArray #pragma define_template FIO_TArray #pragma define_template FIO_TArray #pragma define_template FIO_TArray #pragma define_template FIO_TArray #pragma define_template FIO_TArray #pragma define_template FIO_TArray #pragma define_template FIO_TArray #pragma define_template FIO_TArray< complex > #pragma define_template FIO_TArray< complex > #endif #if defined(ANSI_TEMPLATES) || defined(GNU_TEMPLATES) // Instances des delegues FileIO (PPersist) template class FIO_TArray; template class FIO_TArray; template class FIO_TArray; template class FIO_TArray; template class FIO_TArray; template class FIO_TArray; template class FIO_TArray; template class FIO_TArray; template class FIO_TArray; template class FIO_TArray< complex >; template class FIO_TArray< complex >; #endif