Files
rawTherapee/rtengine/rt_math.h
Hombre 8b2eac9a3d Pipette and "On Preview Widgets" branch. See issue 227
The pipette part is already working quite nice but need to be finished. The widgets part needs more work...
2014-01-21 23:37:36 +01:00

71 lines
1.7 KiB
C++

#ifndef _MYMATH_
#define _MYMATH_
#include <cmath>
#include <algorithm>
namespace rtengine {
static const int MAXVAL = 0xffff;
static const float MAXVALF = float(MAXVAL); // float version of MAXVAL
static const double MAXVALD = double(MAXVAL); // double version of MAXVAL
template <typename _Tp>
inline const _Tp SQR (_Tp x) {
// return std::pow(x,2); Slower than:
return (x*x);
}
template<typename _Tp>
inline const _Tp& min(const _Tp& a, const _Tp& b) {
return std::min(a,b);
}
template<typename _Tp>
inline const _Tp& max(const _Tp& a, const _Tp& b) {
return std::max(a,b);
}
template<typename _Tp>
inline const _Tp LIM(const _Tp& a, const _Tp& b, const _Tp& c) {
return std::max(b,std::min(a,c));
}
template<typename _Tp>
inline const _Tp LIM01(const _Tp& a) {
return std::max(_Tp(1),std::min(a,_Tp(0)));
}
template<typename _Tp>
inline const _Tp ULIM(const _Tp& a, const _Tp& b, const _Tp& c) {
return ((b < c) ? LIM(a,b,c) : LIM(a,c,b));
}
template<typename _Tp>
inline const _Tp CLIP(const _Tp& a) {
return LIM(a, static_cast<_Tp>(0), static_cast<_Tp>(MAXVAL));
}
template<typename _Tp>
inline const _Tp& min(const _Tp& a, const _Tp& b, const _Tp& c) {
return std::min(c,std::min(a,b));
}
template<typename _Tp>
inline const _Tp& max(const _Tp& a, const _Tp& b, const _Tp& c) {
return std::max(c,std::max(a,b));
}
template<typename _Tp>
inline const _Tp& min(const _Tp& a, const _Tp& b, const _Tp& c, const _Tp& d) {
return std::min(d,std::min(c,std::min(a,b)));
}
template<typename _Tp>
inline const _Tp& max(const _Tp& a, const _Tp& b, const _Tp& c, const _Tp& d) {
return std::max(d,std::max(c,std::max(a,b)));
}
}
#endif