CCfits
2.7
|
00001 // Astrophysics Science Division, 00002 // NASA/ Goddard Space Flight Center 00003 // HEASARC 00004 // http://heasarc.gsfc.nasa.gov 00005 // e-mail: ccfits@legacy.gsfc.nasa.gov 00006 // 00007 // Original author: Ben Dorman 00008 00009 #ifndef TABLE_H 00010 #define TABLE_H 1 00011 00012 // ExtHDU 00013 #include "ExtHDU.h" 00014 // FitsError 00015 #include "FitsError.h" 00016 00017 namespace CCfits { 00018 class Column; 00019 00020 } // namespace CCfits 00021 00022 #ifdef _MSC_VER 00023 #include "MSconfig.h" // for truncation warning 00024 #endif 00025 00026 00027 #ifdef SSTREAM_DEFECT 00028 #include <strstream> 00029 #else 00030 #include <sstream> 00031 #endif 00032 00033 00034 namespace CCfits { 00035 00282 class Table : public ExtHDU //## Inherits: <unnamed>%3804A126EB10 00283 { 00284 00285 public: 00286 00287 00288 00289 class NoSuchColumn : public FitsException //## Inherits: <unnamed>%397CB0970174 00290 { 00291 public: 00292 NoSuchColumn (const String& name, bool silent = true); 00293 NoSuchColumn (int index, bool silent = true); 00294 00295 protected: 00296 private: 00297 private: //## implementation 00298 }; 00299 00300 00301 00302 class InvalidColumnSpecification : public FitsException //## Inherits: <unnamed>%3B1E52D703B0 00303 { 00304 public: 00305 InvalidColumnSpecification (const String& msg, bool silent = true); 00306 00307 protected: 00308 private: 00309 private: //## implementation 00310 }; 00311 Table(const Table &right); 00312 virtual ~Table(); 00313 00314 // ! return reference to a column given by column name. 00315 virtual Column& column (const String& colName, bool caseSensitive = true) const; 00316 virtual Column& column (int colIndex // ! return reference to a column given by a column index number 00317 ) const; 00318 virtual long rows () const; 00319 void updateRows (); 00320 void rows (long numRows); 00321 virtual void deleteColumn (const String& columnName); 00322 // Insert one or more blank rows into a FITS column. 00323 void insertRows (long first, long number = 1); 00324 void deleteRows (long first, long number = 1); 00325 void deleteRows (const std::vector<long>& rowList); 00326 virtual long getRowsize () const; 00327 virtual int numCols () const; 00328 virtual const ColMap& column () const; 00329 virtual ColMap& column (); 00330 virtual void copyColumn(const Column& inColumn, int colIndx, bool insertNewCol=true); 00331 00332 public: 00333 // Additional Public Declarations 00334 00335 protected: 00336 Table (FITS* p, HduType xtype, const String &hduName, int rows, // ! Number of rows in table at creation, to be used to initialize NAXIS2 00337 const std::vector<String>& columnName, const std::vector<String>& columnFmt, const std::vector<String>& columnUnit = std::vector<String>(), int version = 1); 00338 // ctor for creating a Group Table 00339 Table (FITS* p, int version = 1, const String & groupName = String("")); 00340 // To be called by reading operations. 00341 Table (FITS* p, HduType xtype, const String &hduName = String(""), int version = 1); 00342 // ExtHDU constructor for getting ExtHDUs by number. 00343 // Necessary since EXTNAME is a reserved not required 00344 // keyword. 00345 Table (FITS* p, HduType xtype, int number); 00346 00347 virtual std::ostream & put (std::ostream &s) const; 00348 void init (bool readFlag = false, const std::vector<String>& keys = std::vector<String>()); 00349 virtual void setColumn (const String& colname, Column* value); 00350 void reindex (int startNum, bool isInsert); 00351 void numCols (int value); 00352 00353 // Additional Protected Declarations 00354 00355 private: 00356 virtual void initRead (); 00357 virtual void readTableHeader (int ncols, std::vector<String>& colName, std::vector<String>& colFmt, std::vector<String>& colUnit) = 0; 00358 // deep erasure , to be called by assignment and dtors. 00359 void clearData (); 00360 void copyData (const Table& right); 00361 00362 // Additional Private Declarations 00363 00364 private: //## implementation 00365 // Data Members for Class Attributes 00366 int m_numCols; 00367 00368 // Data Members for Associations 00369 ColMap m_column; 00370 00371 // Additional Implementation Declarations 00372 friend class Column; 00373 }; 00374 00375 // Class CCfits::Table::NoSuchColumn 00376 00377 // Class CCfits::Table::InvalidColumnSpecification 00378 00379 // Class CCfits::Table 00380 00381 inline long Table::rows () const 00382 { 00383 00384 return axis(1); 00385 } 00386 00387 inline void Table::rows (long numRows) 00388 { 00389 00390 naxes(1) = numRows; 00391 } 00392 00393 inline int Table::numCols () const 00394 { 00395 return m_numCols; 00396 } 00397 00398 inline const ColMap& Table::column () const 00399 { 00400 return m_column; 00401 } 00402 00403 inline void Table::numCols (int value) 00404 { 00405 m_numCols = value; 00406 } 00407 00408 inline ColMap& Table::column () 00409 { 00410 return m_column; 00411 } 00412 00413 } // namespace CCfits 00414 00415 00416 #endif