1#ifndef MERGE_AND_SHRINK_LABELS_H
2#define MERGE_AND_SHRINK_LABELS_H
7namespace merge_and_shrink {
18class LabelsConstIterator {
19 const std::vector<int>::const_iterator end_it;
20 std::vector<int>::const_iterator it;
21 std::size_t current_pos;
23 void advance_to_next_valid_index();
27 const std::vector<int>& label_costs,
28 std::vector<int>::const_iterator it);
29 LabelsConstIterator& operator++();
31 int operator*()
const {
return static_cast<int>(current_pos); }
33 bool operator==(
const LabelsConstIterator& rhs)
const
38 bool operator!=(
const LabelsConstIterator& rhs)
const
53 std::vector<int> label_costs;
55 int num_active_labels;
57 Labels(std::vector<int>&& label_costs,
int max_num_labels);
58 void reduce_labels(
const std::vector<int>& old_labels);
59 int get_label_cost(
int label)
const;
60 void dump_labels()
const;
63 int get_num_total_labels()
const {
return label_costs.size(); }
65 int get_max_num_labels()
const {
return max_num_labels; }
67 int get_num_active_labels()
const {
return num_active_labels; }
69 LabelsConstIterator begin()
const
71 return LabelsConstIterator(label_costs, label_costs.begin());
74 LabelsConstIterator end()
const
76 return LabelsConstIterator(label_costs, label_costs.end());