Index: trunk/SophyaLib/BaseTools/ndatablock.cc
===================================================================
--- trunk/SophyaLib/BaseTools/ndatablock.cc	(revision 974)
+++ trunk/SophyaLib/BaseTools/ndatablock.cc	(revision 976)
@@ -114,5 +114,5 @@
 //! Copy constructor
 /*!
-  \warning datas are shared if \b a is temporary, cloned if not.
+  \warning datas are \b SHARED with \b a.
  */
 template <class T>
@@ -199,4 +199,31 @@
 
 //! \b Share with \b a if \b temporary, \b clone from \b a if not.
+/*! \warning For most purposes, users don't have to worry with
+             the "temporary" nature of a NDataBlock. That is used
+             internaly to avoid memory allocation in operation
+             like A = B + C + D for instance. The method is not
+             protected to allow users to write complicated functions
+             on NDataBlock.
+  \verbatim
+  ----------------------------------------------------------
+  Pourquoi une complication avec la notion de "temporaire" :
+  ----------------------------------------------------------
+  - Le constructeur par copie partageant les donnees,
+    dans une methode un { NDataBlock<T> result; ...; return result;}
+    ne va pas allouer de la memoire pour retourner "result".
+  - La gestion de temporaire sert quand on enchaine plusieurs
+    operations sur la meme ligne, par exemple : A = B+C+D;
+    Dans ce cas l'objet CD=C+D est d'abord alloue et rempli
+    avec C+D, puis CD est mis a "temporaire".
+    Quand on ajoute B a CD, la methode d'addition va se rendre compte
+    que CD est "temporaire" et additionner B "in-place" dans CD
+    sans allouer une fois de plus de la place (pas d'allocation
+    de place BCD pour mettre B+CD mais une operation CD += B).
+    Si la notion d'objet "temporaire" n'avait pas ete consideree
+    l'addition A = B+C+D aurait alloue de la place pour "CD=C+D"
+    puis pour BCD=B+CD : 2 allocations auraient ete necessaires
+    contre 1 seule dans notre cas de geston de "temporaire".
+  \endverbatim
+*/
 template <class T>
 void NDataBlock<T>::CloneOrShare(const NDataBlock<T>& a)
@@ -473,6 +500,6 @@
 ///////////////////////////////////////////////////////////////
 
-//! Operator = : ND = ND1
-/*! \warning share if \b a is temporary, clone if not */
+//! Operator = : ND = NDa
+/*! \warning Datas are copied (cloned) from \b a. */
 template <class T>
 NDataBlock<T>& NDataBlock<T>::operator = (const NDataBlock<T>& a)
@@ -487,8 +514,5 @@
 if(a.mSz==0)
   throw(SzMismatchError("NDataBlock::operator=A null size \n"));
-if (mSz==0) {  
-  CloneOrShare(a);
-  return *this;
-}
+if (mSz==0) { CloneOrShare(a); return *this; }
 if (a.mSz != mSz)
   throw(SzMismatchError("NDataBlock::operator=A Unequal sizes \n"));
@@ -506,8 +530,6 @@
       <<" mSz="<<mSz<<" mSRef="<<mSRef<<" IsTemp="<<mIsTemp<<endl;
 
-
 if(mSz==0) throw(SzMismatchError("NDataBlock::operator=v null size\n"));
-T *p=Begin(), *pe=End();
-while (p<pe) *p++ = v;
+T *p=Begin(), *pe=End(); while (p<pe) *p++ = v;
 return *this;
 }
@@ -522,6 +544,5 @@
 {
 if(mSz==0) throw(SzMismatchError("NDataBlock::operator+=v null size\n"));
-T *p=Begin(), *pe=End();
-while (p<pe) *p++ += b;
+T *p=Begin(), *pe=End(); while (p<pe) *p++ += b;
 return *this;
 }
@@ -532,6 +553,5 @@
 {
 if(mSz==0) throw(SzMismatchError("NDataBlock::operator-=v null size\n"));
-T *p=Begin(), *pe=End();
-while (p<pe) *p++ -= b;
+T *p=Begin(), *pe=End(); while (p<pe) *p++ -= b;
 return *this;
 }
@@ -542,10 +562,9 @@
 {
 if(mSz==0) throw(SzMismatchError("NDataBlock::operator*=v null size\n"));
-T *p=Begin(), *pe=End();
-while (p<pe) *p++ *= b;
-return *this;
-}
-
-//! Divide by a constant : ND *= b
+T *p=Begin(), *pe=End(); while (p<pe) *p++ *= b;
+return *this;
+}
+
+//! Divide by a constant : ND /= b
 template <class T>
 NDataBlock<T>& NDataBlock<T>::operator /= (T b)
@@ -553,6 +572,5 @@
 if(b==(T) 0) throw(ParmError("NDataBlock::operator/=v divide by zero\n"));
 if(mSz==0) throw(SzMismatchError("NDataBlock::operator/=v null size\n"));
-T *p=Begin(), *pe=End();
-while (p<pe) *p++ /= b;
+T *p=Begin(), *pe=End(); while (p<pe) *p++ /= b;
 return *this;
 }
@@ -562,5 +580,5 @@
 ////////////////////////////////////////////////////////////////////
 
-//! Add a NDataBlock : ND += ND1
+//! Add a NDataBlock : ND += NDa
 template <class T>
 NDataBlock<T>& NDataBlock<T>::operator += (const NDataBlock<T>& a)
@@ -574,5 +592,5 @@
 }
 
-//! Substract a NDataBlock : ND -= ND1
+//! Substract a NDataBlock : ND -= NDa
 template <class T>
 NDataBlock<T>& NDataBlock<T>::operator -= (const NDataBlock<T>& a)
@@ -586,5 +604,5 @@
 }
 
-//! Multiply by a NDataBlock : ND *= ND1
+//! Multiply by a NDataBlock : ND *= NDa
 template <class T>
 NDataBlock<T>& NDataBlock<T>::operator *= (const NDataBlock<T>& a)
@@ -598,5 +616,5 @@
 }
 
-//! Divide by a NDataBlock : ND *= ND1
+//! Divide by a NDataBlock : ND /= NDa
 template <class T>
 NDataBlock<T>& NDataBlock<T>::operator /= (const NDataBlock<T>& a)
@@ -607,12 +625,13 @@
 T *p=Begin(), *pe=End();
 T const *pa=a.Begin();
-while (p<pe) *p++ /= *pa++;
-return *this;
-}
-
-////////////////////////////////////////////////////////////////
-// Pour surcharge de +,-,*,/ : NDataBlock = NDataBlock1+<T>b; //
-//                             NDataBlock = <T>b+NDataBlock1; //
-////////////////////////////////////////////////////////////////
+while (p<pe) *p++ /= *pa++; // Division par zero non protegee
+return *this;
+}
+
+//////////////////////////////////////////////////////////////////
+// Pour surcharge de +,-,*,/ : NDataBlock = NDataBlock1+<T>b;   //
+//                             NDataBlock = <T>b+NDataBlock1;   //
+// Pour la notion de "temporaire" voir blabla dans CloneOrShare //
+//////////////////////////////////////////////////////////////////
 
 //! Add a constant and return NDataBlock : NDret = ND + b
@@ -627,57 +646,53 @@
 }
 
-//! Substract a constant and return NDataBlock : NDret = ND - b
-template <class T>
-NDataBlock<T> NDataBlock<T>::Sub(T b) const
-// Pour A-b
+//! Substract a constant and return NDataBlock : NDret = ND - b or NDret = b - ND
+/*! Substract a constant or from a constant
+   \param fginv==false : performs NDret = ND - b (default)
+   \param fginv==true : performs NDret = b - ND
+*/
+template <class T>
+NDataBlock<T> NDataBlock<T>::Sub(T b,bool fginv) const
+// Pour A-b sauf si fginv==true b-A (- n'est pas commutatif!)
 {
 NDataBlock<T> result; 
 result.CloneOrShare(*this); result.SetTemp(true);
-return result -= b;
-}
-
-//! Substract from a constant and return NDataBlock : NDret = b - ND
-template <class T>
-NDataBlock<T> NDataBlock<T>::SubInv(T b) const
-// Pour b-A
+if(fginv) {
+  T *p=result.Begin(), *pe=result.End();
+  T const *pa=this->Begin();
+  while(p<pe) {*p++ = b - *pa++;}
+} else result -= b;
+return result;
+}
+
+//! Multiply by a constant and return NDataBlock : NDret = ND * b
+template <class T>
+NDataBlock<T> NDataBlock<T>::Mul(T b) const
+// Pour A*b
 {
 NDataBlock<T> result; 
 result.CloneOrShare(*this); result.SetTemp(true);
-T *p=result.Begin(), *pe=result.End();
-T const *pa=this->Begin();
-while(p<pe) {*p++ = b - *pa++;}
+result *= b;
 return result;
 }
 
-//! Multiply by a constant and return NDataBlock : NDret = ND * b
-template <class T>
-NDataBlock<T> NDataBlock<T>::Mul(T b) const
-// Pour A*b
+//! Divide by a constant and return NDataBlock : NDret = ND / b or NDret = b / ND
+/*! Divide by a constant or from a constant
+   \param fginv==false : performs NDret = ND / b (default)
+   \param fginv==true : performs NDret = b / ND
+*/
+template <class T>
+NDataBlock<T> NDataBlock<T>::Div(T b,bool fginv) const
+// Pour A/b sauf si fginv==true b/A (/ n'est pas commutatif!)
 {
 NDataBlock<T> result; 
 result.CloneOrShare(*this); result.SetTemp(true);
-return result *= b;
-}
-
-//! Divide by a constant and return NDataBlock : NDret = ND / b
-template <class T>
-NDataBlock<T> NDataBlock<T>::Div(T b) const
-// Pour A/b
-{
-NDataBlock<T> result; 
-result.CloneOrShare(*this); result.SetTemp(true);
-return result /= b;
-}
-
-//! Divide from a constant and return NDataBlock : NDret = b / ND
-template <class T>
-NDataBlock<T> NDataBlock<T>::DivInv(T b) const
-// Pour b/A
-{
-NDataBlock<T> result; 
-result.CloneOrShare(*this); result.SetTemp(true);
-T *p=result.Begin(), *pe=result.End();
-T const *pa = this->Begin();
-while(p<pe) {*p++ = b / *pa++;}
+ if(fginv) {
+  T *p=result.Begin(), *pe=result.End();
+  T const *pa = this->Begin();
+  while(p<pe) {*p++ = b / *pa++;} // Division par zero non protegee
+} else {
+  if( b == (T) 0 ) throw MathExc("NDataBlock<T>::Div(T)  - Divide by zero ! ");
+  result /= b;
+}
 return result;
 }
@@ -740,5 +755,5 @@
   result.Share(b);
   T *p=result.Begin(), *pe=result.End(); T const *pa=Begin();
-  while(p<pe) {*p = *pa++  / *p; p++;}
+  while(p<pe) {*p = *pa++  / *p; p++;} // Division par zero non protegee
 } else {result.CloneOrShare(*this); result /= b;}
 return result;
Index: trunk/SophyaLib/BaseTools/ndatablock.h
===================================================================
--- trunk/SophyaLib/BaseTools/ndatablock.h	(revision 974)
+++ trunk/SophyaLib/BaseTools/ndatablock.h	(revision 976)
@@ -133,16 +133,12 @@
   // Surcharge d'operateurs: C = A @ x , C = A @ B
   NDataBlock<T> Add(T b) const;
-  NDataBlock<T> Sub(T b) const;
-  NDataBlock<T> SubInv(T b) const;
+  NDataBlock<T> Sub(T b,bool fginv=false) const;
   NDataBlock<T> Mul(T b) const;
-  NDataBlock<T> Div(T b) const;
-  NDataBlock<T> DivInv(T b) const;
+  NDataBlock<T> Div(T b,bool fginv=false) const;
 
   NDataBlock<T> Add(const NDataBlock<T>& b) const;
   NDataBlock<T> Sub(const NDataBlock<T>& b) const;
-  NDataBlock<T> SubInv(const NDataBlock<T>& b) const;
   NDataBlock<T> Mul(const NDataBlock<T>& b) const;
   NDataBlock<T> Div(const NDataBlock<T>& b) const;
-  NDataBlock<T> DivInv(const NDataBlock<T>& b) const;
 
 protected:
@@ -186,5 +182,5 @@
 template<class T>
 inline NDataBlock<T> operator - (T b,const NDataBlock<T>& a)
-                      {return a.SubInv(b);}
+                      {return a.Sub(b,true);}
 //! Multiply datas by a constant and return NDataBlock : ND = NDa * b
 template<class T>
@@ -202,5 +198,5 @@
 template<class T>
 inline NDataBlock<T> operator / (T b,const NDataBlock<T>& a)
-                      {return a.DivInv(b);}
+                      {return a.Div(b,true);}
 
 //! Add datas of two data blocks and return NDataBlock : ND = NDa + NDb
Index: trunk/SophyaLib/Manual/dox_sophya.conf
===================================================================
--- trunk/SophyaLib/Manual/dox_sophya.conf	(revision 974)
+++ trunk/SophyaLib/Manual/dox_sophya.conf	(revision 976)
@@ -16,5 +16,5 @@
 # if some version control system is used.
 
-PROJECT_NUMBER       = 0.9.36 V_Avr2000
+PROJECT_NUMBER       = 
 
 # The OUTPUT_DIRECTORY tag is used to specify the (relative or absolute) 
@@ -191,5 +191,5 @@
 # with spaces.
 
-INPUT = ../SysTools ../TArray ../NTools ../HiStats
+INPUT = 
 
 # If the value of the INPUT tag contains directories, you can use the 
@@ -222,5 +222,5 @@
 # the \include command).
 
-EXAMPLE_PATH         = ../SysTools ../TArray ../NTools
+EXAMPLE_PATH         = 
 
 # If the value of the EXAMPLE_PATH tag contains directories, you can use the
Index: trunk/SophyaLib/Manual/mkmf
===================================================================
--- trunk/SophyaLib/Manual/mkmf	(revision 974)
+++ trunk/SophyaLib/Manual/mkmf	(revision 976)
@@ -1,11 +1,54 @@
 #!/bin/csh
-###################################################
+#####################################################
 if( $#argv >= 1 ) then
   if( "$1" == "-h" ) then
-    echo "mkmf [module1] [module2] [...]"
+    echo "mkmf [-options] [-o dir] [module1] [module2] [...]"
     echo "  generate documentation for all Sophya"
-    echo "  or only for module [module]"
-    exit 0
+    echo "  or only for module [module...]"
+    echo "  **** [-options] :"
+    echo "  -html : generate HTML doc"
+    echo "  -latex : generate LATEX doc"
+    echo "  -man : generate MAN doc"
+    echo "  -rtf : generate RTF doc"
+    echo "  default is : html + latex"
+    echo "  **** [-o dir] : directory where doc have to be put"
+    echo "  default is ."
+    exit -1
   endif
+endif
+#####################################################
+
+##################################
+######## Decode arguments ########
+##################################
+set allmodules = ( SysTools TArray NTools HiStats )
+unset modules; unset latex; unset html; unset man; unset rtf
+set outdir = "."
+if( $#argv >= 1 ) then
+  while ( $#argv > 0)
+    if( "$1" == "-o" ) then
+      shift
+      set outdir = $1
+    else if( "$1" == "-html" ) then
+      set html
+    else if( "$1" == "-latex" ) then
+      set latex
+    else if( "$1" == "-man" ) then
+      set man
+    else if( "$1" == "-rtf" ) then
+      set rtf
+    else
+      if( ! $?modules ) set modules
+      set modules = ( $modules $1 )
+    endif
+    shift
+  end
+endif
+if( ! $?html  && ! $?latex  && ! $?man  && ! $?rtf ) then
+  set html
+  set latex
+endif
+if( ! $?modules ) then
+  set modules = ( $allmodules )
 endif
 
@@ -14,11 +57,12 @@
 ##########################################
 
+#------------
 # mydoxy.conf
+#------------
 cp dox_sophya.conf mydoxy.conf
-foreach n ( 1 2 3 4 5 )
-  echo " " >> mydoxy.conf
-end
 
+#----------
 # doxygen ?
+#----------
 which doxygen >! /dev/null
 if( $status != 0 ) then
@@ -27,5 +71,7 @@
 endif
 
+#-------------
 # doxysearch ?
+#-------------
 which doxysearch >! /dev/null
 if( $status != 0 ) then
@@ -34,6 +80,5 @@
 else
     set s = `which doxysearch`
-  echo 'doxysearch is installed in :'
-  echo $s:h
+  echo 'doxysearch is installed in : ' $s:h
   echo 'mkmf will automatically update the config file.'
     echo "BIN_ABSPATH = $s:h" >>  mydoxy.conf
@@ -41,15 +86,74 @@
 endif
 
-# partial doc ?
-if( $#argv >= 1 ) then
-  echo Partial doc generation :
-    set lf =
-    foreach f ( $* )
-      echo "... adding ../$f to INPUT"
-      set lf = ( ../$f $lf )
-    end
-    echo "INPUT = $lf" >>  mydoxy.conf
-    grep 'INPUT = ' mydoxy.conf | grep -v ^\# | tail -1
+#-----------------
+# Version number ?
+#-----------------
+set f = ../SysTools/sversion.h
+if( -e $f ) then
+  set v = `grep 'SOPHYA_VERSION'  $f | awk '{print $3}'`
+  set r = `grep 'SOPHYA_REVISION' $f | awk '{print $3}'`
+  set t = `grep 'SOPHYA_TAG'      $f | awk '{print $3}'`
+  echo "PROJECT_NUMBER = V${v}_R${r}_${t}" >>  mydoxy.conf
+else
+  echo "PROJECT_NUMBER = Not_Defined" >>  mydoxy.conf
 endif
+grep 'PROJECT_NUMBER = ' mydoxy.conf | tail -1
+
+#---------------
+# What modules ?
+#---------------
+set lf =
+foreach f ( $modules )
+  echo "... Generating doc for ../$f"
+  set lf = ( ../$f $lf )
+end
+echo "INPUT = $lf" >>  mydoxy.conf
+grep 'INPUT = ' mydoxy.conf | tail -1
+
+set lf =
+foreach f ( $allmodules )
+  set lf = ( ../$f $lf )
+end
+echo "EXAMPLE_PATH = $lf" >>  mydoxy.conf
+
+#-------------------
+# What kind of doc ?
+#-------------------
+if( $?html ) then
+  echo "GENERATE_HTML = YES" >>  mydoxy.conf
+  echo "...... generating HTML"
+else
+  echo "GENERATE_HTML = NO" >>  mydoxy.conf
+endif
+if( $?latex ) then
+  echo "GENERATE_LATEX = YES" >>  mydoxy.conf
+  echo "...... generating LATEX"
+else
+  echo "GENERATE_LATEX = NO" >>  mydoxy.conf
+endif
+if( $?man ) then
+  echo "GENERATE_MAN = YES" >>  mydoxy.conf
+  echo "...... generating MAN"
+else
+  echo "GENERATE_MAN = NO" >>  mydoxy.conf
+endif
+if( $?rtf ) then
+  echo "GENERATE_RTF = YES" >>  mydoxy.conf
+  echo "...... generating RTF"
+else
+  echo "GENERATE_RTF = NO" >>  mydoxy.conf
+endif
+
+#------------------------
+# What output directory ?
+#------------------------
+echo "OUTPUT_DIRECTORY = $outdir" >>  mydoxy.conf
+grep 'OUTPUT_DIRECTORY = ' mydoxy.conf | tail -1
+
+#--------------------------
+# Configuration file update
+#--------------------------
+doxygen -u mydoxy.conf >! /dev/null
+rm -f mydoxy.conf.bak
 
 #########################################
Index: trunk/SophyaLib/TArray/sopemtx.cc
===================================================================
--- trunk/SophyaLib/TArray/sopemtx.cc	(revision 974)
+++ trunk/SophyaLib/TArray/sopemtx.cc	(revision 976)
@@ -539,8 +539,9 @@
 TMatrix<T> SimpleMatrixOperation<T>::Inverse(TMatrix<T> const & A) 
 {
-TMatrix<T> a(A);
+TMatrix<T> a(A,false);
 TMatrix<T> b(a.NCols(),a.NRows());  b = IdentityMatrix(1.);
 if( TMatrixRC<T>::Abs_Value(GausPiv(a,b)) < 1.e-50)
   throw(MathExc("TMatrix Inverse() Singular Matrix"));
+b.SetTemp(true);
 return b;
 }
Index: trunk/SophyaLib/TArray/tarray.cc
===================================================================
--- trunk/SophyaLib/TArray/tarray.cc	(revision 974)
+++ trunk/SophyaLib/TArray/tarray.cc	(revision 976)
@@ -105,5 +105,8 @@
 
 //! Constructor by copy
-/*! \sa NDataBlock::NDataBlock(const NDataBlock<T>&) */
+/*!
+  \warning datas are \b SHARED with \b a.
+  \sa NDataBlock::NDataBlock(const NDataBlock<T>&)
+ */
 template <class T>
 TArray<T>::TArray(const TArray<T>& a)
@@ -137,4 +140,8 @@
 
 //! Set array equal to \b a and return *this
+/*!
+  \warning Datas are copied (cloned) from \b a.
+  \sa NDataBlock::operator=(const NDataBlock<T>&)
+*/
 template <class T>
 TArray<T>& TArray<T>::Set(const TArray<T>& a)
@@ -160,4 +167,5 @@
 
 //! Clone if \b a is not temporary, share if temporary
+/*! \sa NDataBlock::CloneOrShare(const NDataBlock<T>&) */
 template <class T>
 void TArray<T>::CloneOrShare(const TArray<T>& a)
Index: trunk/SophyaLib/TArray/tarray.h
===================================================================
--- trunk/SophyaLib/TArray/tarray.h	(revision 974)
+++ trunk/SophyaLib/TArray/tarray.h	(revision 976)
@@ -40,5 +40,6 @@
   // A = B
   //! = operator between TArray
-  /*! \sa Set \sa NDataBlock::operator=(const NDataBlock<T>&) */
+  /*! \warning Datas are copied (cloned) from \b a.
+      \sa Set \sa NDataBlock::operator=(const NDataBlock<T>&) */
   inline  TArray<T>& operator = (const TArray<T>& a) { return Set(a); }
   virtual TArray<T>& Set(const TArray<T>& a);
Index: trunk/SophyaLib/TArray/tmatrix.cc
===================================================================
--- trunk/SophyaLib/TArray/tmatrix.cc	(revision 974)
+++ trunk/SophyaLib/TArray/tmatrix.cc	(revision 976)
@@ -1,3 +1,3 @@
-// $Id: tmatrix.cc,v 1.10 2000-04-26 17:55:10 ansari Exp $
+// $Id: tmatrix.cc,v 1.11 2000-04-27 17:53:51 ansari Exp $
 //                         C.Magneville          04/99
 #include "machdefs.h"
@@ -43,5 +43,8 @@
 
 //! Constructor by copy
-/*! \sa NDataBlock::NDataBlock(const NDataBlock<T>&) */
+/*!
+  \warning datas are \b SHARED with \b a.
+  \sa NDataBlock::NDataBlock(const NDataBlock<T>&)
+*/
 template <class T>
 TMatrix<T>::TMatrix(const TMatrix<T>& a)
@@ -103,5 +106,9 @@
 }
 
-//! Set matirx equal to \b a and return *this
+//! Set matrix equal to \b a and return *this
+/*!
+  \warning Datas are copied (cloned) from \b a.
+  \sa NDataBlock::operator=(const NDataBlock<T>&)
+*/
 template <class T>
 TArray<T>& TMatrix<T>::Set(const TArray<T>& a)
Index: trunk/SophyaLib/TArray/tmatrix.h
===================================================================
--- trunk/SophyaLib/TArray/tmatrix.h	(revision 974)
+++ trunk/SophyaLib/TArray/tmatrix.h	(revision 976)
@@ -25,5 +25,6 @@
   virtual TArray<T>& Set(const TArray<T>& a);
   //! Operator = between matrices
-  /*! \sa NDataBlock::operator=(const NDataBlock<T>&) */
+  /*! \warning Datas are copied (cloned) from \b a.
+      \sa NDataBlock::operator=(const NDataBlock<T>&) */
   inline  TMatrix<T>& operator = (const TMatrix<T>& a)
                      { Set(a);  return(*this); }
Index: trunk/SophyaLib/TArray/tvector.cc
===================================================================
--- trunk/SophyaLib/TArray/tvector.cc	(revision 974)
+++ trunk/SophyaLib/TArray/tvector.cc	(revision 976)
@@ -1,3 +1,3 @@
-// $Id: tvector.cc,v 1.7 2000-04-21 16:31:26 ansari Exp $
+// $Id: tvector.cc,v 1.8 2000-04-27 17:53:52 ansari Exp $
 //                         C.Magneville          04/99
 #include "machdefs.h"
@@ -40,5 +40,8 @@
 
 //! Constructor by copy
-/*! \sa NDataBlock::NDataBlock(const NDataBlock<T>&) */
+/*!
+  \warning datas are \b SHARED with \b a.
+  \sa NDataBlock::NDataBlock(const NDataBlock<T>&)
+*/
 template <class T>
 TVector<T>::TVector(const TVector<T>& a)
Index: trunk/SophyaLib/TArray/tvector.h
===================================================================
--- trunk/SophyaLib/TArray/tvector.h	(revision 974)
+++ trunk/SophyaLib/TArray/tvector.h	(revision 976)
@@ -23,5 +23,6 @@
 
   //! Operator = 
-  /*! \sa NDataBlock::operator=(const NDataBlock<T>&) */
+  /*! \warning Datas are copied (cloned) from \b a.
+      \sa NDataBlock::operator=(const NDataBlock<T>&) */
   inline  TVector<T>& operator = (const TVector<T>& a)
                        { Set(a);  return(*this); }
