Changeset 2699 in Sophya for trunk/SophyaLib/HiStats/datatable.cc


Ignore:
Timestamp:
Apr 27, 2005, 1:48:19 PM (20 years ago)
Author:
ansari
Message:

1/ Corrections diverses ds BaseDataTable, en particulier GetSegment() -> GetCstSegment(), et ameliorations/debug divers
2/ Classe SWPPFDataTable debugge, rendu +/- operationnelle
3/ Gestionnaire PPersist de DataTable et SWPPFDataTable fusionnee en une seule
classe ObjFileIO<BaseDataTable> - mis ds fio_dtable.cc
4/ mis a jour histats.h avec swppfdtable.h, objlist.list et histinit.cc

Reza, 27 Avril 2005

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/SophyaLib/HiStats/datatable.cc

    r2696 r2699  
    217217}
    218218
    219 /*!
    220    \class SOPHYA::ObjFileIO<DataTable>
    221    \ingroup HiStats
    222    Persistence (serialisation) handler for class DataTable
    223 */
    224 /* --Methode-- */
    225 DECL_TEMP_SPEC  /* equivalent a template <> , pour SGI-CC en particulier */
    226 void   ObjFileIO<DataTable>::WriteSelf(POutPersist& s)  const
    227 //      Serialisation en ecriture du DataTable sur stream PPF
    228 {
    229   if (dobj == NULL)   
    230     throw NullPtrError("ObjFileIO<DataTable>::WriteSelf() NULL dobj pointer ");
    231   //-------  On ecrit 3 uint_4 ....
    232   //  [0]: Numero de version ;
    233   //  [1] : bit1 non nul -> has info 
    234   //  [2] : reserve
    235   uint_4 itab[3];
    236   itab[0] = 1;  // Numero de version a 1
    237   itab[1] = itab[2] = 0;
    238   if (dobj->mInfo)  itab[1] = 1;
    239   s.Put(itab, 3);
    240 
    241   //-------- Ecriture de segment size, nb de colonnes, nb de lignes ... 
    242   // [0] : SegmentSize()        [1] : NVar()
    243   // [2] : NEntry()             [3] : NbSegments()
    244   uint_8 ltab[5];
    245   ltab[0] = dobj->SegmentSize();
    246   ltab[1] = dobj->NVar();
    247   ltab[2] = dobj->NEntry();
    248   ltab[3] = dobj->NbSegments();
    249   ltab[4] = 0;
    250   s.Put(ltab, 5);
    251 
    252   //------ Ecriture du nom et type des colonnes
    253   for(sa_size_t k=0; k<dobj->NVar(); k++) {
    254     uint_2 typ = dobj->mNames[k].type;
    255     s.Put(typ);
    256     s.Put(dobj->mNames[k].nom);
    257   }
    258   // ------- Ecriture des tableaux min,max et n_minmax
    259   for(uint_8 k=0; k<ltab[1]; k++) {
    260     s.Put(dobj->mMin[k]);
    261     s.Put(dobj->mMax[k]);
    262     s.Put(dobj->mMinMaxNEnt[k]);
    263   } 
    264   //------- Ecriture du DVList Info() associe, si existant
    265   if (dobj->mInfo)  s << (*(dobj->mInfo));
    266 
    267   //------- Ecriture des SegDataBlock<T>
    268   for (size_t kk=0; kk<dobj->mNames.size(); kk++) {
    269     sa_size_t sk = dobj->mNames[kk].ser;
    270     switch (dobj->mNames[kk].type) {
    271     case BaseDataTable::IntegerField :
    272       s << dobj->mICols[sk];
    273     break;
    274     case BaseDataTable::LongField :
    275       s << dobj->mLCols[sk];
    276       break;
    277     case BaseDataTable::FloatField :
    278       s << dobj->mFCols[sk];
    279       break;
    280     case BaseDataTable::DoubleField :
    281       s << dobj->mDCols[sk];
    282       break;
    283     case BaseDataTable::StringField :
    284       s << dobj->mSCols[sk];
    285       break;
    286     default:
    287       throw ForbiddenError("ObjFileIO<DataTable>::WriteSelf() : unknown column type ");
    288     break;
    289     }
    290   }   
    291   return;
    292 }
    293 
    294 /* --Methode-- */
    295 DECL_TEMP_SPEC  /* equivalent a template <> , pour SGI-CC en particulier */
    296 void  ObjFileIO<DataTable>::ReadSelf(PInPersist& s)
    297 //      Serialisation en lecture du DataTable sur stream PPF
    298 {
    299   // ------- On lit les 3 premiers uint_4
    300   //  [0]: Numero de version ;
    301   //  [1] : bit1 non nul -> has info 
    302   //  [2] : reserve
    303   uint_4 itab[3] = {0,0,0};
    304   s.Get(itab, 3);
    305   bool hadinfo = false;
    306   if ((itab[1]&1) == 1)  hadinfo = true;
    307 
    308   // -------- Lecture de segment size, nb de colonnes, nb de lignes ... 
    309   // [0] : SegmentSize()        [1] : NVar()
    310   // [2] : NEntry()             [3] : NbSegments()
    311   uint_8 ltab[5] = {0,0,0,0,0};
    312   s.Get(ltab, 5);
    313   if (dobj == NULL) dobj = new DataTable(ltab[0]);
    314   else { dobj->Clear();  dobj->mSegSz = ltab[0]; }
    315   // -------- Lecture nom/type colonnes et allocation des colonnes
    316   uint_2 typ;
    317   string cnom;
    318   for(uint_8 k=0; k<ltab[1]; k++) {
    319     s.Get(typ);
    320     s.Get(cnom);
    321     BaseDataTable::FieldType ft = (BaseDataTable::FieldType)typ;
    322     dobj->AddColumn(ft, cnom);
    323   }
    324   // ------- Lecture des tableaux min,max et n_minmax
    325   for(uint_8 k=0; k<ltab[1]; k++) {
    326     s.Get(dobj->mMin[k]);
    327     s.Get(dobj->mMax[k]);
    328     s.Get(dobj->mMinMaxNEnt[k]);
    329   } 
    330   // ------- Lecture du DVList Info() associe, si necessaire
    331   if (hadinfo) {    // Lecture eventuelle du DVList Info
    332     if (dobj->mInfo == NULL)  dobj->mInfo = new DVList;
    333     s >> (*(dobj->mInfo));
    334   }
    335   // ------- Mise a jour des champs Nb d'entrees, nb segments ...
    336   dobj->mNEnt = ltab[2];
    337   dobj->mNSeg = ltab[3];
    338   // ------- Lecture des SegDataBlock<T>
    339   for (size_t kk=0; kk<dobj->mNames.size(); kk++) {
    340     sa_size_t sk = dobj->mNames[kk].ser;
    341     switch (dobj->mNames[kk].type) {
    342     case BaseDataTable::IntegerField :
    343       s >> dobj->mICols[sk];
    344     break;
    345     case BaseDataTable::LongField :
    346       s >> dobj->mLCols[sk];
    347       break;
    348     case BaseDataTable::FloatField :
    349       s >> dobj->mFCols[sk];
    350       break;
    351     case BaseDataTable::DoubleField :
    352       s >> dobj->mDCols[sk];
    353       break;
    354     case BaseDataTable::StringField :
    355       s >> dobj->mSCols[sk];
    356       break;
    357     default:
    358       throw ForbiddenError("ObjFileIO<DataTable>::ReadSelf() : unknown column type ");
    359     break;
    360     }
    361   }   
    362 return;
    363 }
    364 
    365 #ifdef __CXX_PRAGMA_TEMPLATES__
    366 #pragma define_template ObjFileIO<DataTable>
    367 #endif
    368 
    369 #if defined(ANSI_TEMPLATES) || defined(GNU_TEMPLATES)
    370 template class ObjFileIO<DataTable>;
    371 #endif
Note: See TracChangeset for help on using the changeset viewer.