22 #ifndef CVD_PIXEL_OPERATIONS_H_
23 #define CVD_PIXEL_OPERATIONS_H_
37 template <class T, unsigned int N = Component<T>::count>
struct operations {
38 inline static void assign(T & lhs,
const T & rhs) { memcpy(&lhs, &rhs,
sizeof(T)); }
40 template <
class S>
inline static void add(T & lhs,
const S & rhs) {
for (
unsigned int i=0;i<N;++i) Component<T>::get(lhs,i) +=
Component<S>::get(rhs,i); }
41 template <
class S>
inline static void subtract(T & lhs,
const S & rhs) {
for (
unsigned int i=0;i<N;++i) Component<T>::get(lhs,i) -=
Component<S>::get(rhs,i); }
44 inline static bool equal(
const T & a,
const T & b) {
return memcmp(&a,&b,
sizeof(T)) == 0; }
45 inline static void zero(T & t) { memset(&t, 0,
sizeof(T)); }
49 template <
class S>
inline static void assign(T& lhs,
const S& rhs) { lhs = (T)rhs; }
50 template <
class S>
inline static void add(T& lhs,
const S& rhs) { lhs += rhs; }
51 template <
class S>
inline static void subtract(T& lhs,
const S& rhs) { lhs -= rhs; }
52 template <
class S>
inline static void multiply(T& lhs,
const S& rhs) { lhs = (T)(lhs*rhs); }
53 template <
class S>
inline static void divide(T& lhs,
const S& rhs) { lhs = (T)(lhs/rhs); }
54 inline static bool equal(
const T& a,
const T& b) {
return a == b; }
55 inline static void zero(T& t) { t = T(); }
58 template <class T, unsigned int N=Pixel::Component<T>::count>
62 static inline diff_type
avgabs(
const T& a,
const T& b) {
64 for (
unsigned int i=0; i<N; i++)
68 static inline diff_type
avg(
const T& a,
const T& b) {
70 for (
unsigned int i=0; i<N; i++)
80 static inline diff_type
avgabs(
const T& a,
const T& b) {
83 static inline diff_type
avg(
const T& a,
const T& b) {
static void add(T &lhs, const S &rhs)
static const P & get(const P &pixel, size_t)
static void divide(T &lhs, const S &rhs)
static void subtract(T &lhs, const S &rhs)
static void multiply(T &lhs, const S &rhs)
static void subtract(T &lhs, const S &rhs)
static void divide(T &lhs, const S &rhs)
static void add(T &lhs, const S &rhs)
static void assign(T &lhs, const T &rhs)
static void assign(T &lhs, const S &rhs)
static diff_type avgabs(const T &a, const T &b)
static void multiply(T &lhs, const S &rhs)
Pixel::Component< T >::type TComp
Pixel::traits< TComp >::wider_type diff_type
Pixel::traits< TComp >::wider_type diff_type
static bool equal(const T &a, const T &b)
static diff_type avg(const T &a, const T &b)
static bool equal(const T &a, const T &b)
static diff_type avgabs(const T &a, const T &b)
static void assign(T &lhs, const S &rhs)
Pixel::Component< T >::type TComp
static diff_type avg(const T &a, const T &b)