CMS 3D CMS Logo

 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Properties Friends Macros Groups Pages
Sqrt.h
Go to the documentation of this file.
1 #ifndef PhysicsTools_Utilities_Sqrt_h
2 #define PhysicsTools_Utilities_Sqrt_h
3 #include <cmath>
4 
5 namespace funct {
6 
7  template <typename T>
8  struct SqrtStruct {
9  SqrtStruct(const T& t) : _(t) {}
10  inline double operator()() const { return ::sqrt(_()); }
11  inline operator double() const { return ::sqrt(_()); }
12  T _;
13  };
14 
15  template <typename T>
16  struct Sqrt {
18  inline static type compose(const T& t) { return type(t); }
19  };
20 
21  template <typename T>
22  inline typename Sqrt<T>::type sqrt(const T& t) {
23  return Sqrt<T>::compose(t);
24  }
25 
26 } // namespace funct
27 
28 #endif
double operator()() const
Definition: Sqrt.h:10
Sqrt< T >::type sqrt(const T &t)
Definition: Sqrt.h:22
T sqrt(T t)
Definition: SSEVec.h:19
SqrtStruct(const T &t)
Definition: Sqrt.h:9
static type compose(const T &t)
Definition: Sqrt.h:18
SqrtStruct< T > type
Definition: Sqrt.h:17
long double T