#ifndef ROOT_ASTRO_TFitsKeyValue #define ROOT_ASTRO_TFitsKeyValue #ifndef ROOT_TObject #include "TObject.h" #endif class TFitsPlaceHolder : public TObject { public: TFitsPlaceHolder() : TObject() {} TFitsPlaceHolder(const TFitsPlaceHolder&) : TObject() {} TFitsPlaceHolder& operator=(const TFitsPlaceHolder& rhs); virtual ~TFitsPlaceHolder() {} virtual Bool_t AsBool() const = 0; virtual Int_t AsInt() const = 0; virtual Bool_t IsBool() const = 0; virtual Bool_t IsInt() const = 0; ClassDef(TFitsPlaceHolder,0) }; template class TFitsHolder : public TFitsPlaceHolder { private: TFitsHolder& operator=(const TFitsHolder& rhs); // hidden public: T fHeld; TFitsHolder(const T& value = T()) : fHeld(value) {} virtual ~TFitsHolder() {} virtual Bool_t AsBool() const; virtual Int_t AsInt() const; virtual Bool_t IsBool() const {return typeid(T) == typeid(Bool_t);} virtual Bool_t IsInt() const {return typeid(T) == typeid(Int_t);} ClassDef(TFitsHolder,1) }; class TFitsKeyValue : public TObject { private: TFitsPlaceHolder* fContent; //-> public: TFitsKeyValue() : TObject(), fContent(0) {} TFitsKeyValue(const TFitsKeyValue& value); template TFitsKeyValue(const T& value); TFitsKeyValue& operator=(const TFitsKeyValue& rhs); virtual ~TFitsKeyValue() {SafeDelete(fContent);} virtual Bool_t AsBool() const {return fContent ? fContent->AsBool() : 0;} virtual Int_t AsInt() const {return fContent ? fContent->AsInt() : 0;} virtual Bool_t IsBool() const {return fContent ? fContent->IsBool() : kFALSE;} virtual Bool_t IsInt() const {return fContent ? fContent->IsInt() : kFALSE;} virtual operator Bool_t() {return AsBool();} virtual operator Int_t() {return AsInt();} ClassDef(TFitsKeyValue,1) // FITS card value }; #endif