From a12d06bb9fbc763cb8a8d7dc6b91300fbd29d0d1 Mon Sep 17 00:00:00 2001 From: knodlseder <> Date: Mon, 3 Mar 2008 21:51:26 +0000 Subject: [PATCH] implement type specific write --- include/GFitsHeaderCard.hpp | 12 +++++++----- src/fits/GFitsHeaderCard.cpp | 58 ++++++++++++++++++++++++++++++++++++++++++++++++++-------- 2 files changed, 57 insertions(+), 13 deletions(-) diff --git a/include/GFitsHeaderCard.hpp b/include/GFitsHeaderCard.hpp index ceb98b2..3c6d767 100644 --- a/include/GFitsHeaderCard.hpp +++ b/include/GFitsHeaderCard.hpp @@ -66,6 +66,7 @@ public: std::string keyname(void) const; std::string value(void) const; int value_type(void) const; + int decimals(void) const; std::string unit(void) const; std::string comment(void) const; std::string string(void); @@ -85,11 +86,12 @@ private: int get_value_type(const std::string& value); // Private data area - std::string m_keyname; //!< Name of the card - std::string m_value; //!< Value of the card as read from file - int m_value_type; //!< Type of the card value - std::string m_unit; //!< Unit of the card value - std::string m_comment; //!< Card comment + std::string m_keyname; //!< Name of the card + std::string m_value; //!< Value of the card as read from file + int m_value_type; //!< Type of the card value + int m_value_decimals; //!< Decimals of value (for float) + std::string m_unit; //!< Unit of the card value + std::string m_comment; //!< Card comment }; diff --git a/src/fits/GFitsHeaderCard.cpp b/src/fits/GFitsHeaderCard.cpp index fcc123d..7e31cd0 100644 --- a/src/fits/GFitsHeaderCard.cpp +++ b/src/fits/GFitsHeaderCard.cpp @@ -13,6 +13,7 @@ ***************************************************************************/ /* __ Includes ___________________________________________________________ */ +#include #include "GException.hpp" #include "GFitsHeaderCard.hpp" @@ -353,6 +354,16 @@ int GFitsHeaderCard::value_type(void) const /***********************************************************************//** + * @brief Return header card decimals + ***************************************************************************/ +int GFitsHeaderCard::decimals(void) const +{ + // Return + return m_value_decimals; +} + + +/***********************************************************************//** * @brief Return header card value unit ***************************************************************************/ std::string GFitsHeaderCard::unit(void) const @@ -564,8 +575,37 @@ void GFitsHeaderCard::write(__fitsfile* fptr) throw GException::fits_error(G_READ_NUM, status); // Write keyword - status = __ffuky(fptr, __TSTRING, (char*)m_keyname.c_str(), - (char*)m_value.c_str(), (char*)m_comment.c_str(), &status); + switch (m_value_type) { + case CT_UNKNOWN: + break; + case CT_INVALID: + break; + case CT_STRING: + status = __ffukys(fptr, (char*)m_keyname.c_str(), + (char*)string().c_str(), (char*)m_comment.c_str(), + &status); + break; + case CT_INT: + status = __ffukyj(fptr, (char*)m_keyname.c_str(), integer(), + (char*)m_comment.c_str(), &status); + break; + case CT_FLOAT: + status = __ffukyd(fptr, (char*)m_keyname.c_str(), real(), + decimals(), (char*)m_comment.c_str(), &status); + break; + case CT_BOOL: + status = __ffukyl(fptr, (char*)m_keyname.c_str(), integer(), + (char*)m_comment.c_str(), &status); + break; + case CT_COMMENT: + status = __ffpcom(fptr, (char*)m_comment.c_str(), &status); + break; + case CT_HISTORY: + status = __ffphis(fptr, (char*)m_comment.c_str(), &status); + break; + default: + break; + } if (status != 0) throw GException::fits_error(G_WRITE, status); @@ -588,7 +628,8 @@ void GFitsHeaderCard::init_members(void) // Initialise members m_keyname.clear(); m_value.clear(); - m_value_type = CT_UNKNOWN; + m_value_type = CT_UNKNOWN; + m_value_decimals = 10; m_unit.clear(); m_comment.clear(); @@ -605,11 +646,12 @@ void GFitsHeaderCard::init_members(void) void GFitsHeaderCard::copy_members(const GFitsHeaderCard& card) { // Copy membres - m_keyname = card.m_keyname; - m_value = card.m_value; - m_value_type = card.m_value_type; - m_unit = card.m_unit; - m_comment = card.m_comment; + m_keyname = card.m_keyname; + m_value = card.m_value; + m_value_type = card.m_value_type; + m_value_decimals = card.m_value_decimals; + m_unit = card.m_unit; + m_comment = card.m_comment; // Return return; -- libgit2 0.21.4