Changeset 2699 in Sophya for trunk/SophyaLib/HiStats/datatable.cc
- Timestamp:
- Apr 27, 2005, 1:48:19 PM (20 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/SophyaLib/HiStats/datatable.cc
r2696 r2699 217 217 } 218 218 219 /*!220 \class SOPHYA::ObjFileIO<DataTable>221 \ingroup HiStats222 Persistence (serialisation) handler for class DataTable223 */224 /* --Methode-- */225 DECL_TEMP_SPEC /* equivalent a template <> , pour SGI-CC en particulier */226 void ObjFileIO<DataTable>::WriteSelf(POutPersist& s) const227 // Serialisation en ecriture du DataTable sur stream PPF228 {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 info234 // [2] : reserve235 uint_4 itab[3];236 itab[0] = 1; // Numero de version a 1237 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 colonnes253 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_minmax259 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 existant265 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 PPF298 {299 // ------- On lit les 3 premiers uint_4300 // [0]: Numero de version ;301 // [1] : bit1 non nul -> has info302 // [2] : reserve303 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 colonnes316 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_minmax325 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 necessaire331 if (hadinfo) { // Lecture eventuelle du DVList Info332 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 #endif368 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.