File indexing completed on 2024-04-06 12:24:22
0001 #ifndef PhysicsTools_Utilities_Sqrt_h
0002 #define PhysicsTools_Utilities_Sqrt_h
0003 #include <cmath>
0004
0005 namespace funct {
0006
0007 template <typename T>
0008 struct SqrtStruct {
0009 SqrtStruct(const T& t) : _(t) {}
0010 inline double operator()() const { return ::sqrt(_()); }
0011 inline operator double() const { return ::sqrt(_()); }
0012 T _;
0013 };
0014
0015 template <typename T>
0016 struct Sqrt {
0017 typedef SqrtStruct<T> type;
0018 inline static type compose(const T& t) { return type(t); }
0019 };
0020
0021 template <typename T>
0022 inline typename Sqrt<T>::type sqrt(const T& t) {
0023 return Sqrt<T>::compose(t);
0024 }
0025
0026 }
0027
0028 #endif