Skip to content

Commit e32c846

Browse files
committed
refactor everything
1 parent bac2896 commit e32c846

5 files changed

Lines changed: 49 additions & 31 deletions

File tree

CMakePresets.json

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -114,6 +114,7 @@
114114
"benchmark_tests",
115115
"test_rmm",
116116
"louds_tree_tests",
117+
"dfuds_tree_tests",
117118
"excess_positions_tests"
118119
]
119120
},
@@ -126,6 +127,7 @@
126127
"benchmark_tests",
127128
"test_rmm",
128129
"louds_tree_tests",
130+
"dfuds_tree_tests",
129131
"excess_positions_tests"
130132
]
131133
},
@@ -137,6 +139,7 @@
137139
"benchmarks",
138140
"bench_rmm",
139141
"louds_tree_benchmarks",
142+
"dfuds_tree_benchmarks",
140143
"alignment_comparison",
141144
"excess_positions_benchmarks"
142145
]
@@ -150,6 +153,7 @@
150153
"bench_rmm",
151154
"bench_rmm_sdsl",
152155
"louds_tree_benchmarks",
156+
"dfuds_tree_benchmarks",
153157
"alignment_comparison",
154158
"excess_positions_benchmarks"
155159
]
@@ -162,6 +166,7 @@
162166
"benchmarks",
163167
"bench_rmm",
164168
"louds_tree_benchmarks",
169+
"dfuds_tree_benchmarks",
165170
"alignment_comparison",
166171
"excess_positions_benchmarks"
167172
]
@@ -183,6 +188,7 @@
183188
"benchmark_tests",
184189
"test_rmm",
185190
"louds_tree_tests",
191+
"dfuds_tree_tests",
186192
"excess_positions_tests"
187193
]
188194
},
@@ -195,6 +201,7 @@
195201
"benchmark_tests",
196202
"test_rmm",
197203
"louds_tree_tests",
204+
"dfuds_tree_tests",
198205
"excess_positions_tests"
199206
]
200207
}

include/pixie/dfuds_tree.h

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -53,7 +53,7 @@ class DFUDSTree {
5353
* @brief Indicates if @p node is a leaf
5454
*/
5555
bool is_leaf(const Node& node) const {
56-
return (node.pos + 1 == num_bits_) or rmm_.bit(node.pos) == 0;
56+
return (node.pos + 1 == num_bits_) or rmm_.bit_impl(node.pos) == 0;
5757
}
5858

5959
/**

include/pixie/rmm_base.h

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -193,6 +193,13 @@ class RmMBase {
193193
return impl().enclose_impl(open_position);
194194
}
195195

196+
/**
197+
* @brief Read bit at position @p position (LSB-first across words).
198+
*/
199+
int bit_impl(const size_t& position) const noexcept {
200+
return impl().bit_impl(position);
201+
}
202+
196203
private:
197204
const Impl& impl() const { return static_cast<const Impl&>(*this); }
198205
};

include/pixie/rmm_tree.h

Lines changed: 30 additions & 30 deletions
Original file line numberDiff line numberDiff line change
@@ -246,7 +246,7 @@ class RmMTree : public RmMBase<RmMTree> {
246246
pattern_count += rr_in_block(block_begin, end_position);
247247
// boundary between the last full node and the leaf tail
248248
if (block_index > 0 && end_position > block_begin &&
249-
previous_last_bit == 1 && bit(block_begin) == 0) {
249+
previous_last_bit == 1 && bit_impl(block_begin) == 0) {
250250
++pattern_count;
251251
}
252252
return pattern_count;
@@ -710,7 +710,7 @@ class RmMTree : public RmMBase<RmMTree> {
710710
std::min(range_end, begin_block_end - 1);
711711
for (size_t position = range_begin; position <= end_of_first_chunk;
712712
++position) {
713-
current_excess += bit(position) ? +1 : -1;
713+
current_excess += bit_impl(position) ? +1 : -1;
714714
if (current_excess < min_value) {
715715
min_value = current_excess;
716716
local_count = 1;
@@ -745,7 +745,7 @@ class RmMTree : public RmMBase<RmMTree> {
745745
int current_excess = 0, min_value = INT_MAX, local_count = 0;
746746
for (size_t position = end_block_start; position <= range_end;
747747
++position) {
748-
current_excess += bit(position) ? +1 : -1;
748+
current_excess += bit_impl(position) ? +1 : -1;
749749
if (current_excess < min_value) {
750750
min_value = current_excess;
751751
local_count = 1;
@@ -970,6 +970,13 @@ class RmMTree : public RmMBase<RmMTree> {
970970
return bwdsearch_impl(position + 1, -2);
971971
}
972972

973+
/**
974+
* @brief Read bit at position @p position (LSB-first across words).
975+
*/
976+
inline int bit_impl(const size_t& position) const noexcept {
977+
return (bits[position >> 6] >> (position & 63)) & 1u;
978+
}
979+
973980
private:
974981
/**
975982
* @brief Count "10" occurrences inside a 64-bit slice of given logical
@@ -1407,7 +1414,7 @@ class RmMTree : public RmMBase<RmMTree> {
14071414
pos += 16;
14081415
}
14091416
while (pos < end) {
1410-
cur += bit(pos) ? +1 : -1;
1417+
cur += bit_impl(pos) ? +1 : -1;
14111418
if (cur == required_delta) {
14121419
return pos;
14131420
}
@@ -1440,7 +1447,7 @@ class RmMTree : public RmMBase<RmMTree> {
14401447

14411448
size_t pos = start;
14421449
while (pos < end && (pos & 7)) {
1443-
cur += bit(pos) ? +1 : -1;
1450+
cur += bit_impl(pos) ? +1 : -1;
14441451
if (cur == required_delta) {
14451452
if (out_total) {
14461453
*out_total = cur;
@@ -1481,7 +1488,7 @@ class RmMTree : public RmMBase<RmMTree> {
14811488
}
14821489

14831490
while (pos < end) {
1484-
cur += bit(pos) ? +1 : -1;
1491+
cur += bit_impl(pos) ? +1 : -1;
14851492
if (cur == required_delta) {
14861493
if (out_total) {
14871494
*out_total = cur;
@@ -1530,7 +1537,7 @@ class RmMTree : public RmMBase<RmMTree> {
15301537
}
15311538

15321539
while (position < search_end) {
1533-
current_excess += bit(position) ? 1 : -1;
1540+
current_excess += bit_impl(position) ? 1 : -1;
15341541
if (current_excess == required_delta) {
15351542
return position;
15361543
}
@@ -1656,14 +1663,14 @@ class RmMTree : public RmMBase<RmMTree> {
16561663
return npos;
16571664
}
16581665
const size_t bit_pos = pos_end - 1;
1659-
cur_end -= bit(bit_pos) ? +1 : -1; // move one bit to the left
1666+
cur_end -= bit_impl(bit_pos) ? +1 : -1; // move one bit to the left
16601667
pos_end = bit_pos;
16611668
}
16621669
#else
16631670
size_t last_boundary = npos;
16641671
int cur = 0;
16651672
for (size_t pos = block_begin; pos < boundary_max; ++pos) {
1666-
cur += bit(pos) ? +1 : -1;
1673+
cur += bit_impl(pos) ? +1 : -1;
16671674
if (cur == required_delta) {
16681675
last_boundary = pos + 1;
16691676
}
@@ -1902,7 +1909,7 @@ class RmMTree : public RmMBase<RmMTree> {
19021909
if (block_end == seg_end) {
19031910
const int total = node_total_excess[node_index];
19041911
if (!allow_right_boundary && block_end > segment_base) {
1905-
prefix_override = total - (bit(block_end - 1) ? +1 : -1);
1912+
prefix_override = total - (bit_impl(block_end - 1) ? +1 : -1);
19061913
} else {
19071914
prefix_override = total;
19081915
}
@@ -2202,13 +2209,6 @@ class RmMTree : public RmMBase<RmMTree> {
22022209
build(leaf_block_bits, max_overhead);
22032210
}
22042211

2205-
/**
2206-
* @brief Read bit at position @p position (LSB-first across words).
2207-
*/
2208-
inline int bit(const size_t& position) const noexcept {
2209-
return (bits[position >> 6] >> (position & 63)) & 1u;
2210-
}
2211-
22122212
/**
22132213
* @brief Number of ones in node @p node_index computed from size and total
22142214
* excess.
@@ -2240,7 +2240,7 @@ class RmMTree : public RmMBase<RmMTree> {
22402240
}
22412241
// to byte alignment
22422242
while (range_begin <= range_end && (range_begin & 7)) {
2243-
current_excess += bit(range_begin) ? +1 : -1;
2243+
current_excess += bit_impl(range_begin) ? +1 : -1;
22442244
if (current_excess < min_value) {
22452245
min_value = current_excess;
22462246
count = 1;
@@ -2265,7 +2265,7 @@ class RmMTree : public RmMBase<RmMTree> {
22652265
}
22662266
// tail
22672267
while (range_begin <= range_end) {
2268-
current_excess += bit(range_begin) ? +1 : -1;
2268+
current_excess += bit_impl(range_begin) ? +1 : -1;
22692269
if (current_excess < min_value) {
22702270
min_value = current_excess;
22712271
count = 1;
@@ -2335,7 +2335,7 @@ class RmMTree : public RmMBase<RmMTree> {
23352335
size_t position = range_begin;
23362336

23372337
while (position <= range_end && (position & 7)) {
2338-
current_excess += bit(position) ? +1 : -1;
2338+
current_excess += bit_impl(position) ? +1 : -1;
23392339
if (current_excess < min_value) {
23402340
min_value = current_excess;
23412341
}
@@ -2349,7 +2349,7 @@ class RmMTree : public RmMBase<RmMTree> {
23492349
position += 8;
23502350
}
23512351
while (position <= range_end) {
2352-
current_excess += bit(position) ? +1 : -1;
2352+
current_excess += bit_impl(position) ? +1 : -1;
23532353
if (current_excess < min_value) {
23542354
min_value = current_excess;
23552355
}
@@ -2361,7 +2361,7 @@ class RmMTree : public RmMBase<RmMTree> {
23612361

23622362
// to byte alignment
23632363
while (position <= range_end && (position & 7)) {
2364-
current_excess += bit(position) ? +1 : -1;
2364+
current_excess += bit_impl(position) ? +1 : -1;
23652365
if (current_excess == min_value) {
23662366
if (--target_min_rank == 0) {
23672367
return position;
@@ -2392,7 +2392,7 @@ class RmMTree : public RmMBase<RmMTree> {
23922392

23932393
// tail
23942394
while (position <= range_end) {
2395-
current_excess += bit(position) ? +1 : -1;
2395+
current_excess += bit_impl(position) ? +1 : -1;
23962396
if (current_excess == min_value) {
23972397
if (--target_min_rank == 0) {
23982398
return position;
@@ -2495,7 +2495,7 @@ class RmMTree : public RmMBase<RmMTree> {
24952495
// prefix at boundary_max = start_position-1:
24962496
// leaf_delta is prefix at start_position, subtract last step
24972497
(start_position > leaf_block_begin
2498-
? (leaf_delta - (bit(start_position - 1) ? +1 : -1))
2498+
? (leaf_delta - (bit_impl(start_position - 1) ? +1 : -1))
24992499
: 0));
25002500
}
25012501

@@ -2516,7 +2516,7 @@ class RmMTree : public RmMBase<RmMTree> {
25162516

25172517
// to byte allignment
25182518
while (range_begin <= range_end && (range_begin & 7)) {
2519-
current_excess += bit(range_begin) ? +1 : -1;
2519+
current_excess += bit_impl(range_begin) ? +1 : -1;
25202520
if (current_excess < min_value) {
25212521
min_value = current_excess;
25222522
first_position = range_begin;
@@ -2538,7 +2538,7 @@ class RmMTree : public RmMBase<RmMTree> {
25382538

25392539
// tail
25402540
while (range_begin <= range_end) {
2541-
current_excess += bit(range_begin) ? +1 : -1;
2541+
current_excess += bit_impl(range_begin) ? +1 : -1;
25422542
if (current_excess < min_value) {
25432543
min_value = current_excess;
25442544
first_position = range_begin;
@@ -2565,7 +2565,7 @@ class RmMTree : public RmMBase<RmMTree> {
25652565
first_position = npos;
25662566

25672567
while (range_begin <= range_end && (range_begin & 7)) {
2568-
current_excess += bit(range_begin) ? +1 : -1;
2568+
current_excess += bit_impl(range_begin) ? +1 : -1;
25692569
if (current_excess > max_value) {
25702570
max_value = current_excess;
25712571
first_position = range_begin;
@@ -2585,7 +2585,7 @@ class RmMTree : public RmMBase<RmMTree> {
25852585
}
25862586

25872587
while (range_begin <= range_end) {
2588-
current_excess += bit(range_begin) ? +1 : -1;
2588+
current_excess += bit_impl(range_begin) ? +1 : -1;
25892589
if (current_excess > max_value) {
25902590
max_value = current_excess;
25912591
first_position = range_begin;
@@ -2649,7 +2649,7 @@ class RmMTree : public RmMBase<RmMTree> {
26492649
segment_size_bits[leaf_node_index] = segment_end - segment_begin;
26502650

26512651
if (segment_begin < segment_end) {
2652-
node_first_bit[leaf_node_index] = bit(segment_begin);
2652+
node_first_bit[leaf_node_index] = bit_impl(segment_begin);
26532653
}
26542654

26552655
const auto& aggregates_table = LUT8();
@@ -2693,7 +2693,7 @@ class RmMTree : public RmMBase<RmMTree> {
26932693

26942694
// Tail < 8 bits
26952695
while (position < segment_end) {
2696-
const uint8_t bit_value = bit(position);
2696+
const uint8_t bit_value = bit_impl(position);
26972697
if (previous_bit == 1 && bit_value == 0) {
26982698
pattern10_count++;
26992699
}

include/pixie/rmm_tree_sdsl.h

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -277,6 +277,10 @@ class SdslRmMTree : public RmMBase<SdslRmMTree> {
277277
return position < size_ ? position : npos;
278278
}
279279

280+
int bit_impl(const size_t& position) const noexcept {
281+
return (bits_[position >> 6] >> (position & 63)) & 1u;
282+
}
283+
280284
private:
281285
void reset_support() { tree_ = BpSupport(&bits_); }
282286

0 commit comments

Comments
 (0)