Index: /trunk/SophyaLib/Manual/modifs.tex
===================================================================
--- /trunk/SophyaLib/Manual/modifs.tex	(revision 2715)
+++ /trunk/SophyaLib/Manual/modifs.tex	(revision 2716)
@@ -7,5 +7,5 @@
 % \usepackage{times}
 % package pour ecrire DRAFT en fond de page 
-\usepackage[light,all,draft]{draftcopy}
+% \usepackage[light,all,draft]{draftcopy}
 
 % \usepackage{epsfig}
@@ -31,5 +31,5 @@
 {\Large \bf Liste de modifications de SOPHYA } \\[5mm]
 { \large (fait ou  faire ) } \\
-{\large Janvier 2003 - Dcembre 2004 } \\[25mm]
+{\large Janvier 2003 - Mai 2005 } \\[25mm]
 Liste des tags et dates : \\[5mm]
 {\large 
@@ -213,5 +213,5 @@
 \item[\rond] Dcembre 2003 - Ajout ppfbinstream.h .cc \\
 Classes PPFBinaryIOStream , PPFBinaryInputStream , PPFBinaryOutputStream
-\item[\rond] Dcembre 2004 (9/12/2004) Fin de l'ensemble des modifs pour les
+\item[\rond] Dcembre 2003 (9/12/2003) Fin de l'ensemble des modifs pour les
 PPF V3 \\
 - Ecriture nombre complexes r4, r8 avec tag spcifique. \\
@@ -225,10 +225,36 @@
 \centerline{\tt  int\_8 WritePositionTag() PutPosTagTable(...) } 
 - Ajout programme de test Tests/ppftswap.cc
+\item[\rond] Avril 2005 - Ajout de wrapper de lecture/ecriture PPF pour les vecteurs de
+la librairie standard (classe PPFWrapperSTLVector<T> ) fichier ppfwrapstlv.h
+\item[\rond] Ajout de la classes utilitaire PPF\_TPointer\_IO$<$T$>$ 
+(fichiers ppftpointer.h .cc)
+\item[\rond] Amelioration de l'impression ds AnalyseTags (ppfbinstream.cc)
+\item[\rond] scanppf.cc revision 1.8 (2005/04/05)
+modification programme scanppf: ajout option -lh -lho pour lister les classes PP
+ersist handler
+
 \end{itemize}
+
+
+
+\subsection{Segmented Data Block}
+Mars-Avril 2005: Introduction des classes similaires aux NDataBlock, mais permettant 
+de gerer des blocs de donnees segementes, pour tout type de donnees, de structures
+et de classes (template pour tout type <T>).
+Extrait du log CVS du 2005/04/07 
+\begin{verbatim}
+1/ Ajout de la classe SegDataBlock<T> (et l'interface SegDBInterface<T>)
+pour la gestion de blocs de donnees segmentes (segdatablock.h) et son
+gestionnaire PPF FIO_SegDataBlock<T> (fichier fiosegdb.h )
+2/ Ajout de la classe SwSegDataBlock<T> (Data bloc segmente avec gestion
+de swap) et la classe swapper PPF PPFDataSwapper<T> (fichiers
+ppfswapper.h et swsegdb.h)
+\end{verbatim}
+
 
 \section{TArray}
 \begin{itemize}
 \item Optimisation de la multiplication matricielle (CMV) - Extrait du 
-message (from CMV) du 30 Juillet 2004: 
+message (from CMV) du 30 Juillet 2004: \\
 \begin{verbatim}
 - on definit un flag d'optimisation
@@ -340,45 +366,109 @@
 Ajout classe HistoErr (Septembre-Octobre 2004) 
 
-\subsection{ SuperNTuple (Message du 8 Juillet 2004) }
-\begin{verbatim}
-Classe Record ou  DynamicStruct
-Record = Une ligne de ntuple - Un ensemble de noms de variables et de type
-(integer, float, double, ...)
-
-class Record {
-  AddField(string fieldname, fieldtype, defval);
-  ....
+\subsection{NTuple}
+la classe NTuple peut maintenant avoir des colonnes float ou double.
+Il y a maintenant deux methodes Fill(r\_4 *) et Fill(r\_8 *)
+Les noms ne sont plus limites a 8 caracteres.
+
+
+\subsection{ Les DataTable (SuperNTuple) }
+
+\begin{verbatim}
+BaseDataTable                                    
+              --------  DataTable
+              --------  SwPPFDataTable
+\end{verbatim}
+{\bf BaseDataTable} : Classe de base, avec qques methodes virtuelles
+pures, implementent la presque totalite des fonctionalites, en particulier
+celles de l'interface NTupleInterface.
+
+{\bf DataTable} : Implementation concrete de BaseDataTable avec donnees en 
+memoire (utilise SegDataBlock<T> pour stocker les colonnes)
+
+{\bf SwPPFDataTable} : Implementation concrete de BaseDataTable avec donnees 
+en swap sur stream PPF (POutPersist)- Utilise  (SwSegDataBlock<T> avec 
+un data-swapper PPF (classe PPFDataSwapper<T> ) 
+
+DataTable et SwPPFDataTable respecte +/- les conventions SOPHYA , 
+constructeur de copie avec partage ou copie de donnees, operateur = 
+Datatable : partage et copie , = : fait une copie
+SwPPFDataTable : C'est toujours partage (presque par definition)
+Autre point, compte tenu de la structure des streams PPF , 
+les SwPPFDataTable fonctionne en ecriture OU en lecture, mais
+pas les deux a la fois. 
+
+Classe de gestion de persistence commune : \\
+{\bf ObjFileIO<BaseDataTable> }
+
+Lit et ecrit les DataTable et SwPPFDataTable
+Actuellement, on ne peut les relires que dans le meme type,
+cad on ne peut relire avec un SwPPFDataTable un objet 
+ecrit comme DataTable - mais cette possibilite pourra 
+peut-etre codee ulterieurement (d'ou l'interet en particulier 
+d'un gestionnaire commun ObjFileIO<BaseDataTable>
+
+(les operateurs habituel $<<$ et $>>$ sur PIn/OutPersist sont definies)
+
+\begin{verbatim}
+Actuellement, les colonnes peuvent etre de type 
+int_4  ,  int_8  ,  r_4  ,  r_8  ,  string 
+On pourra ajouter apres  les types suivants :
+complex<r_4>  ,   complex<r_8>  , TimeStamp 
+ 
+Dans BaseDataTable, il reste a remplir la methode
+BaseDataTable ::FillFromASCIIFile(string const& fn)
+BaseDataTable :: Print(int num, int nmax=1) const  
+(on peut utiliser LineToString(sa_size_t n) const
+
+Par contre, les merges et copie sont prevues, 
+on doit en principe pouvoir ecrire par exemple:
+SwPPFDataTable swdt;
+PInPersist pis("swdt.ppf");
+pis >> swdt;
+DataTable dt;
+dt = swdt;  // Pour tout charger en memoire 
+
+On peut aussi ajouter des methodes d'acces aux variables membres pour enrichier l'interface.
+
+PLUS IMPORTANT : il reste a ecrire la classe FITS_BaseDataTable ou FITS_DataTable 
+pour I/O sur fichiers FITS - j'ai regarde FITS_XNTuple qu'on pourra simplifier enormement
+et que devrait etre assez rapide. 
+Il faut aussi faire une classe SwFITSDataTable, en recopiant pas mal de chose ds la classe
+SwPPFDataTable - On pourrait peut-etre avoir une classe intermediaire qui regroupe
+tout ce qui est commun a SwFITSDataTable et SwPPFDataTable , mais a voir.
+L'element cle sera le codage de FITSDataSwapper<T> qui implemente 
+les deux methodes de DataSwapperInterface<T> - le reste devrait etre du copier/coller
+essentiellement. 
+
+PIAPP : 
+Cote piapp, les DataTable et SwPPFDataTable  sont pris en charge par 
+NOMAdapter_DataTable (qui prend en charge tous les 'BaseDataTable' )
+Il faudrait peut-etre rajouter deux commandes :
+newdt ou newdatatable 
+newdt ncol col1 [col2 .... ] 
+avec possibilite de specifier coli sous fome de X:colname ou X = D,F,S,I,L ...
+et puis dtfromascii  ...
+
+Voir Tests/tnt.cc pour exemple d'utilisation :
+DataTable dt(64);
+dt.AddIntegerColumn("line");
+dt.AddDoubleColumn("x");
+dt.AddFloatColumn("f_sin");
+MuTyV rec[10];
+for(int k = 0; k<1000; k++) {
+  rec[0] = k;
+  double x = M_PI*k/100.;
+  double fx = sin(x)*cos(x);
+  rec[1] = x;
+  rec[2] = sin(x);
 }
-
-Le superntuple (classe DataTable ?) est cree avec un objet record configure. 
-
-class DataTable {
-  DataTable(Record & rec);
-  Record  GetRecord();  // On pourra l'utiliser pour remplir le NTuple
-  void Fill(Record& rec);
-  Record GetLine(int numline);
-  Vector  GetColumn(string colname);
-  ....
-}
-
-Pour implementer la classe DataTable, je pense qu'il faut utiliser une 
-classe intermediaire SwapDataBlock<T> et un DataSwapper
-
-Classe SwapDataBlock<T> ressemble au NDataBlock - sans les operations
-arithmetiques - par contre, il gere plusieurs block de donnees - on peut donc l'etendre.
-Dedans, au lieu d'avoir T * data, il a 
-quelque chose du style vector<T *> * data_pointer_list;
-Un SwapDataBlock<T> qui n'a pas de DataSwapper associ, garde tous
-ses block de donnes en memoire.
-S'il y a un DataSwapper associe, il demande au data-swapper de 'sauver' 
-(swaper) un bloc de donnees, avant de le reutiliser pour de nouvelles donnees,
-au dela d'un nombre maximum de blocs.
-
-La classe DataTable utilise alors un SwapDataBlock<T> pour chaque
-colonne de donnees.
-
-Le DataSwapper de base est une classe virtuelle.
-On pourra alors l'implementer en PPFDataSwapper et 
-puis FITSDataSwapper ... 
+ POutPersist po("dtable.ppf");
+ po << dt;
+
+Pour SwPPFDataTable, il faut juste creer un stream PPF avant, qui doit rester
+ouvert tant que le SwPPFDataTable est actif 
+ POutPersist po("swdtable.ppf");
+ SwPPFDataTable dt(po, 64);
+
 \end{verbatim}
 
