/*************************************************************************** * GFitsHeader.hpp - FITS header cards container class * * ----------------------------------------------------------------------- * * copyright (C) 2008-2013 by Juergen Knoedlseder * * ----------------------------------------------------------------------- * * * * This program is free software: you can redistribute it and/or modify * * it under the terms of the GNU General Public License as published by * * the Free Software Foundation, either version 3 of the License, or * * (at your option) any later version. * * * * This program is distributed in the hope that it will be useful, * * but WITHOUT ANY WARRANTY; without even the implied warranty of * * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * * GNU General Public License for more details. * * * * You should have received a copy of the GNU General Public License * * along with this program. If not, see . * * * ***************************************************************************/ /** * @file GFitsHeader.hpp * @brief FITS header cards container class definition * @author Juergen Knoedlseder */ #ifndef GFITSHEADER_HPP #define GFITSHEADER_HPP /* __ Includes ___________________________________________________________ */ #include #include #include "GContainer.hpp" #include "GFitsHeaderCard.hpp" /***********************************************************************//** * @class GFitsHeader * * @brief Interface for FITS header class * * The FITS header class is a container class for header cards. * * All cards of a FITS file extension will be held in memory, so no link to * a FITS file is required. Cards are read from a file using the load() * method, and cards are saved into a file using the save() method. ***************************************************************************/ class GFitsHeader : public GContainer { public: // Constructors and destructors GFitsHeader(void); GFitsHeader(const GFitsHeader& header); virtual ~GFitsHeader(void); // Operators GFitsHeader& operator=(const GFitsHeader& header); GFitsHeaderCard& operator[](const int& cardno); const GFitsHeaderCard& operator[](const int& cardno) const; GFitsHeaderCard& operator[](const std::string& keyname); const GFitsHeaderCard& operator[](const std::string& keyname) const; // Methods void clear(void); GFitsHeader* clone(void) const; GFitsHeaderCard& at(const int& cardno); const GFitsHeaderCard& at(const int& cardno) const; GFitsHeaderCard& at(const std::string& keyname); const GFitsHeaderCard& at(const std::string& keyname) const; std::string string(const int& cardno) const; std::string string(const std::string& keyname) const; double real(const int& cardno) const; double real(const std::string& keyname) const; int integer(const int& cardno) const; int integer(const std::string& keyname) const; int size(void) const; bool is_empty(void) const; GFitsHeaderCard& append(const GFitsHeaderCard& card); GFitsHeaderCard& insert(const int& cardno, const GFitsHeaderCard& card); GFitsHeaderCard& insert(const std::string& keyname, const GFitsHeaderCard& card); void remove(const int& cardno); void remove(const std::string& keyname); void reserve(const int& num); void extend(const GFitsHeader& header); bool contains(const int& cardno) const; bool contains(const std::string& keyname) const; void load(void* vptr); void save(void* vptr) const; std::string print(const GChatter& chatter = NORMAL) const; private: // Private methods void init_members(void); void copy_members(const GFitsHeader& header); void free_members(void); int get_index(const std::string& keyname) const; // Private data area std::vector m_cards; //!< Header cards }; /***********************************************************************//** * @brief Return header card * * @param[in] cardno Number of card in header [0,...,size()-1] * @return Header card. ***************************************************************************/ inline GFitsHeaderCard& GFitsHeader::operator[](const int& cardno) { return (m_cards[cardno]); } /***********************************************************************//** * @brief Return pointer to model (const version) * * @param[in] cardno Number of card in header [0,...,size()-1] * @return Header card. ***************************************************************************/ inline const GFitsHeaderCard& GFitsHeader::operator[](const int& cardno) const { return (m_cards[cardno]); } /***********************************************************************//** * @brief Return header card * * @param[in] keyname Name of header card * @return Header card. ***************************************************************************/ inline GFitsHeaderCard& GFitsHeader::operator[](const std::string& keyname) { return (at(keyname)); } /***********************************************************************//** * @brief Return header card (const version) * * @param[in] keyname Name of header card * @return Header card. ***************************************************************************/ inline const GFitsHeaderCard& GFitsHeader::operator[](const std::string& keyname) const { return (at(keyname)); } /***********************************************************************//** * @brief Return number of cards in header * * @return Number of cards in header. * * Returns the number of cards in the extension header. ***************************************************************************/ inline int GFitsHeader::size(void) const { return (m_cards.size()); } /***********************************************************************//** * @brief Signals if there are no cards in the FITS header * * @return True if there are no cards in the FITS header, false otherwise * * Signals if there are no cards in the FITS header. ***************************************************************************/ inline bool GFitsHeader::is_empty(void) const { return (m_cards.empty()); } /***********************************************************************//** * @brief Reserves space for cards in FITS header * * @param[in] num Number of cards * * Reserves space for @p num cards in the FITS header. ***************************************************************************/ inline void GFitsHeader::reserve(const int& num) { m_cards.reserve(num); return; } /***********************************************************************//** * @brief Check if card is present in header * * @param[in] cardno Number of card in header. * @return True of card exists, false otherwise. * * Signals whether a card with specified card number exists in header. ***************************************************************************/ inline bool GFitsHeader::contains(const int& cardno) const { return (cardno >= 0 && cardno < size()); } /***********************************************************************//** * @brief Check if card is present in header * * @param[in] keyname Name of header card. * @return True of card exists, false otherwise. * * Signals whether a card with specified @p keyname exists in header. ***************************************************************************/ inline bool GFitsHeader::contains(const std::string& keyname) const { return (get_index(keyname) != -1); } #endif /* GFITSHEADER_HPP */