Commit a12d06bb9fbc763cb8a8d7dc6b91300fbd29d0d1

Authored by knodlseder
1 parent aad6f74b

implement type specific write

include/GFitsHeaderCard.hpp
@@ -66,6 +66,7 @@ public: @@ -66,6 +66,7 @@ public:
66 std::string keyname(void) const; 66 std::string keyname(void) const;
67 std::string value(void) const; 67 std::string value(void) const;
68 int value_type(void) const; 68 int value_type(void) const;
  69 + int decimals(void) const;
69 std::string unit(void) const; 70 std::string unit(void) const;
70 std::string comment(void) const; 71 std::string comment(void) const;
71 std::string string(void); 72 std::string string(void);
@@ -85,11 +86,12 @@ private: @@ -85,11 +86,12 @@ private:
85 int get_value_type(const std::string& value); 86 int get_value_type(const std::string& value);
86 87
87 // Private data area 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,6 +13,7 @@
13 ***************************************************************************/ 13 ***************************************************************************/
14 14
15 /* __ Includes ___________________________________________________________ */ 15 /* __ Includes ___________________________________________________________ */
  16 +#include <iostream>
16 #include "GException.hpp" 17 #include "GException.hpp"
17 #include "GFitsHeaderCard.hpp" 18 #include "GFitsHeaderCard.hpp"
18 19
@@ -353,6 +354,16 @@ int GFitsHeaderCard::value_type(void) const @@ -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 * @brief Return header card value unit 367 * @brief Return header card value unit
357 ***************************************************************************/ 368 ***************************************************************************/
358 std::string GFitsHeaderCard::unit(void) const 369 std::string GFitsHeaderCard::unit(void) const
@@ -564,8 +575,37 @@ void GFitsHeaderCard::write(__fitsfile* fptr) @@ -564,8 +575,37 @@ void GFitsHeaderCard::write(__fitsfile* fptr)
564 throw GException::fits_error(G_READ_NUM, status); 575 throw GException::fits_error(G_READ_NUM, status);
565 576
566 // Write keyword 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 if (status != 0) 609 if (status != 0)
570 throw GException::fits_error(G_WRITE, status); 610 throw GException::fits_error(G_WRITE, status);
571 611
@@ -588,7 +628,8 @@ void GFitsHeaderCard::init_members(void) @@ -588,7 +628,8 @@ void GFitsHeaderCard::init_members(void)
588 // Initialise members 628 // Initialise members
589 m_keyname.clear(); 629 m_keyname.clear();
590 m_value.clear(); 630 m_value.clear();
591 - m_value_type = CT_UNKNOWN; 631 + m_value_type = CT_UNKNOWN;
  632 + m_value_decimals = 10;
592 m_unit.clear(); 633 m_unit.clear();
593 m_comment.clear(); 634 m_comment.clear();
594 635
@@ -605,11 +646,12 @@ void GFitsHeaderCard::init_members(void) @@ -605,11 +646,12 @@ void GFitsHeaderCard::init_members(void)
605 void GFitsHeaderCard::copy_members(const GFitsHeaderCard& card) 646 void GFitsHeaderCard::copy_members(const GFitsHeaderCard& card)
606 { 647 {
607 // Copy membres 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 // Return 656 // Return
615 return; 657 return;