Changeset 3069 in Sophya for trunk/SophyaExt/FitsIOServer/fitshdtable.cc
- Timestamp:
- Sep 8, 2006, 4:30:31 PM (19 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/SophyaExt/FitsIOServer/fitshdtable.cc
r2963 r3069 188 188 189 189 // Determination de la taille de segment 190 sa_size_t segsz = is.GetNbRows() / 16; // Taille de segment par defaut190 sa_size_t segsz = is.GetNbRows() / 64; // Taille de segment par defaut 191 191 if (segsz > 2048) segsz = 2048; 192 192 string key = "SEGMSIZE"; 193 193 bool knex = false; 194 194 string ssegsz = is.KeyValue(key, knex); 195 if (!knex && (ssegsz.length() > 0)) segsz = atoi(ssegsz.c_str()); 195 bool fgsss = false; 196 if (!knex && (ssegsz.length() > 0)) { segsz = atoi(ssegsz.c_str()); fgsss = true; } 196 197 if (segsz < 16) segsz = 16; 197 198 … … 205 206 206 207 if (dobj == NULL) { // On cree la table si besoin 208 /* 209 Reza, Sep06 : On ne cree pas automatiquement un SwFitsDataTable - 210 En effet, on ne peut garantir que l'objet FitsInOutFile is reste 211 valide pendant toute la duree de vie de l'objet SwFitsDataTable 212 207 213 string key = "SOPCLSNM"; 208 214 string clsnm = is.KeyValue(key); 209 if ( (clsnm == "SOPHYA::SwFitsDataTable") || (nbrows*colnames.size() < 10000000) )215 if ( (clsnm == "SOPHYA::SwFitsDataTable") || (nbrows*colnames.size() < 10000000) ) 210 216 dobj = new DataTable(segsz); 211 else dobj = new SwFitsDataTable(is, segsz, false); 217 else { 218 dobj = new SwFitsDataTable(segsz); 219 // dobj = new SwFitsDataTable(is, segsz, false); 220 // Reza, Sep2006: Ce constructeur de SwFitsDataTable lit l'entete 221 // et initialise donc l'objet SwFitsDataTable -> return 222 // return; 223 } 224 */ 225 dobj = new DataTable(segsz); 212 226 } 213 227 else { 214 228 dobj->Clear(); // On efface la table sinon 215 dobj->mSegSz = segsz;229 if (fgsss) dobj->mSegSz = segsz; 216 230 } 217 231 … … 221 235 222 236 vector<int_8> swpos; 237 segsz = dobj->mSegSz; 238 int_8 swp = 1; 239 while (swp < nbrows) { 240 swpos.push_back(swp); swp += segsz; 241 } 223 242 // Initialize the fits swap stream for SwFitsDataTable if necessary 224 243 if (swfdt) { 225 if ( swfdt->FitsSwapFile().FitsPtr() != is.FitsPtr() ) 244 if ( swfdt->FitsSwapFile().FitsPtr() != is.FitsPtr() ) { 245 // swfdt->FitsSwapFile().Close(); 246 // swfdt->FitsSwapFile().Open(is.FileName().c_str(), FitsInOutFile::Fits_RO); 247 // swfdt->FitsSwapFile().MoveAbsToHDU(is.CurrentHDU()); 226 248 swfdt->FitsSwapFile().ShareFitsPtr(is); 227 int_8 swp = 1;228 229 while (swp < nbrows) {230 swpos.push_back(swp); swp += segsz;231 249 } 232 250 } … … 303 321 304 322 // On ne doit pas lire les donnees de la table pour un SwFitsDataTable 305 if (swfdt) return; 323 if (swfdt) { 324 swfdt->mNSeg = swpos.size(); 325 return; 326 } 306 327 307 328 while ((dobj->SegmentSize()*dobj->NbSegments()) < dobj->NEntry())
Note:
See TracChangeset
for help on using the changeset viewer.