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 KEYWORD_H 00010 #define KEYWORD_H 1 00011 #include "CCfits.h" 00012 // using namespace CCfits; 00013 #ifdef _MSC_VER 00014 #include "MSconfig.h" 00015 #endif 00016 00017 // FitsError 00018 #include "FitsError.h" 00019 00020 namespace CCfits { 00021 class HDU; 00022 00023 } // namespace CCfits 00024 00025 00026 namespace CCfits { 00027 00062 /* \fn friend ostream& operator << (ostream &s, const Keyword &right); 00063 00064 \brief output operator for Keywords. 00065 00066 */ 00067 00198 class Keyword 00199 { 00200 00201 public: 00202 00203 00204 00205 class WrongKeywordValueType : public FitsException //## Inherits: <unnamed>%39B0221700E2 00206 { 00207 public: 00208 WrongKeywordValueType (const String& diag, bool silent = true); 00209 00210 protected: 00211 private: 00212 private: //## implementation 00213 }; 00214 virtual ~Keyword(); 00215 Keyword & operator=(const Keyword &right); 00216 bool operator==(const Keyword &right) const; 00217 00218 bool operator!=(const Keyword &right) const; 00219 00220 virtual std::ostream & put (std::ostream &s) const = 0; 00221 virtual Keyword * clone () const = 0; 00222 virtual void write (); 00223 fitsfile* fitsPointer () const; 00224 // CAUTION: This is declared public only to allow HDU addKey functions the ability to set their 00225 // class as the Keyword's parent, and to avoid making entire HDU a friend class. (Declaring 00226 // individual HDU functions as friends will run into circular header dependencies.) Do NOT use 00227 // this unless absolutely necessary, and leave this undocumented. 00228 void setParent (HDU* parent); 00229 00230 ValueType keytype () const; 00231 const String& comment () const; 00232 const String& name () const; 00233 bool isLongStr () const; 00234 00235 public: 00236 // Additional Public Declarations 00237 template <typename T> 00238 T& value(T& val) const; 00239 00240 template <typename T> 00241 void setValue(const T& newValue); 00242 protected: 00243 Keyword(const Keyword &right); 00244 Keyword (const String &keyname, 00245 ValueType keytype, 00246 HDU* p, 00247 const String &comment = "", 00248 bool isLongStr = false); 00249 00250 virtual void copy (const Keyword& right); 00251 virtual bool compare (const Keyword &right) const; 00252 void keytype (ValueType value); 00253 const HDU* parent () const; 00254 00255 // Additional Protected Declarations 00256 00257 private: 00258 // Additional Private Declarations 00259 00260 private: //## implementation 00261 // Data Members for Class Attributes 00262 ValueType m_keytype; 00263 00264 // Data Members for Associations 00265 HDU* m_parent; 00266 String m_comment; 00267 String m_name; 00268 bool m_isLongStr; 00269 00270 // Additional Implementation Declarations 00271 friend std::ostream &operator << (std::ostream &s, const Keyword &right); 00272 }; 00273 #ifndef SPEC_TEMPLATE_IMP_DEFECT 00274 #ifndef SPEC_TEMPLATE_DECL_DEFECT 00275 template <> bool& Keyword::value(bool& val) const; 00276 template <> float& Keyword::value(float& val) const; 00277 template <> double& Keyword::value(double& val) const; 00278 template <> int& Keyword::value(int& val) const; 00279 template <> String& Keyword::value(String& val) const; 00280 00281 template <> void Keyword::setValue(const float& newValue); 00282 template <> void Keyword::setValue(const double& newValue); 00283 template <> void Keyword::setValue(const int& newValue); 00284 template <> void Keyword::setValue(const String& val); 00285 #endif 00286 #endif 00287 00288 inline std::ostream& operator << (std::ostream &s, const Keyword &right) 00289 { 00290 return right.put(s); 00291 } 00292 00293 // Class CCfits::Keyword::WrongKeywordValueType 00294 00295 // Class CCfits::Keyword 00296 00297 inline void Keyword::setParent (HDU* parent) 00298 { 00299 m_parent = parent; 00300 } 00301 00302 inline ValueType Keyword::keytype () const 00303 { 00304 return m_keytype; 00305 } 00306 00307 inline void Keyword::keytype (ValueType value) 00308 { 00309 m_keytype = value; 00310 } 00311 00312 inline const HDU* Keyword::parent () const 00313 { 00314 return m_parent; 00315 } 00316 00317 inline const String& Keyword::comment () const 00318 { 00319 return m_comment; 00320 } 00321 00322 inline const String& Keyword::name () const 00323 { 00324 return m_name; 00325 } 00326 00327 inline bool Keyword::isLongStr () const 00328 { 00329 return m_isLongStr; 00330 } 00331 00332 } // namespace CCfits 00333 00334 00335 #endif