Changeset 2699 in Sophya
- Timestamp:
- Apr 27, 2005, 1:48:19 PM (20 years ago)
- Location:
- trunk/SophyaLib/HiStats
- Files:
-
- 9 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/SophyaLib/HiStats/basedtable.cc
r2693 r2699 117 117 sa_size_t BaseDataTable::IndexNom(char const* nom) const 118 118 { 119 for(sa_size_t k=0; k<NVar(); k++) 120 if ( mNames[k].nom == nom ) return k; 121 throw NotFoundExc("BaseDataTable::IndexNom() : column name not found "); 119 for(sa_size_t k=0; k<NVar(); k++) 120 if ( mNames[k].nom == nom ) return k; 121 return -1; 122 // Reza:Avril 2005 : PINtuple se base sur le renvoi de -1 et pas d'une exception 123 // throw NotFoundExc("BaseDataTable::IndexNom() : column name not found "); 122 124 } 123 125 … … 202 204 sa_size_t off = n%mSegSz; 203 205 for(sa_size_t k=0; k<mIColsP.size(); k++) 204 mVarMTV[mIColIdx[k]] = mIColsP[k]->Get Segment(bid)[off];206 mVarMTV[mIColIdx[k]] = mIColsP[k]->GetCstSegment(bid)[off]; 205 207 for(sa_size_t k=0; k<mLColsP.size(); k++) 206 mVarMTV[mLColIdx[k]] = mLColsP[k]->Get Segment(bid)[off];208 mVarMTV[mLColIdx[k]] = mLColsP[k]->GetCstSegment(bid)[off]; 207 209 for(sa_size_t k=0; k<mFColsP.size(); k++) 208 mVarMTV[mFColIdx[k]] = mFColsP[k]->Get Segment(bid)[off];210 mVarMTV[mFColIdx[k]] = mFColsP[k]->GetCstSegment(bid)[off]; 209 211 for(sa_size_t k=0; k<mDColsP.size(); k++) 210 mVarMTV[mDColIdx[k]] = mDColsP[k]->Get Segment(bid)[off];212 mVarMTV[mDColIdx[k]] = mDColsP[k]->GetCstSegment(bid)[off]; 211 213 for(sa_size_t k=0; k<mSColsP.size(); k++) 212 mVarMTV[mSColIdx[k]] = atof(mSColsP[k]->Get Segment(bid)[off].c_str());214 mVarMTV[mSColIdx[k]] = atof(mSColsP[k]->GetCstSegment(bid)[off].c_str()); 213 215 214 216 return mVarMTV; … … 307 309 sa_size_t off = n%mSegSz; 308 310 for(sa_size_t k=0; k<mIColsP.size(); k++) 309 mVarD[mIColIdx[k]] = mIColsP[k]->Get Segment(bid)[off];311 mVarD[mIColIdx[k]] = mIColsP[k]->GetCstSegment(bid)[off]; 310 312 for(sa_size_t k=0; k<mLColsP.size(); k++) 311 mVarD[mLColIdx[k]] = mLColsP[k]->Get Segment(bid)[off];313 mVarD[mLColIdx[k]] = mLColsP[k]->GetCstSegment(bid)[off]; 312 314 for(sa_size_t k=0; k<mFColsP.size(); k++) 313 mVarD[mFColIdx[k]] = mFColsP[k]->Get Segment(bid)[off];315 mVarD[mFColIdx[k]] = mFColsP[k]->GetCstSegment(bid)[off]; 314 316 for(sa_size_t k=0; k<mDColsP.size(); k++) 315 mVarD[mDColIdx[k]] = mDColsP[k]->Get Segment(bid)[off];317 mVarD[mDColIdx[k]] = mDColsP[k]->GetCstSegment(bid)[off]; 316 318 for(sa_size_t k=0; k<mSColsP.size(); k++) 317 mVarD[mSColIdx[k]] = atof(mSColsP[k]->Get Segment(bid)[off].c_str());319 mVarD[mSColIdx[k]] = atof(mSColsP[k]->GetCstSegment(bid)[off].c_str()); 318 320 319 321 return mVarD; … … 326 328 if ((n < 0) || (n >= NEntry())) 327 329 throw RangeCheckError("BaseDataTable::GetCell() out of range line index n"); 328 if ((k < 0) || ( n>= NVar()))330 if ((k < 0) || (k >= NVar())) 329 331 throw RangeCheckError("BaseDataTable::GetCell() out of range column index k"); 330 332 double rv = BADVAL; … … 332 334 sa_size_t bid = n/mSegSz; 333 335 sa_size_t off = n%mSegSz; 336 334 337 switch (mNames[k].type) { 335 338 case IntegerField : 336 rv = mIColsP[sk]->Get Segment(bid)[off];339 rv = mIColsP[sk]->GetCstSegment(bid)[off]; 337 340 break; 338 341 case LongField : 339 rv = mLColsP[sk]->Get Segment(bid)[off];342 rv = mLColsP[sk]->GetCstSegment(bid)[off]; 340 343 break; 341 344 case FloatField : 342 rv = mFColsP[sk]->Get Segment(bid)[off];345 rv = mFColsP[sk]->GetCstSegment(bid)[off]; 343 346 break; 344 347 case DoubleField : 345 rv = mDColsP[sk]->Get Segment(bid)[off];348 rv = mDColsP[sk]->GetCstSegment(bid)[off]; 346 349 break; 347 350 case StringField : 348 rv = atof(mSColsP[sk]->Get Segment(bid)[off].c_str());351 rv = atof(mSColsP[sk]->GetCstSegment(bid)[off].c_str()); 349 352 break; 350 353 default: … … 365 368 if ((n < 0) || (n >= NEntry())) 366 369 throw RangeCheckError("BaseDataTable::GetCell() out of range line index n"); 367 if ((k < 0) || ( n>= NVar()))370 if ((k < 0) || (k >= NVar())) 368 371 throw RangeCheckError("BaseDataTable::GetCell() out of range column index k"); 369 372 MuTyV rv;; … … 373 376 switch (mNames[k].type) { 374 377 case IntegerField : 375 rv = mIColsP[sk]->Get Segment(bid)[off];378 rv = mIColsP[sk]->GetCstSegment(bid)[off]; 376 379 break; 377 380 case LongField : 378 rv = mLColsP[sk]->Get Segment(bid)[off];381 rv = mLColsP[sk]->GetCstSegment(bid)[off]; 379 382 break; 380 383 case FloatField : 381 rv = mFColsP[sk]->Get Segment(bid)[off];384 rv = mFColsP[sk]->GetCstSegment(bid)[off]; 382 385 break; 383 386 case DoubleField : 384 rv = mDColsP[sk]->Get Segment(bid)[off];387 rv = mDColsP[sk]->GetCstSegment(bid)[off]; 385 388 break; 386 389 case StringField : 387 rv = atof(mSColsP[sk]->GetSegment(bid)[off].c_str());390 rv = mSColsP[sk]->GetCstSegment(bid)[off]; 388 391 break; 389 392 default: … … 420 423 case IntegerField : 421 424 for(size_t is=0; is<mIColsP[sk]->NbSegments(); is++) { 422 int_4* sp = mIColsP[sk]->GetSegment(is);425 const int_4* sp = mIColsP[sk]->GetCstSegment(is); 423 426 for(size_t n=0; n<mIColsP[sk]->SegmentSize(); n++) { 424 427 if (cnt >= NEntry()) break; … … 432 435 case LongField : 433 436 for(size_t is=0; is<mLColsP[sk]->NbSegments(); is++) { 434 int_8* sp = mLColsP[sk]->GetSegment(is);437 const int_8* sp = mLColsP[sk]->GetCstSegment(is); 435 438 for(size_t n=0; n<mLColsP[sk]->SegmentSize(); n++) { 436 439 if (cnt >= NEntry()) break; … … 443 446 case FloatField : 444 447 for(size_t is=0; is<mFColsP[sk]->NbSegments(); is++) { 445 r_4* sp = mFColsP[sk]->GetSegment(is);448 const r_4* sp = mFColsP[sk]->GetCstSegment(is); 446 449 for(size_t n=0; n<mFColsP[sk]->SegmentSize(); n++) { 447 450 if (cnt >= NEntry()) break; … … 454 457 case DoubleField : 455 458 for(size_t is=0; is<mDColsP[sk]->NbSegments(); is++) { 456 r_8* sp = mDColsP[sk]->GetSegment(is);459 const r_8* sp = mDColsP[sk]->GetCstSegment(is); 457 460 for(size_t n=0; n<mDColsP[sk]->SegmentSize(); n++) { 458 461 if (cnt >= NEntry()) break; … … 524 527 string BaseDataTable::LineHeaderToString() const 525 528 { 526 char buff[32];527 string rets=" Num ";529 string rets,s; 530 528 531 for(int i=0; i<NVar(); i++) { 529 sprintf(buff, "%8s ", NomIndex(i).c_str() ); 530 rets += buff; 531 } 532 rets += '\n'; 532 s = mNames[i].nom; 533 s += ' '; 534 size_t l = s.length(); 535 for(size_t ii=l; ii<10; ii++) s += ' '; 536 rets += s; 537 } 533 538 return(rets); 534 539 } … … 547 552 switch (mNames[k].type) { 548 553 case IntegerField : 549 rv = mIColsP[sk]->Get Segment(bid)[off];554 rv = mIColsP[sk]->GetCstSegment(bid)[off]; 550 555 break; 551 556 case LongField : 552 rv = mLColsP[sk]->Get Segment(bid)[off];557 rv = mLColsP[sk]->GetCstSegment(bid)[off]; 553 558 break; 554 559 case FloatField : 555 rv = mFColsP[sk]->Get Segment(bid)[off];560 rv = mFColsP[sk]->GetCstSegment(bid)[off]; 556 561 break; 557 562 case DoubleField : 558 rv = mDColsP[sk]->Get Segment(bid)[off];563 rv = mDColsP[sk]->GetCstSegment(bid)[off]; 559 564 break; 560 565 case StringField : 561 rv = atof(mSColsP[sk]->GetSegment(bid)[off].c_str());566 rv = mSColsP[sk]->GetCstSegment(bid)[off]; 562 567 break; 563 568 default: … … 565 570 break; 566 571 } 567 rs += " "; 568 rs += (string)rv; 572 string s = (string)rv; 573 s += ' '; 574 size_t l = s.length(); 575 for(size_t ii=l; ii<10; ii++) s += ' '; 576 rs += s; 569 577 } 570 578 return rs; -
trunk/SophyaLib/HiStats/basedtable.h
r2688 r2699 87 87 //! Copy or merges the data from \b a into the data table (cp=true -> copy) 88 88 virtual void CopyMerge(BaseDataTable const& a, bool cp=false) ; 89 //! Equal (copy) operator 90 inline BaseDataTable& operator = (BaseDataTable const& a) 91 { CopyMerge(a, true) ; return *this ; } 92 89 90 //! Clear/reset the table content and structure. 91 virtual void Clear() = 0; 92 93 // ---- ASCII I/O 93 94 void Print(int num, int nmax=1) const ; 94 95 … … 101 102 int FillFromASCIIFile(string const& fn); 102 103 103 // Declaration de l interface NTuple 104 //------------------------------------------------------------- 105 //----------- Declaration de l interface NTuple -------------- 106 104 107 virtual sa_size_t NbLines() const ; 105 108 virtual sa_size_t NbColumns() const ; … … 115 118 virtual string LineHeaderToString() const; 116 119 virtual string LineToString(sa_size_t n) const; 120 121 // Pour la gestion de persistance PPF 122 friend class ObjFileIO<BaseDataTable> ; 117 123 118 124 protected: -
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 -
trunk/SophyaLib/HiStats/datatable.h
r2693 r2699 31 31 32 32 // Pour la gestion de persistance PPF 33 friend class ObjFileIO< DataTable> ;33 friend class ObjFileIO<BaseDataTable> ; 34 34 // pour fichiers FITS 35 35 friend class FITS_DataTable; 36 36 37 37 //! Reset the table content and structure 38 v oid Clear();38 virtual void Clear(); 39 39 protected: 40 40 void Share(DataTable const & a); … … 51 51 /*! Writes the object in the POutPersist stream \b os */ 52 52 inline POutPersist& operator << (POutPersist& os, DataTable & obj) 53 { ObjFileIO< DataTable> fio(&obj); fio.Write(os); return(os); }53 { ObjFileIO<BaseDataTable> fio(&obj); fio.Write(os); return(os); } 54 54 /*! Reads the object from the PInPersist stream \b is */ 55 55 inline PInPersist& operator >> (PInPersist& is, DataTable & obj) 56 { ObjFileIO<DataTable> fio(&obj); is.SkipToNextObject(); fio.Read(is); return(is); } 56 { ObjFileIO<BaseDataTable> fio(&obj); is.SkipToNextObject(); 57 fio.Read(is); return(is); } 57 58 // Classe pour la gestion de persistance 58 // ObjFileIO< DataTable>59 // ObjFileIO<BaseDataTable> 59 60 } // namespace SOPHYA 60 61 -
trunk/SophyaLib/HiStats/histats.h
r2688 r2699 10 10 #include "xntuple.h" 11 11 #include "datatable.h" 12 #include "swppfdtable.h" 12 13 13 14 #endif // HISTATS_SEEN -
trunk/SophyaLib/HiStats/histinit.cc
r2688 r2699 13 13 #include "xntuple.h" 14 14 #include "datatable.h" 15 #include "swppfdtable.h" 15 16 16 17 /*! … … 48 49 DObjRegister(ObjFileIO<XNTuple>, XNTuple); 49 50 50 PPRegister(ObjFileIO<DataTable>); 51 DObjRegister(ObjFileIO<DataTable>, DataTable); 51 PPRegister(ObjFileIO<BaseDataTable>); 52 DObjRegister(ObjFileIO<BaseDataTable>, DataTable); 53 DObjRegister(ObjFileIO<BaseDataTable>, SwPPFDataTable); 52 54 53 55 } -
trunk/SophyaLib/HiStats/objlist.list
r2688 r2699 1 1 basedtable.o 2 2 datatable.o 3 fio_dtable.o 3 4 hisprof.o 4 5 histerr.o … … 9 10 ntuple.o 10 11 proxtuple.o 12 swppfdtable.o 11 13 xntuple.o -
trunk/SophyaLib/HiStats/swppfdtable.cc
r2696 r2699 46 46 SwPPFDataTable::SwPPFDataTable(POutPersist & os, sa_size_t segsz) 47 47 : BaseDataTable(segsz) , 48 m ISwapper(os), mLSwapper(os), mFSwapper(os), mDSwapper(os), mSSwapper(os),49 m SwOut(&os), mSwIn(NULL)48 mSwOut(&os), mSwIn(NULL), 49 mISwapper(os), mLSwapper(os), mFSwapper(os), mDSwapper(os), mSSwapper(os) 50 50 { 51 51 } … … 53 53 SwPPFDataTable::SwPPFDataTable(PInPersist & is, sa_size_t segsz) 54 54 : BaseDataTable(segsz) , 55 mISwapper(is), mLSwapper(is), mFSwapper(is), mDSwapper(is), mSSwapper(is), 56 mSwOut(NULL), mSwIn(&is) 57 { 55 mSwOut(NULL), mSwIn(NULL) 56 { 57 PInPersist* pis = new PInPersist(is.FileName(), false); 58 mSwIn = new St_InSwap; 59 mSwIn->pis = pis; mSwIn->refcnt = 1; 60 mISwapper.SetInStream(*pis); 61 mLSwapper.SetInStream(*pis); 62 mFSwapper.SetInStream(*pis); 63 mDSwapper.SetInStream(*pis); 64 mDSwapper.SetInStream(*pis); 58 65 } 59 66 … … 64 71 { 65 72 Share(a); 73 } 74 //! Destructor - Deletes / closes the input PPF swap stream 75 SwPPFDataTable::~SwPPFDataTable() 76 { 77 if (mSwIn) { 78 mSwIn->refcnt--; 79 if (mSwIn->refcnt == 0) { 80 delete mSwIn->pis; 81 delete mSwIn; 82 mSwIn = NULL; 83 } 84 } 66 85 } 67 86 … … 77 96 mSwOut = a.mSwOut; 78 97 mSwIn = a.mSwIn; 98 if (mSwIn) mSwIn->refcnt++; // comptage de reference pour le stream input 79 99 80 100 // On recopie la taille de segment … … 277 297 } 278 298 279 /*!280 \class SOPHYA::ObjFileIO<SwPPFDataTable>281 \ingroup HiStats282 Persistence (serialisation) handler for class SwPPFDataTable283 */284 /* --Methode-- */285 DECL_TEMP_SPEC /* equivalent a template <> , pour SGI-CC en particulier */286 void ObjFileIO<SwPPFDataTable>::WriteSelf(POutPersist& s) const287 // Serialisation en ecriture du SwPPFDataTable sur stream PPF288 {289 if (dobj == NULL)290 throw NullPtrError("ObjFileIO<SwPPFDataTable>::WriteSelf() NULL dobj pointer ");291 if (dobj->mSwOut != &s)292 throw NotAvailableOperation("ObjFileIO<SwPPFDataTable>::WriteSelf() OutputStream <> SwapStream");293 //------- On ecrit 3 uint_4 ....294 // [0]: Numero de version ;295 // [1] : bit1 non nul -> has info296 // [2] : reserve297 uint_4 itab[3];298 itab[0] = 1; // Numero de version a 1299 itab[1] = itab[2] = 0;300 if (dobj->mInfo) itab[1] = 1;301 s.Put(itab, 3);302 303 //-------- Ecriture de segment size, nb de colonnes, nb de lignes ...304 // [0] : SegmentSize() [1] : NVar()305 // [2] : NEntry() [3] : NbSegments()306 uint_8 ltab[5];307 ltab[0] = dobj->SegmentSize();308 ltab[1] = dobj->NVar();309 ltab[2] = dobj->NEntry();310 ltab[3] = dobj->NbSegments();311 ltab[4] = 0;312 s.Put(ltab, 5);313 314 //------ Ecriture du nom et type des colonnes315 for(sa_size_t k=0; k<dobj->NVar(); k++) {316 uint_2 typ = dobj->mNames[k].type;317 s.Put(typ);318 s.Put(dobj->mNames[k].nom);319 }320 // ------- Ecriture des tableaux min,max et n_minmax321 for(uint_8 k=0; k<ltab[1]; k++) {322 s.Put(dobj->mMin[k]);323 s.Put(dobj->mMax[k]);324 s.Put(dobj->mMinMaxNEnt[k]);325 }326 //------- Ecriture du DVList Info() associe, si existant327 if (dobj->mInfo) s << (*(dobj->mInfo));328 329 //------- Ecriture des tables de positionnement de SwSegDataBlock<T>330 for (size_t kk=0; kk<dobj->mNames.size(); kk++) {331 sa_size_t sk = dobj->mNames[kk].ser;332 switch (dobj->mNames[kk].type) {333 case BaseDataTable::IntegerField :334 s.PutPosTagTable(dobj->mICols[sk].GetSwapPosTagTable());335 break;336 case BaseDataTable::LongField :337 s.PutPosTagTable(dobj->mLCols[sk].GetSwapPosTagTable());338 break;339 case BaseDataTable::FloatField :340 s.PutPosTagTable(dobj->mFCols[sk].GetSwapPosTagTable());341 break;342 case BaseDataTable::DoubleField :343 s.PutPosTagTable(dobj->mDCols[sk].GetSwapPosTagTable());344 break;345 case BaseDataTable::StringField :346 s.PutPosTagTable(dobj->mSCols[sk].GetSwapPosTagTable());347 break;348 default:349 throw ForbiddenError("ObjFileIO<SwPPFDataTable>::WriteSelf() : unknown column type ");350 break;351 }352 }353 return;354 }355 356 /* --Methode-- */357 DECL_TEMP_SPEC /* equivalent a template <> , pour SGI-CC en particulier */358 void ObjFileIO<SwPPFDataTable>::ReadSelf(PInPersist& s)359 // Serialisation en lecture du SwPPFDataTable sur stream PPF360 {361 // ------- On lit les 3 premiers uint_4362 // [0]: Numero de version ;363 // [1] : bit1 non nul -> has info364 // [2] : reserve365 uint_4 itab[3] = {0,0,0};366 s.Get(itab, 3);367 bool hadinfo = false;368 if ((itab[1]&1) == 1) hadinfo = true;369 370 // -------- Lecture de segment size, nb de colonnes, nb de lignes ...371 // [0] : SegmentSize() [1] : NVar()372 // [2] : NEntry() [3] : NbSegments()373 uint_8 ltab[5] = {0,0,0,0,0};374 s.Get(ltab, 5);375 if (dobj == NULL) dobj = new SwPPFDataTable(s, ltab[0]);376 else {377 // Copie brutale en utilisant l'operateur =378 *dobj = SwPPFDataTable(s, ltab[0]);379 }380 // -------- Lecture nom/type colonnes et allocation des colonnes381 uint_2 typ;382 string cnom;383 for(uint_8 k=0; k<ltab[1]; k++) {384 s.Get(typ);385 s.Get(cnom);386 BaseDataTable::FieldType ft = (BaseDataTable::FieldType)typ;387 dobj->AddColumn(ft, cnom);388 }389 // ------- Lecture des tableaux min,max et n_minmax390 for(uint_8 k=0; k<ltab[1]; k++) {391 s.Get(dobj->mMin[k]);392 s.Get(dobj->mMax[k]);393 s.Get(dobj->mMinMaxNEnt[k]);394 }395 // ------- Lecture du DVList Info() associe, si necessaire396 if (hadinfo) { // Lecture eventuelle du DVList Info397 if (dobj->mInfo == NULL) dobj->mInfo = new DVList;398 s >> (*(dobj->mInfo));399 }400 // ------- Mise a jour des champs Nb d'entrees, nb segments ...401 dobj->mNEnt = ltab[2];402 dobj->mNSeg = ltab[3];403 cout << " DEBUG___ SegmentSize()= " << dobj->SegmentSize() << endl;404 // ------- Lecture des tag de positionnement des SwSegDataBlock<T>405 vector<int_8> swpos;406 for (size_t kk=0; kk<dobj->mNames.size(); kk++) {407 sa_size_t sk = dobj->mNames[kk].ser;408 switch (dobj->mNames[kk].type) {409 case BaseDataTable::IntegerField :410 swpos.clear();411 s.GetPosTagTable(swpos);412 dobj->mICols[sk] = SwSegDataBlock<int_4>(dobj->mISwapper, swpos, dobj->SegmentSize());413 break;414 case BaseDataTable::LongField :415 swpos.clear();416 s.GetPosTagTable(swpos);417 dobj->mLCols[sk] = SwSegDataBlock<int_8>(dobj->mLSwapper, swpos, dobj->SegmentSize());418 break;419 case BaseDataTable::FloatField :420 swpos.clear();421 s.GetPosTagTable(swpos);422 dobj->mFCols[sk] = SwSegDataBlock<r_4>(dobj->mFSwapper, swpos, dobj->SegmentSize());423 break;424 case BaseDataTable::DoubleField :425 swpos.clear();426 s.GetPosTagTable(swpos);427 dobj->mDCols[sk] = SwSegDataBlock<r_8>(dobj->mDSwapper, swpos, dobj->SegmentSize());428 break;429 case BaseDataTable::StringField :430 swpos.clear();431 s.GetPosTagTable(swpos);432 dobj->mSCols[sk] = SwSegDataBlock<string>(dobj->mSSwapper, swpos, dobj->SegmentSize());433 break;434 default:435 throw ForbiddenError("ObjFileIO<SwPPFDataTable>::ReadSelf() : unknown column type ");436 break;437 }438 }439 return;440 }441 442 #ifdef __CXX_PRAGMA_TEMPLATES__443 #pragma define_template ObjFileIO<SwPPFDataTable>444 #endif445 446 #if defined(ANSI_TEMPLATES) || defined(GNU_TEMPLATES)447 template class ObjFileIO<SwPPFDataTable>;448 #endif -
trunk/SophyaLib/HiStats/swppfdtable.h
r2696 r2699 20 20 SwPPFDataTable(POutPersist & os, sa_size_t segsz=512); 21 21 SwPPFDataTable(SwPPFDataTable const& a); 22 22 23 virtual ~SwPPFDataTable(); 24 23 25 virtual sa_size_t AddColumn(FieldType ft, string const & cnom); 24 26 … … 32 34 33 35 // Pour la gestion de persistance PPF 34 friend class ObjFileIO< SwPPFDataTable> ;36 friend class ObjFileIO<BaseDataTable> ; 35 37 36 38 //! Reset the table content and structure 37 v oid Clear();39 virtual void Clear(); 38 40 /*! This method should be called in order to empty the swapout buffer, 39 41 before saving object to PPF stream … … 56 58 PPFDataSwapper<string> mSSwapper; 57 59 58 POutPersist* mSwOut; 59 PInPersist* mSwIn; 60 // Output swap stream doit etre cree avant l'appel au constructeur 61 // et rester valide (non detruit) tant que l'objet SwPPFDataTable existe 62 POutPersist* mSwOut; 63 // Input swap stream - On cree un input swap stream et on fait 64 // un comptage de reference pour le detruire lorsque tous les tables 65 // l'utilisant sont supprimes 66 typedef struct { PInPersist* pis; uint_4 refcnt; } St_InSwap; 67 St_InSwap * mSwIn; 60 68 }; 61 69 62 70 /*! Writes the object in the POutPersist stream \b os */ 63 71 inline POutPersist& operator << (POutPersist& os, SwPPFDataTable & obj) 64 { obj.SwapOutAll(); ObjFileIO< SwPPFDataTable> fio(&obj); fio.Write(os); return(os); }72 { obj.SwapOutAll(); ObjFileIO<BaseDataTable> fio(&obj); fio.Write(os); return(os); } 65 73 /*! Reads the object from the PInPersist stream \b is */ 66 74 inline PInPersist& operator >> (PInPersist& is, SwPPFDataTable & obj) 67 { ObjFileIO<SwPPFDataTable> fio(&obj); is.SkipToNextObject(); fio.Read(is); return(is); } 68 // Classe pour la gestion de persistance 69 // ObjFileIO<SwPPFDataTable> 75 { ObjFileIO<BaseDataTable> fio(&obj); is.SkipToNextObject(); fio.Read(is); return(is); } 76 70 77 } // namespace SOPHYA 71 78
Note:
See TracChangeset
for help on using the changeset viewer.