isce3 0.25.0
Loading...
Searching...
No Matches
LabelMap.icc
1#if !defined(ISCE_UNWRAP_ICU_LABELMAP_ICC)
2#error "LabelMap.icc is an implementation detail of class LabelMap"
3#endif
4
5#include <cstdint> // UINT8_MAX
6#include <exception> // std::overflow_error
7
8namespace isce3::unwrap::icu
9{
10
11inline
12LabelMap::LabelMap()
13{
14 // Init with a single unused element so the first label used is 1 (0 is not
15 // a valid label).
16 _labels.resize(1);
17}
18
19inline
20uint8_t LabelMap::nextlabel()
21{
22 if (_labels.size() > UINT8_MAX)
23 {
24 throw std::overflow_error("exceeded max connected components\n");
25 }
26
27 uint8_t newlabel = _labels.size();
28 _labels.push_back(newlabel);
29 return newlabel;
30}
31
32inline uint8_t LabelMap::getlabel(const uint8_t l) const { return _labels[l]; }
33
34inline
35void LabelMap::setlabel(const uint8_t oldlabel, const uint8_t newlabel)
36{
37 for (size_t l = 1; l < _labels.size(); ++l)
38 {
39 if (_labels[l] == oldlabel) { _labels[l] = newlabel; }
40 }
41}
42
43inline size_t LabelMap::size() const { return _labels.size(); }
44
45}
46

Generated for ISCE3.0 by doxygen 1.13.2.