Index: trunk/SophyaLib/BaseTools/dvlist.cc
===================================================================
--- trunk/SophyaLib/BaseTools/dvlist.cc	(revision 2695)
+++ trunk/SophyaLib/BaseTools/dvlist.cc	(revision 2698)
@@ -537,5 +537,6 @@
 bool ok=true;
 buf[0] = '\0';
-dobj->Clear();
+if (dobj == NULL) dobj = new DVList; 
+else dobj->Clear();
 
 //  itab -  0 : Version,  1 : NVar,  2  : Comment length, 3 reserved
Index: trunk/SophyaLib/BaseTools/objfio.h
===================================================================
--- trunk/SophyaLib/BaseTools/objfio.h	(revision 2695)
+++ trunk/SophyaLib/BaseTools/objfio.h	(revision 2698)
@@ -19,8 +19,5 @@
 
 public :
-	    ObjFileIO() { dobj=new T; ownobj=true; }
-	    ObjFileIO(string const & filename) 
-                        { dobj=new T; ownobj=true; Read(filename); }
-	    ObjFileIO(const T & obj) { dobj = new T(obj); ownobj=true; }
+	    ObjFileIO() { dobj=NULL; ownobj=true; }
 	    ObjFileIO(T * obj) { dobj = obj; ownobj=false; }
   virtual   ~ObjFileIO() { if (ownobj && dobj) delete dobj; }
@@ -39,5 +36,5 @@
   }    
   
-  inline operator T() { return(*dobj); }
+  inline operator T&() { return(*dobj); }
 
 protected :
Index: trunk/SophyaLib/BaseTools/ppersist.cc
===================================================================
--- trunk/SophyaLib/BaseTools/ppersist.cc	(revision 2695)
+++ trunk/SophyaLib/BaseTools/ppersist.cc	(revision 2698)
@@ -281,4 +281,5 @@
 {
   PInPersist inf(fn);
+  inf.SkipToNextObject();
   Read(inf);
 }
@@ -438,4 +439,5 @@
 PInPersist::ReadObject()
 {
+  SkipToNextObject();
   return(GetPPObject());
 }
Index: trunk/SophyaLib/BaseTools/ppfswapper.h
===================================================================
--- trunk/SophyaLib/BaseTools/ppfswapper.h	(revision 2695)
+++ trunk/SophyaLib/BaseTools/ppfswapper.h	(revision 2698)
@@ -27,4 +27,14 @@
   PPFDataSwapper(PInPersist & is) { ppfos = NULL; ppfis = &is;}
   PPFDataSwapper(PInPersist & is, POutPersist & os) { ppfos = &os; ppfis = &is;}
+
+  inline PInPersist & InStream() { return *ppfis; }
+  inline PInPersist & OutStream() { return *ppfos; }
+  inline void SetInStream(PInPersist & is) { ppfis = &is; }
+  inline void SetOutStream(POutPersist & os) { ppfos = &os; }
+
+  // Operateur = , on recopie les pointeurs des streams 
+  inline PPFDataSwapper& operator = (PPFDataSwapper const & a) 
+  { ppfis = a.ppfis;  ppfos = a.ppfos; return *this; }
+
   virtual int_8 WriteToSwap(const T * d, size_t sz, int_8 idx, int_8 oswp=0, bool osw=false)
   {
Index: trunk/SophyaLib/BaseTools/ppftpointerio.h
===================================================================
--- trunk/SophyaLib/BaseTools/ppftpointerio.h	(revision 2695)
+++ trunk/SophyaLib/BaseTools/ppftpointerio.h	(revision 2698)
@@ -44,4 +44,5 @@
 };
 
+DECL_TEMP_SPEC  /* equivalent a template <> , pour SGI-CC en particulier */
 class PPF_TPointer_IO<int_1> {
 public:
@@ -49,4 +50,5 @@
   static void Read(PInPersist & is, int_1 * arr, size_t n);
 };
+DECL_TEMP_SPEC  /* equivalent a template <> , pour SGI-CC en particulier */
 class PPF_TPointer_IO<uint_1> {
 public:
@@ -55,4 +57,5 @@
 };
 
+DECL_TEMP_SPEC  /* equivalent a template <> , pour SGI-CC en particulier */
 class PPF_TPointer_IO<int_2> {
 public:
@@ -60,4 +63,5 @@
   static void Read(PInPersist & is, int_2 * arr, size_t n);
 };
+DECL_TEMP_SPEC  /* equivalent a template <> , pour SGI-CC en particulier */
 class PPF_TPointer_IO<uint_2> {
 public:
@@ -66,4 +70,5 @@
 };
 
+DECL_TEMP_SPEC  /* equivalent a template <> , pour SGI-CC en particulier */
 class PPF_TPointer_IO<int_4> {
 public:
@@ -71,4 +76,5 @@
   static void Read(PInPersist & is, int_4 * arr, size_t n);
 };
+DECL_TEMP_SPEC  /* equivalent a template <> , pour SGI-CC en particulier */
 class PPF_TPointer_IO<uint_4> {
 public:
@@ -77,4 +83,5 @@
 };
 
+DECL_TEMP_SPEC  /* equivalent a template <> , pour SGI-CC en particulier */
 class PPF_TPointer_IO<int_8> {
 public:
@@ -82,4 +89,5 @@
   static void Read(PInPersist & is, int_8 * arr, size_t n);
 };
+DECL_TEMP_SPEC  /* equivalent a template <> , pour SGI-CC en particulier */
 class PPF_TPointer_IO<uint_8> {
 public:
@@ -88,4 +96,5 @@
 };
 
+DECL_TEMP_SPEC  /* equivalent a template <> , pour SGI-CC en particulier */
 class PPF_TPointer_IO<r_4> {
 public:
@@ -93,4 +102,5 @@
   static void Read(PInPersist & is, r_4 * arr, size_t n);
 };
+DECL_TEMP_SPEC  /* equivalent a template <> , pour SGI-CC en particulier */
 class PPF_TPointer_IO<r_8> {
 public:
@@ -99,4 +109,5 @@
 };
 
+DECL_TEMP_SPEC  /* equivalent a template <> , pour SGI-CC en particulier */
 class PPF_TPointer_IO< complex<r_4> > {
 public:
@@ -104,4 +115,5 @@
   static void Read(PInPersist & is, complex<r_4> * arr, size_t n);
 };
+DECL_TEMP_SPEC  /* equivalent a template <> , pour SGI-CC en particulier */
 class PPF_TPointer_IO< complex<r_8> > {
 public:
Index: trunk/SophyaLib/BaseTools/segdatablock.h
===================================================================
--- trunk/SophyaLib/BaseTools/segdatablock.h	(revision 2695)
+++ trunk/SophyaLib/BaseTools/segdatablock.h	(revision 2698)
@@ -43,7 +43,8 @@
   //! Return the current size of the segmented data structure
   inline size_t Size() const    { return  SegmentSize()*NbSegments(); }
-  //! Return pointer to data segment \b k
-  virtual T* GetSegment(size_t k) = 0;         
-  virtual T const * GetSegment(size_t k) const = 0; 
+  //! Return the pointer to data segment \b k
+  virtual T* GetSegment(size_t k) = 0;   
+  //! Return the const (read-only) pointer to data segment \b k      
+  virtual T const * GetCstSegment(size_t k) const = 0; 
 };
 
@@ -141,5 +142,5 @@
       if (cpval) {
 	T * dst = GetSegment(k);
-	const T * src = a.GetSegment(k);
+	const T * src = a.GetCstSegment(k);
 	memcpy(dst, src, mSRef->segsize*sizeof(T));
       }
@@ -155,7 +156,8 @@
   inline size_t Size() const    { return mSRef->segsize*mSRef->dseg.size(); }
 
-  //! Return pointer to data segment \b k
+  //! Return the pointer to data segment \b k      
   virtual T* GetSegment(size_t k)              { return mSRef->dseg[k]; } 
-  virtual T const * GetSegment(size_t k) const { return mSRef->dseg[k]; } 
+  //! Return the const (read-only) pointer to data segment \b k      
+  virtual T const * GetCstSegment(size_t k) const { return mSRef->dseg[k]; } 
 
   //! Return the segment index for  element \b i
Index: trunk/SophyaLib/BaseTools/swsegdb.h
===================================================================
--- trunk/SophyaLib/BaseTools/swsegdb.h	(revision 2695)
+++ trunk/SophyaLib/BaseTools/swsegdb.h	(revision 2698)
@@ -99,5 +99,5 @@
   //! Return the current size of the segmented data structure
   inline size_t Size() const    { return  mSRef->swp.size()*mSRef->segsize; }
-  //! Return pointer to data segment \b k
+  //! Return the pointer to data segment \b k
   virtual T* GetSegment(size_t k) 
   {
@@ -106,6 +106,6 @@
     return mSRef->buff;
   }
-         
-  virtual T const * GetSegment(size_t k) const 
+  //! Return the const (read-only) pointer to data segment \b k         
+  virtual T const * GetCstSegment(size_t k) const 
   {
     getSeg(k);
