Commit a12d06bb9fbc763cb8a8d7dc6b91300fbd29d0d1

Authored by knodlseder
1 parent aad6f74b

implement type specific write

include/GFitsHeaderCard.hpp
... ... @@ -66,6 +66,7 @@ public:
66 66 std::string keyname(void) const;
67 67 std::string value(void) const;
68 68 int value_type(void) const;
  69 + int decimals(void) const;
69 70 std::string unit(void) const;
70 71 std::string comment(void) const;
71 72 std::string string(void);
... ... @@ -85,11 +86,12 @@ private:
85 86 int get_value_type(const std::string& value);
86 87  
87 88 // Private data area
88   - std::string m_keyname; //!< Name of the card
89   - std::string m_value; //!< Value of the card as read from file
90   - int m_value_type; //!< Type of the card value
91   - std::string m_unit; //!< Unit of the card value
92   - std::string m_comment; //!< Card comment
  89 + std::string m_keyname; //!< Name of the card
  90 + std::string m_value; //!< Value of the card as read from file
  91 + int m_value_type; //!< Type of the card value
  92 + int m_value_decimals; //!< Decimals of value (for float)
  93 + std::string m_unit; //!< Unit of the card value
  94 + std::string m_comment; //!< Card comment
93 95 };
94 96  
95 97  
... ...
src/fits/GFitsHeaderCard.cpp
... ... @@ -13,6 +13,7 @@
13 13 ***************************************************************************/
14 14  
15 15 /* __ Includes ___________________________________________________________ */
  16 +#include <iostream>
16 17 #include "GException.hpp"
17 18 #include "GFitsHeaderCard.hpp"
18 19  
... ... @@ -353,6 +354,16 @@ int GFitsHeaderCard::value_type(void) const
353 354  
354 355  
355 356 /***********************************************************************//**
  357 + * @brief Return header card decimals
  358 + ***************************************************************************/
  359 +int GFitsHeaderCard::decimals(void) const
  360 +{
  361 + // Return
  362 + return m_value_decimals;
  363 +}
  364 +
  365 +
  366 +/***********************************************************************//**
356 367 * @brief Return header card value unit
357 368 ***************************************************************************/
358 369 std::string GFitsHeaderCard::unit(void) const
... ... @@ -564,8 +575,37 @@ void GFitsHeaderCard::write(__fitsfile* fptr)
564 575 throw GException::fits_error(G_READ_NUM, status);
565 576  
566 577 // Write keyword
567   - status = __ffuky(fptr, __TSTRING, (char*)m_keyname.c_str(),
568   - (char*)m_value.c_str(), (char*)m_comment.c_str(), &status);
  578 + switch (m_value_type) {
  579 + case CT_UNKNOWN:
  580 + break;
  581 + case CT_INVALID:
  582 + break;
  583 + case CT_STRING:
  584 + status = __ffukys(fptr, (char*)m_keyname.c_str(),
  585 + (char*)string().c_str(), (char*)m_comment.c_str(),
  586 + &status);
  587 + break;
  588 + case CT_INT:
  589 + status = __ffukyj(fptr, (char*)m_keyname.c_str(), integer(),
  590 + (char*)m_comment.c_str(), &status);
  591 + break;
  592 + case CT_FLOAT:
  593 + status = __ffukyd(fptr, (char*)m_keyname.c_str(), real(),
  594 + decimals(), (char*)m_comment.c_str(), &status);
  595 + break;
  596 + case CT_BOOL:
  597 + status = __ffukyl(fptr, (char*)m_keyname.c_str(), integer(),
  598 + (char*)m_comment.c_str(), &status);
  599 + break;
  600 + case CT_COMMENT:
  601 + status = __ffpcom(fptr, (char*)m_comment.c_str(), &status);
  602 + break;
  603 + case CT_HISTORY:
  604 + status = __ffphis(fptr, (char*)m_comment.c_str(), &status);
  605 + break;
  606 + default:
  607 + break;
  608 + }
569 609 if (status != 0)
570 610 throw GException::fits_error(G_WRITE, status);
571 611  
... ... @@ -588,7 +628,8 @@ void GFitsHeaderCard::init_members(void)
588 628 // Initialise members
589 629 m_keyname.clear();
590 630 m_value.clear();
591   - m_value_type = CT_UNKNOWN;
  631 + m_value_type = CT_UNKNOWN;
  632 + m_value_decimals = 10;
592 633 m_unit.clear();
593 634 m_comment.clear();
594 635  
... ... @@ -605,11 +646,12 @@ void GFitsHeaderCard::init_members(void)
605 646 void GFitsHeaderCard::copy_members(const GFitsHeaderCard& card)
606 647 {
607 648 // Copy membres
608   - m_keyname = card.m_keyname;
609   - m_value = card.m_value;
610   - m_value_type = card.m_value_type;
611   - m_unit = card.m_unit;
612   - m_comment = card.m_comment;
  649 + m_keyname = card.m_keyname;
  650 + m_value = card.m_value;
  651 + m_value_type = card.m_value_type;
  652 + m_value_decimals = card.m_value_decimals;
  653 + m_unit = card.m_unit;
  654 + m_comment = card.m_comment;
613 655  
614 656 // Return
615 657 return;
... ...