Ignore:
Timestamp:
Sep 8, 2006, 4:30:31 PM (19 years ago)
Author:
ansari
Message:

Correction plusieurs bugs lies a SwFitsDataTable - Reza 08/09/2006

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/SophyaExt/FitsIOServer/fitshdtable.cc

    r2963 r3069  
    188188
    189189  // Determination de la taille de segment
    190   sa_size_t segsz = is.GetNbRows() / 16; // Taille de segment par defaut
     190  sa_size_t segsz = is.GetNbRows() / 64; // Taille de segment par defaut
    191191  if (segsz > 2048) segsz = 2048;
    192192  string key = "SEGMSIZE";
    193193  bool knex = false;
    194194  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; }
    196197  if (segsz < 16) segsz = 16;
    197198
     
    205206
    206207  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
    207213    string key = "SOPCLSNM";
    208214    string clsnm = is.KeyValue(key);
    209     if ( (clsnm == "SOPHYA::SwFitsDataTable") || (nbrows*colnames.size() < 10000000) )
     215        if ( (clsnm == "SOPHYA::SwFitsDataTable") || (nbrows*colnames.size() < 10000000) )
    210216      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);
    212226  }
    213227  else {
    214228    dobj->Clear();  // On efface la table sinon
    215     dobj->mSegSz = segsz;
     229    if (fgsss)  dobj->mSegSz = segsz;
    216230  }
    217231
     
    221235
    222236  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  }
    223242  // Initialize the fits swap stream for SwFitsDataTable if necessary
    224243  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());
    226248      swfdt->FitsSwapFile().ShareFitsPtr(is);
    227     int_8 swp = 1;
    228    
    229     while (swp < nbrows) {
    230       swpos.push_back(swp); swp += segsz;
    231249    }
    232250  }
     
    303321
    304322  // 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  }
    306327
    307328  while ((dobj->SegmentSize()*dobj->NbSegments()) < dobj->NEntry())
Note: See TracChangeset for help on using the changeset viewer.