MorphologicalAttributeFilters
Public API documentation
Loading...
Searching...
No Matches
NodeDecisionMasks.hpp
1#pragma once
2
3#include <cstddef>
4#include <utility>
5#include <vector>
6
7namespace mmcfilters {
8
16 private:
17 std::vector<bool> decisions_;
18
19 public:
22
27 explicit NodePreservationMask(std::vector<bool> decisions) : decisions_(std::move(decisions)) {}
28
34 NodePreservationMask(std::size_t size, bool preserveNode) : decisions_(size, preserveNode) {}
35
37 [[nodiscard]] std::size_t size() const noexcept { return decisions_.size(); }
38
40 [[nodiscard]] bool empty() const noexcept { return decisions_.empty(); }
41
47 [[nodiscard]] bool operator[](std::size_t index) const { return decisions_[index]; }
48
50 [[nodiscard]] const std::vector<bool>& decisions() const noexcept { return decisions_; }
51};
52
60 private:
61 std::vector<bool> decisions_;
62
63 public:
65 NodePruningMask() = default;
66
71 explicit NodePruningMask(std::vector<bool> decisions) : decisions_(std::move(decisions)) {}
72
78 NodePruningMask(std::size_t size, bool pruneNode) : decisions_(size, pruneNode) {}
79
81 [[nodiscard]] std::size_t size() const noexcept { return decisions_.size(); }
82
84 [[nodiscard]] bool empty() const noexcept { return decisions_.empty(); }
85
91 [[nodiscard]] bool operator[](std::size_t index) const { return decisions_[index]; }
92
94 [[nodiscard]] const std::vector<bool>& decisions() const noexcept { return decisions_; }
95};
96
98[[nodiscard]] inline NodePruningMask toNodePruningMask(const NodePreservationMask& nodePreservationMask) {
99 std::vector<bool> nodePruningDecisions(nodePreservationMask.size(), false);
100 for (std::size_t index = 0; index < nodePreservationMask.size(); ++index) {
101 nodePruningDecisions[index] = !nodePreservationMask[index];
102 }
103 return NodePruningMask(std::move(nodePruningDecisions));
104}
105
107[[nodiscard]] inline NodePreservationMask toNodePreservationMask(const NodePruningMask& nodePruningMask) {
108 std::vector<bool> nodePreservationDecisions(nodePruningMask.size(), false);
109 for (std::size_t index = 0; index < nodePruningMask.size(); ++index) {
110 nodePreservationDecisions[index] = !nodePruningMask[index];
111 }
112 return NodePreservationMask(std::move(nodePreservationDecisions));
113}
114
115} // namespace mmcfilters
Dense Boolean decisions where true means preserve the node.
const std::vector< bool > & decisions() const noexcept
Returns all preservation decisions.
NodePreservationMask(std::vector< bool > decisions)
Creates a preservation mask from explicit decisions.
bool operator[](std::size_t index) const
Returns one preservation decision.
std::size_t size() const noexcept
Returns the number of dense node slots.
NodePreservationMask()=default
Creates an empty preservation mask.
NodePreservationMask(std::size_t size, bool preserveNode)
Creates a preservation mask whose entries share one decision.
bool empty() const noexcept
Tests whether the mask contains no decisions.
Dense Boolean decisions where true means prune the node.
bool empty() const noexcept
Tests whether the mask contains no decisions.
std::size_t size() const noexcept
Returns the number of dense node slots.
const std::vector< bool > & decisions() const noexcept
Returns all pruning decisions.
NodePruningMask(std::size_t size, bool pruneNode)
Creates a pruning mask whose entries share one decision.
NodePruningMask(std::vector< bool > decisions)
Creates a pruning mask from explicit decisions.
NodePruningMask()=default
Creates an empty pruning mask.
bool operator[](std::size_t index) const
Returns one pruning decision.
Owning result for one computed scalar attribute layout and buffer.