Skip to content

Commit 13f7ef1

Browse files
authored
Image: constify (#10)
1 parent eddc7a0 commit 13f7ef1

File tree

1 file changed

+29
-23
lines changed

1 file changed

+29
-23
lines changed

src/Image.cpp

Lines changed: 29 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -8,15 +8,17 @@
88

99
using namespace educelab;
1010

11+
namespace
12+
{
1113
// Conversion constants
12-
static constexpr float max_u8{std::numeric_limits<uint8_t>::max()};
13-
static constexpr float max_u16{std::numeric_limits<uint16_t>::max()};
14-
static constexpr float u8_to_u16{max_u16 / max_u8};
15-
static constexpr float u8_to_f32{1.F / max_u8};
16-
static constexpr float u16_to_u8{max_u8 / max_u16};
17-
static constexpr float u16_to_f32{1.F / max_u16};
14+
constexpr float max_u8{std::numeric_limits<std::uint8_t>::max()};
15+
constexpr float max_u16{std::numeric_limits<std::uint16_t>::max()};
16+
constexpr float u8_to_u16{max_u16 / max_u8};
17+
constexpr float u8_to_f32{1.F / max_u8};
18+
constexpr float u16_to_u8{max_u8 / max_u16};
19+
constexpr float u16_to_f32{1.F / max_u16};
1820

19-
static inline auto size_of(const Depth d) -> std::size_t
21+
auto size_of(const Depth d) -> std::size_t
2022
{
2123
switch (d) {
2224
case Depth::None:
@@ -40,8 +42,9 @@ void depth_cast<std::uint8_t, std::uint16_t>(
4042
{
4143
std::uint8_t tmpI{0};
4244
std::memcpy(&tmpI, in, sizeof(std::uint8_t));
43-
auto f = static_cast<float>(tmpI) * u8_to_u16;
44-
auto tmpO = static_cast<std::uint16_t>(std::max(std::min(f, max_u16), 0.F));
45+
const auto f = static_cast<float>(tmpI) * u8_to_u16;
46+
const auto tmpO =
47+
static_cast<std::uint16_t>(std::max(std::min(f, max_u16), 0.F));
4548
std::memcpy(out, &tmpO, sizeof(std::uint16_t));
4649
}
4750

@@ -50,7 +53,7 @@ void depth_cast<std::uint8_t, float>(const std::byte* in, std::byte* out)
5053
{
5154
std::uint8_t tmpI{0};
5255
std::memcpy(&tmpI, in, sizeof(std::uint8_t));
53-
auto tmpO = static_cast<float>(tmpI) * u8_to_f32;
56+
const auto tmpO = static_cast<float>(tmpI) * u8_to_f32;
5457
std::memcpy(out, &tmpO, sizeof(float));
5558
}
5659

@@ -60,8 +63,9 @@ void depth_cast<std::uint16_t, std::uint8_t>(
6063
{
6164
std::uint16_t tmpI{0};
6265
std::memcpy(&tmpI, in, sizeof(std::uint16_t));
63-
auto f = static_cast<float>(tmpI) * u16_to_u8;
64-
auto tmpO = static_cast<std::uint8_t>(std::max(std::min(f, max_u8), 0.F));
66+
const auto f = static_cast<float>(tmpI) * u16_to_u8;
67+
const auto tmpO =
68+
static_cast<std::uint8_t>(std::max(std::min(f, max_u8), 0.F));
6569
std::memcpy(out, &tmpO, sizeof(std::uint8_t));
6670
}
6771

@@ -70,7 +74,7 @@ void depth_cast<std::uint16_t, float>(const std::byte* in, std::byte* out)
7074
{
7175
std::uint16_t tmpI{0};
7276
std::memcpy(&tmpI, in, sizeof(std::uint16_t));
73-
auto tmpO = static_cast<float>(tmpI) * u16_to_f32;
77+
const auto tmpO = static_cast<float>(tmpI) * u16_to_f32;
7478
std::memcpy(out, &tmpO, sizeof(float));
7579
}
7680

@@ -79,7 +83,7 @@ void depth_cast<float, std::uint8_t>(const std::byte* in, std::byte* out)
7983
{
8084
float tmpI{0};
8185
std::memcpy(&tmpI, in, sizeof(float));
82-
auto tmpO = static_cast<std::uint8_t>(
86+
const auto tmpO = static_cast<std::uint8_t>(
8387
std::max(std::min(tmpI * max_u8, max_u8), 0.F));
8488
std::memcpy(out, &tmpO, sizeof(std::uint8_t));
8589
}
@@ -89,7 +93,7 @@ void depth_cast<float, std::uint16_t>(const std::byte* in, std::byte* out)
8993
{
9094
float tmpI{0};
9195
std::memcpy(&tmpI, in, sizeof(float));
92-
auto tmpO = static_cast<std::uint16_t>(
96+
const auto tmpO = static_cast<std::uint16_t>(
9397
std::max(std::min(tmpI * max_u16, max_u16), 0.F));
9498
std::memcpy(out, &tmpO, sizeof(std::uint16_t));
9599
}
@@ -98,13 +102,13 @@ template <typename TIn, typename TOut>
98102
void pixel_cast(const std::byte* in, std::byte* out, const std::size_t cns)
99103
{
100104
for (std::size_t idx{0}; idx < cns; idx++) {
101-
auto i_idx = idx * sizeof(TIn);
102-
auto o_idx = idx * sizeof(TOut);
105+
const auto i_idx = idx * sizeof(TIn);
106+
const auto o_idx = idx * sizeof(TOut);
103107
depth_cast<TIn, TOut>(&in[i_idx], &out[o_idx]);
104108
}
105109
}
106110

107-
static void convert_pixel(
111+
void convert_pixel(
108112
const std::byte* in,
109113
const Depth inType,
110114
std::byte* out,
@@ -147,6 +151,7 @@ static void convert_pixel(
147151
throw std::runtime_error("Conversion not supported.");
148152
}
149153
}
154+
} // namespace
150155

151156
Image::Image(
152157
const std::size_t height,
@@ -205,8 +210,8 @@ auto Image::Convert(const Image& i, const Depth type) -> Image
205210
// Iterate over original image data
206211
for (std::size_t y{0}; y < i.h_; y++) {
207212
for (std::size_t x{0}; x < i.w_; x++) {
208-
auto i_idx = i.unravel_(y, x);
209-
auto r_idx = result.unravel_(y, x);
213+
const auto i_idx = i.unravel_(y, x);
214+
const auto r_idx = result.unravel_(y, x);
210215
convert_pixel(
211216
&i.data_[i_idx], i.type(), &result.data_[r_idx], type, i.cns_);
212217
}
@@ -220,15 +225,16 @@ auto Image::Gamma(const Image& i, const float gamma) -> Image
220225
auto result = Convert(i, Depth::F32);
221226
for (std::size_t y{0}; y < result.h_; y++) {
222227
for (std::size_t x{0}; x < result.w_; x++) {
223-
auto idx = result.unravel_(y, x);
228+
const auto idx = result.unravel_(y, x);
224229
for (std::size_t c{0}; c < result.cns_; c++) {
225-
auto o = c * sizeof(float);
230+
const auto o = c * sizeof(float);
226231
auto* v = reinterpret_cast<float*>(&result.data_[idx + o]);
227232
*v = std::pow(*v, 1.F / gamma);
228233
}
229234
}
230235
}
231-
return Convert(result, i.type());
236+
result = Convert(result, i.type());
237+
return result;
232238
}
233239

234240
auto Image::convert(const Depth type) const -> Image

0 commit comments

Comments
 (0)