UFO 1.0.0
An Efficient Probabilistic 3D Mapping Framework That Embraces the Unknown
Loading...
Searching...
No Matches
arithmetic.hpp
1
45#ifndef UFO_VISION_COLOR_ARITHMETIC_HPP
46#define UFO_VISION_COLOR_ARITHMETIC_HPP
47
48// UFO
49#include <ufo/vision/color/concepts.hpp>
50#include <ufo/vision/color/detail/arithmetic.hpp>
51
52// STL
53#include <functional>
54
55namespace ufo
56{
62/**************************************************************************************
63| |
64| Addition |
65| |
66**************************************************************************************/
67
74template <Color C>
75constexpr C& operator+=(C& lhs, C const& rhs)
76{
77 lhs = detail::reduce(lhs, rhs, std::plus{});
78 return lhs;
79}
80
87template <Color C>
88constexpr C operator+(C lhs, C const& rhs)
89{
90 lhs += rhs;
91 return lhs;
92}
93
94/**************************************************************************************
95| |
96| Subtraction |
97| |
98**************************************************************************************/
99
106template <Color C>
107constexpr C& operator-=(C& lhs, C const& rhs)
108{
109 lhs = detail::reduce(lhs, rhs, std::minus{});
110 return lhs;
111}
112
119template <Color C>
120constexpr C operator-(C lhs, C const& rhs)
121{
122 lhs -= rhs;
123 return lhs;
124}
125
126/**************************************************************************************
127| |
128| Multiplication |
129| |
130**************************************************************************************/
131
138template <Color C>
139constexpr C& operator*=(C& lhs, float rhs)
140{
141 lhs = detail::reduce(lhs, rhs, std::multiplies{});
142 return lhs;
143}
144
151template <Color C>
152constexpr C& operator*=(C& lhs, C const& rhs)
153{
154 lhs = detail::reduce(lhs, rhs, std::multiplies{});
155 return lhs;
156}
157
164template <Color C>
165constexpr C operator*(C lhs, C const& rhs)
166{
167 lhs *= rhs;
168 return lhs;
169}
170
177template <Color C>
178constexpr C operator*(C lhs, float rhs)
179{
180 lhs *= rhs;
181 return lhs;
182}
183
190template <Color C>
191constexpr C operator*(float lhs, C rhs)
192{
193 return detail::reduce(lhs, rhs, std::multiplies{});
194}
195
196/**************************************************************************************
197| |
198| Division |
199| |
200**************************************************************************************/
201
208template <Color C>
209constexpr C& operator/=(C& lhs, C const& rhs)
210{
211 lhs = detail::reduce(lhs, rhs, std::divides{});
212 return lhs;
213}
214
221template <Color C>
222constexpr C& operator/=(C& lhs, float rhs)
223{
224 lhs = detail::reduce(lhs, rhs, std::divides{});
225 return lhs;
226}
227
234template <Color C>
235constexpr C operator/(C lhs, C const& rhs)
236{
237 lhs /= rhs;
238 return lhs;
239}
240
247template <Color C>
248constexpr C operator/(C lhs, float rhs)
249{
250 lhs /= rhs;
251 return lhs;
252}
253
260template <Color C>
261constexpr C operator/(float lhs, C rhs)
262{
263 return detail::reduce(lhs, rhs, std::divides{});
264}
265
269} // namespace ufo
270
271#endif // UFO_VISION_COLOR_ARITHMETIC_HPP
constexpr C & operator/=(C &lhs, C const &rhs)
Divides a color by another color component-wise.
constexpr C & operator-=(C &lhs, C const &rhs)
Subtracts two colors component-wise.
constexpr C & operator*=(C &lhs, float rhs)
Multiplies a color by a scalar.
constexpr C & operator+=(C &lhs, C const &rhs)
Adds two colors component-wise.
All vision-related classes and functions.
Definition cloud.hpp:49
constexpr Mat< Rows, Cols, T > operator*(Mat< Rows, Cols, T > lhs, T rhs) noexcept
Multiplies every element of lhs by scalar rhs.
Definition mat.hpp:863
constexpr Mat< Rows, Cols, T > operator/(Mat< Rows, Cols, T > lhs, T rhs) noexcept
Divides every element of lhs by scalar rhs.
Definition mat.hpp:880