Changeset 2860 in Sophya


Ignore:
Timestamp:
Dec 20, 2005, 7:25:51 PM (20 years ago)
Author:
ansari
Message:

Ajout constructeur de copie (pas parfait) pour FitsInOutFile + modifs classes FitsFile/FitsInFile/FitsOutFile pour heriter de FitsInOutFile avec constructeur a partir de FitsInOutFile - Reza 20/12/2005

Location:
trunk/SophyaExt/FitsIOServer
Files:
4 edited

Legend:

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

    r2615 r2860  
    66#include "strutil.h"
    77#include "anydataobj.h"
    8 #include "fitsspherehealpix.h"
    98
    109/*!
     
    281280
    282281
    283 
    284  
     282FitsFile::FitsFile()
     283  : FitsInOutFile()
     284{
     285  InitNull();
     286}
     287
     288FitsFile::FitsFile(FitsInOutFile const& fios)
     289  : FitsInOutFile(fios)
     290{
     291  InitNull();
     292}
     293
     294
     295/*RzDel
    285296FitsFile::~FitsFile()
    286297{
    287   int status = 0;
    288     if( fptr_ != NULL)
    289     {
    290       fits_close_file(fptr_,&status);
    291       // je ne fais pas      delete fptr_, c'est la lib. fitsio qui a fait
    292       // new...
    293     }
    294    if( status )  printerror( status );
    295 }
     298  //  Close fait par le destructeur de FitsInOutFile - Reza , Dec 2005
     299  //  int status = 0;
     300  //  if( fptr_ != NULL)
     301  //    fits_close_file(fptr_,&status);
     302  // if( status )  printerror( status );
     303}
     304*/
    296305
    297306
     
    353362
    354363FitsInFile::FitsInFile()
     364  : FitsFile()
     365
    355366{
    356367  InitNull();
     
    358369
    359370FitsInFile::FitsInFile(string const & flnm)
    360 {
    361     InitNull();
     371  : FitsFile()
     372{
     373  InitNull();
     374  Open(flnm.c_str(), Fits_RO);
     375  /*RZDEL
    362376   int status = 0;
    363377   fits_open_file(&fptr_,flnm.c_str(),READONLY,&status);
    364378   if( status ) printerror( status );
     379  */
    365380}
    366381
    367382FitsInFile::FitsInFile(const char * flnm)
    368 {
    369     InitNull();
    370    int status = 0;
     383  : FitsFile()
     384{
     385  InitNull();
     386  Open(flnm, Fits_RO);
     387  /*RZDEL
     388  int status = 0;
    371389   fits_open_file(&fptr_,flnm,READONLY,&status);
    372390   if( status ) printerror( status );
     391  */
     392}
     393
     394FitsInFile::FitsInFile(FitsInOutFile const& fios)
     395  : FitsFile(fios)
     396
     397{
     398  InitNull();
     399  if (mode_ == Fits_Create)
     400    throw FitsIOException("FitsInFile::FitsInFile(FitsInOutFile const& fios) newly created fits file");
    373401}
    374402
     
    15691597
    15701598FitsOutFile::FitsOutFile()
     1599  : FitsFile()
    15711600{
    15721601  InitNull();
     
    15801609
    15811610FitsOutFile::FitsOutFile(string const & flnm, WriteMode wrm)
     1611  : FitsFile()
    15821612{
    15831613  InitNull();
     
    15861616
    15871617FitsOutFile::FitsOutFile(const char * flnm, WriteMode wrm)
     1618  : FitsFile()
    15881619{
    15891620  InitNull();
     
    15911622}
    15921623
     1624FitsOutFile::FitsOutFile(FitsInOutFile const& fios)
     1625  : FitsFile(fios)
     1626{
     1627  InitNull();
     1628  if (mode_ == Fits_RO)
     1629    throw FitsIOException("FitsOutFile::FitsOutFile(FitsInOutFile const& ) ReadOnly Fits file");
     1630}
     1631
     1632FitsOutFile::~FitsOutFile()
     1633{
     1634  if (dvlToPrimary_ != NULL) delete dvlToPrimary_;
     1635}
     1636
    15931637void FitsOutFile::openoutputfitsfile(const char * flnm, WriteMode wrm)
    15941638{
     
    15971641  // create new FITS file
    15981642  fits_create_file(&fptr_,flnm,&status);
    1599   if( status )
    1600     {
    1601 
    1602       switch (wrm)
    1603         {
     1643  if( status )    {
     1644    switch (wrm) {
    16041645      // si on veut ecrire a la fin de ce fichier
    1605         case append :
     1646    case append :
     1647      status = 0;
     1648      fits_clear_errmsg();
     1649      fits_open_file(&fptr_,flnm,READWRITE,&status);
     1650      if( status ) {
     1651        cout << " error opening file: " << flnm << endl;
     1652        printerror(status, "failure opening a file supposed to exist");
     1653      }
     1654      else cout << " file " << flnm << " opened, new objects will be appended " << endl;
     1655      fits_get_num_hdus(fptr_, &hdunum_, &status);
     1656      int hdutype;
     1657      fits_movabs_hdu(fptr_,hdunum_,&hdutype,&status);
     1658      if( status ) {
     1659        printerror( status,":FitsFile::WriteF : erreur movabs");
     1660        throw FitsIOException("FitsOutFile::openoutputfitsfile()/fits movabs error");
     1661        break;
     1662       
     1663      case clear :
     1664        {
    16061665          status = 0;
    16071666          fits_clear_errmsg();
    1608           fits_open_file(&fptr_,flnm,READWRITE,&status);
    1609           if( status )
    1610             {
    1611               cout << " error opening file: " << flnm << endl;
    1612               printerror(status, "failure opening a file supposed to exist");
    1613             }
    1614           else cout << " file " << flnm << " opened, new objects will be appended " << endl;
    1615           fits_get_num_hdus(fptr_, &hdunum_, &status);
    1616           int hdutype;
    1617           fits_movabs_hdu(fptr_,hdunum_,&hdutype,&status);
    1618           if( status ) printerror( status,":FitsFile::WriteF : erreur movabs");
    1619           break;
    1620        
    1621         case clear :
    1622           {
    1623             status = 0;
    1624             fits_clear_errmsg();
    1625             char* newname = new char[strlen(flnm)+2];
    1626             //
    1627             newname[0] = '!';
    1628             newname[1] = '\0';
    1629             strcat(newname, flnm);
    1630             fits_create_file(&fptr_,newname,&status);
    1631             delete [] newname;
    1632             if (status)
    1633               {
    1634                 cout << " error opening file: " << flnm << endl;
    1635                 printerror(status, "unable to open file, supposed to exist");
    1636               }
    1637             else  cout << "  WARNING : file " << flnm << " is overwritten " << endl;
    1638             break;
    1639           }
    1640         case unknown :
    1641           printerror(status, " file seems already to exist");
    1642           break;
    1643      
    1644         }
    1645     }
     1667          char* newname = new char[strlen(flnm)+2];
     1668          //
     1669          newname[0] = '!';
     1670          newname[1] = '\0';
     1671          strcat(newname, flnm);
     1672          fits_create_file(&fptr_,newname,&status);
     1673          delete [] newname;
     1674          if (status) {
     1675            cout << " error opening file: " << flnm << endl;
     1676            printerror(status, "unable to open file, supposed to exist");
     1677            throw FitsIOException("FitsOutFile::openoutputfitsfile()/fits open Error ");
     1678          }
     1679          else  cout << "  WARNING : file " << flnm << " is overwritten " << endl;
     1680          break;
     1681        }
     1682      case unknown :
     1683        printerror(status, " file seems already to exist");
     1684        throw FitsIOException("FitsOutFile::openoutputfitsfile()/fits open Error - existing file");
     1685        break;
     1686      }
     1687    }
     1688  }
     1689  fname_ = flnm;
     1690  if ( wrm == append ) mode_ = Fits_RW;
     1691  else mode_ = Fits_Create;
     1692  ownfptr = true;
    16461693}
    16471694
  • trunk/SophyaExt/FitsIOServer/fitsfile.h

    r2197 r2860  
    44#include "ndatablock.h"
    55#include "dvlist.h"
    6 #include "FitsIO/fitsio.h"
     6#include "fitsinoutfile.h"
    77
    88#define OPENFILE    0
     
    7575
    7676//! Class (virtual) for managing FITS format files
    77  class FitsFile {
     77 class FitsFile : public FitsInOutFile {
    7878
    7979 public:
     
    148148
    149149
    150    FitsFile() { InitNull(); };
    151    virtual ~FitsFile();
     150   FitsFile();
     151   FitsFile(FitsInOutFile const& fios);
     152   // RzDel virtual ~FitsFile();
    152153   static string GetErrStatus(int status);
    153154   inline  int   statusF() const { return fits_status_;}
     
    169170inline void  InitNull()
    170171  {
    171     fptr_ = NULL;
    172172    hdutype_= FitsExtensionType_NULL;
    173173    hdunum_ = 0;
     
    177177
    178178
    179 
    180    fitsfile *fptr_;     /**<  pointer to the FITS file, defined in fitsio.h */
    181179   FitsExtensionType hdutype_;        /**<  image or bintable ? */
    182180   int hdunum_;         /**<   index of header to be read/written */
     
    197195   FitsInFile(string const & flnm);
    198196   FitsInFile(const char * flnm);
    199    ~FitsInFile() { ; };
     197   FitsInFile(FitsInOutFile const& fios);
     198   //   virtual ~FitsInFile();
    200199
    201200   static int  NbBlocks(char flnm[]);
     
    342341   FitsOutFile(string const & flnm, WriteMode wrm = unknown );
    343342   FitsOutFile(const char * flnm, WriteMode wrm = unknown );
    344    ~FitsOutFile() { if (dvlToPrimary_ != NULL) delete dvlToPrimary_;};
     343   FitsOutFile(FitsInOutFile const& fios);
     344   virtual ~FitsOutFile();
    345345   inline void InitNull() {dvlToPrimary_ = NULL;}
    346346
  • trunk/SophyaExt/FitsIOServer/fitsinoutfile.cc

    r2844 r2860  
    111111  //  cout << " DBG - FitsInOutFile(string name= " << name << ")" << endl;
    112112  fptr_ = NULL;
     113  ownfptr = true;
    113114  SetDef_BinTable();
    114115  SetDef_StrColWidth();
     
    122123  //  cout << " DBG - FitsInOutFile(char* name= " << name << ")" << endl;
    123124  fptr_ = NULL;
     125  ownfptr = true;
    124126  SetDef_BinTable();
    125127  SetDef_StrColWidth();
    126128  Open(name, mode);
     129}
     130
     131/*! \brief Copy constructor
     132  The fits file pointer is owned by the original object and should not be closed
     133  as long as the new object is being used.
     134*/
     135FitsInOutFile::FitsInOutFile(FitsInOutFile const& fios)
     136{
     137  fptr_ = fios.fptr_;
     138  fname_ = fios.fname_;
     139  mode_ = fios.mode_;
     140  ownfptr = false;
     141  SetDef_BinTable();
     142  SetDef_StrColWidth();
    127143}
    128144
     
    177193  fname_ = name;
    178194  mode_ = mode;
     195  ownfptr = true;
    179196  return;
    180197}
     
    184201void FitsInOutFile::Close()
    185202{
     203  if (ownfptr == false) return;
    186204  if (fptr_ == NULL) return;
    187205  int status = 0;
  • trunk/SophyaExt/FitsIOServer/fitsinoutfile.h

    r2843 r2860  
    8282                   FitsInOutFile(string const & name, FitsIOMode mode);
    8383                   FitsInOutFile(const char* name, FitsIOMode mode);
     84                   FitsInOutFile(FitsInOutFile const& fios);
    8485 virtual           ~FitsInOutFile();
    8586
     
    191192 string fname_;       //  File name as passed to creator
    192193 FitsIOMode mode_;   
     194 bool ownfptr;        //  If true, owns the FitsPointer, which will be closed by the destructor
    193195
    194196 // Default extension name
Note: See TracChangeset for help on using the changeset viewer.