3#include <pixie/rank_select/support.h>
28 explicit LoudsTree(std::span<const uint64_t> louds,
size_t tree_size)
29 : bv(louds, 2 * tree_size - 1) {}
34 LoudsNode
root_impl()
const {
return LoudsNode(0, 0); }
39 size_t size_impl()
const {
return (bv.size() + 1) / 2; }
45 return (node.
pos + 1 == bv.size()) or bv[node.
pos + 1];
60 return bv.select(node.
number + 2) - node.
pos - 1;
67 LoudsNode
child_impl(
const LoudsNode& node,
size_t i)
const {
68 size_t zeros = node.
pos + i + 1 - node.
number;
69 return LoudsNode(zeros, bv.select(zeros + 1));
76 size_t zeros = node.
pos + 1 - node.
number;
77 return LoudsNode(zeros, bv.select(zeros + 1));
88 size_t zero_pos = bv.select0(node.
number);
89 size_t parent_number = zero_pos - node.
number;
90 return LoudsNode(parent_number, bv.select(parent_number + 1));
97 size_t zero_pos = bv.select0(node.
number);
98 return bv[zero_pos + 1];
105 size_t sibling_number = node.
number + 1;
106 return LoudsNode(sibling_number, bv.select(sibling_number + 1));
LoudsNode parent_impl(const LoudsNode &node) const
Returns the parent of a node if node is not root, else returns root.
Definition louds.h:84
size_t degree_impl(const LoudsNode &node) const
Returns the number of children of a node.
Definition louds.h:56
LoudsTree(std::span< const uint64_t > louds, size_t tree_size)
Constructor from an external array of uint64_t.
Definition louds.h:28
bool is_root_impl(const LoudsNode &node) const
Indicates if node is a root.
Definition louds.h:51
bool is_leaf_impl(const LoudsNode &node) const
Indicates if node is a leaf.
Definition louds.h:44
LoudsNode child_impl(const LoudsNode &node, size_t i) const
Returns the i-th child of node Indexing starts at 0.
Definition louds.h:67
LoudsNode root_impl() const
Returns the root node.
Definition louds.h:34
LoudsNode next_sibling_impl(const LoudsNode &node) const
Returns next sibling of a node.
Definition louds.h:104
size_t size_impl() const
Returns the size of the tree.
Definition louds.h:39
bool is_last_child_impl(const LoudsNode &node) const
Indicates if node is last child.
Definition louds.h:96
LoudsNode first_child_impl(const LoudsNode &node) const
Returns first child of a node.
Definition louds.h:75
Rank/select support over an external packed bit sequence.
Definition support.h:55
CRTP facade for rooted ordered trees.
Definition tree.h:43
Logical node handle shared by succinct rooted-tree encodings.
Definition tree.h:18
std::size_t number
Logical node number in the encoding's traversal order.
Definition tree.h:20
std::size_t pos
Bit position representing the node in the succinct encoding.
Definition tree.h:23
Common interface and node handle for rooted ordered trees.