00001 #ifndef PhysicsTools_Parameter_h 00002 #define PhysicsTools_Parameter_h 00003 #include <string> 00004 #include <boost/shared_ptr.hpp> 00005 #include <ostream> 00006 00007 namespace funct { 00008 class Parameter { 00009 public: 00010 explicit Parameter(const std::string & name ="undefined" , double value = 0) : 00011 name_(name), value_(new double(value)) { 00012 } 00013 const std::string & name() const { return name_; } 00014 double value() const { return *value_; } 00015 double operator()() const { return *value_; } 00016 operator double() const { return value(); } 00017 double operator()(double) const { return *value_; } 00018 double operator()(double, double) const { return *value_; } 00019 boost::shared_ptr<double> ptr() const { return value_; } 00020 operator boost::shared_ptr<double>() const { return value_; } 00021 Parameter & operator=(double value) { *value_ = value; return * this; } 00022 private: 00023 std::string name_; 00024 boost::shared_ptr<double> value_; 00025 }; 00026 00027 inline std::ostream & operator<<(std::ostream&cout, const funct::Parameter & p) { 00028 return cout << p.name() <<" = " << p.value(); 00029 } 00030 00031 } 00032 00033 #endif