// This may look like C code, but it is really -*- C++ -*- // Classe de gestion des I/O fichiers des objets // R.Ansari 04/99 // LAL (Orsay) / IN2P3-CNRS DAPNIA/SPP (Saclay) / CEA #ifndef OBJFILEIO_H_SEEN #define OBJFILEIO_H_SEEN #include "machdefs.h" #include "anydataobj.h" #include "ppersist.h" namespace PlanckDPC { /* // Pour gerer les Persist I/O de tableaux numerique templates template void PIOSReadArray(PInPersist & is, T* arr, size_t n); template void PIOSWriteArray(POutPersist & os, T const * arr, size_t n); */ template class ObjFileIO : public PPersist { public : ObjFileIO() { dobj=new T; } ObjFileIO(string const & filename) { dobj=new T; Read(filename); } ObjFileIO(const T & obj) { dobj = new T(obj); } ObjFileIO(const T * obj) { dobj = new T(*obj); } virtual ~ObjFileIO() { if (dobj) delete dobj; } virtual AnyDataObj* DataObj() { return(dobj); } inline operator T() { return(*dobj); } protected : virtual void ReadSelf(PInPersist&); virtual void WriteSelf(POutPersist&) const; T * dobj; }; // Fonctions d'ecriture de tableaux numeriques inline void PIOSReadArray(PInPersist & is, uint_1 * arr, size_t n) { is.GetBytes(arr, n); } inline void PIOSReadArray(PInPersist & is, uint_2 * arr, size_t n) { is.Get(arr, n); } inline void PIOSReadArray(PInPersist & is, int_2 * arr, size_t n) { is.Get(arr, n); } inline void PIOSReadArray(PInPersist & is, uint_4 * arr, size_t n) { is.Get(arr, n); } inline void PIOSReadArray(PInPersist & is, int_4 * arr, size_t n) { is.Get(arr, n); } inline void PIOSReadArray(PInPersist & is, uint_8 * arr, size_t n) { is.Get(arr, n); } inline void PIOSReadArray(PInPersist & is, int_8 * arr, size_t n) { is.Get(arr, n); } inline void PIOSReadArray(PInPersist & is, r_4 * arr, size_t n) { is.Get(arr, n); } inline void PIOSReadArray(PInPersist & is, r_8 * arr, size_t n) { is.Get(arr, n); } inline void PIOSReadArray(PInPersist & is, complex * arr, size_t n) { r_4 * pr = (r_4 *)arr; is.Get(pr, n*2); } inline void PIOSReadArray(PInPersist & is, complex * arr, size_t n) { r_8 * pr = (r_8 *)arr; is.Get(pr, n*2); } // Fonctions d ecriture de tableaux de nombre inline void PIOSWriteArray(POutPersist & os, uint_1 const * arr, size_t n) { os.PutBytes(arr, n); } inline void PIOSWriteArray(POutPersist & os, uint_2 const * arr, size_t n) { os.Put(arr, n); } inline void PIOSWriteArray(POutPersist & os, int_2 const * arr, size_t n) { os.Put(arr, n); } inline void PIOSWriteArray(POutPersist & os, uint_4 const * arr, size_t n) { os.Put(arr, n); } inline void PIOSWriteArray(POutPersist & os, int_4 const * arr, size_t n) { os.Put(arr, n); } inline void PIOSWriteArray(POutPersist & os, uint_8 const * arr, size_t n) { os.Put(arr, n); } inline void PIOSWriteArray(POutPersist & os, int_8 const * arr, size_t n) { os.Put(arr, n); } inline void PIOSWriteArray(POutPersist & os, r_4 const * arr, size_t n) { os.Put(arr, n); } inline void PIOSWriteArray(POutPersist & os, r_8 const * arr, size_t n) { os.Put(arr, n); } inline void PIOSWriteArray(POutPersist & os, complex const * arr, size_t n) { r_4 const * pr = (r_4 const *)arr; os.Put(pr, n*2); } inline void PIOSWriteArray(POutPersist & os, complex const * arr, size_t n) { r_8 const * pr = (r_8 const *)arr; os.Put(pr, n*2); } } // Fin namespace #endif