00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011 #ifndef ROOT_Math_IOptions
00012 #define ROOT_Math_IOptions
00013
00014
00015 #ifndef ROOT_Math_Error
00016 #include "Math/Error.h"
00017 #endif
00018
00019 #include <iostream>
00020
00021 namespace ROOT {
00022
00023
00024 namespace Math {
00025
00026
00027
00028
00029
00030
00031
00032 class IOptions {
00033
00034 public:
00035
00036 IOptions() {}
00037
00038 virtual ~IOptions() {}
00039
00040
00041 virtual IOptions * Clone() const = 0;
00042
00043
00044
00045
00046 void SetValue(const char * name, double val) { SetRealValue(name,val);}
00047 void SetValue(const char * name, int val) { SetIntValue(name,val);}
00048 void SetValue(const char * name, const char * val) { SetNamedValue(name,val);}
00049
00050
00051 double RValue(const char * name) const {
00052 double val = 0;
00053 bool ret = GetRealValue(name,val);
00054 if (!ret ) MATH_ERROR_MSGVAL("IOptions::RValue"," return 0 - real option not found",name);
00055 return val;
00056 }
00057
00058 int IValue(const char * name) const {
00059 int val = 0;
00060 bool ret = GetIntValue(name,val);
00061 if (!ret ) MATH_ERROR_MSGVAL("IOptions::IValue"," return 0 - integer option not found",name);
00062 return val;
00063 }
00064
00065 std::string NamedValue(const char * name) const {
00066 std::string val;
00067 bool ret = GetNamedValue(name,val);
00068 if (!ret ) MATH_ERROR_MSGVAL("IOptions::NamedValue"," return empty string - named option not found",name);
00069 return val;
00070 }
00071
00072
00073
00074 template <typename T>
00075 bool GetValue(const char * name, T & t) const {
00076 bool ret = DoGetValue(name, t);
00077
00078 return ret;
00079 }
00080
00081
00082
00083
00084
00085 virtual bool GetRealValue(const char *, double &) const { return false; }
00086
00087 virtual bool GetIntValue(const char *, int &) const { return false; }
00088
00089 virtual bool GetNamedValue(const char *, std::string &) const { return false; }
00090
00091
00092 virtual void SetRealValue(const char * , double ) {MATH_ERROR_MSG("IOptions::SetRealValue","Invalid setter method called"); }
00093
00094 virtual void SetIntValue(const char * , int ) {MATH_ERROR_MSG("IOptions::SetIntValue","Invalid setter method called"); }
00095
00096 virtual void SetNamedValue(const char * , const char * ) {MATH_ERROR_MSG("IOptions::SetNamedValue","Invalid setter method called"); }
00097
00098
00099
00100 virtual void Print(std::ostream & = std::cout ) const {MATH_INFO_MSG("IOptions::Print","it is not implemented");}
00101
00102
00103 private:
00104
00105 bool DoGetValue(const char *name, double &val) const { return GetRealValue(name,val); }
00106
00107 bool DoGetValue(const char *name, int &val) const { return GetIntValue(name,val); }
00108
00109 bool DoGetValue(const char *name, std::string &val) const { return GetNamedValue(name,val); }
00110
00111
00112 };
00113
00114
00115 }
00116
00117 }
00118
00119 #endif