arithmetic_impl.inc.h
Go to the documentation of this file.
1 /*
2 * ECVL - European Computer Vision Library
3 * Version: 0.3.4
4 * copyright (c) 2021, Università degli Studi di Modena e Reggio Emilia (UNIMORE), AImageLab
5 * Authors:
6 * Costantino Grana (costantino.grana@unimore.it)
7 * Federico Bolelli (federico.bolelli@unimore.it)
8 * Michele Cancilla (michele.cancilla@unimore.it)
9 * Laura Canalini (laura.canalini@unimore.it)
10 * Stefano Allegretti (stefano.allegretti@unimore.it)
11 * All rights reserved.
12 */
13 
14 // Template specialization for the in-place Addition between Image and scalar.
15 template<DataType DT, typename T>
17 {
18  static void _(Image& img, T value, bool saturate)
19  {
20  View<DT> v(img);
21  auto i = v.Begin(), e = v.End();
22  for (; i != e; ++i) {
23  auto& p = *i;
24  if (saturate) {
25  p = saturate_cast<DT>(PromoteAdd(p, value));
26  }
27  else {
28  p = static_cast<typename TypeInfo<DT>::basetype>(p + value);
29  }
30  }
31  }
32 };
33 
34 // Template specialization for the in-place subtraction between Image and scalar.
35 template<DataType DT, typename T>
37 {
38  static void _(Image& img, T value, bool saturate)
39  {
40  View<DT> v(img);
41  auto i = v.Begin(), e = v.End();
42  for (; i != e; ++i) {
43  auto& p = *i;
44  if (saturate) {
45  p = saturate_cast<DT>(PromoteSub(p, value));
46  }
47  else {
48  p = static_cast<typename TypeInfo<DT>::basetype>(p - value);
49  }
50  }
51  }
52 };
53 
54 
55 
56 // Template specialization for the in-place Multiplication between Image and scalar.
57 template<DataType DT, typename T>
59 {
60  static void _(Image& img, T value, bool saturate)
61  {
62  View<DT> v(img);
63  auto i = v.Begin(), e = v.End();
64  for (; i != e; ++i) {
65  auto& p = *i;
66  if (saturate) {
67  p = saturate_cast<DT>(PromoteMul(p, value));
68  }
69  else {
70  p = static_cast<typename TypeInfo<DT>::basetype>(p * value);
71  }
72  }
73  }
74 };
75 
76 // Template specialization for the in-place division between Image and scalar.
77 template<DataType DT, typename T>
79 {
80  static void _(Image& img, T value, bool saturate)
81  {
82  View<DT> v(img);
83  auto i = v.Begin(), e = v.End();
84  for (; i != e; ++i) {
85  auto& p = *i;
86  if (saturate) {
87  p = saturate_cast<DT>(PromoteDiv(p, value));
88  }
89  else {
90  p = static_cast<typename TypeInfo<DT>::basetype>(p / value);
91  }
92  }
93  }
94 };
static void _(Image &img, T value, bool saturate)
static void _(Image &img, T value, bool saturate)
promote_superior_type_t< T, U > PromoteDiv(T lhs, U rhs)
promote_superior_type_t< T, U > PromoteMul(T lhs, U rhs)
promote_superior_type_t< T, U > PromoteAdd(T lhs, U rhs)
promote_superior_type_t< T, U > PromoteSub(T lhs, U rhs)
static void _(Image &img, T value, bool saturate)
static void _(Image &img, T value, bool saturate)