Skip to content

Commit 7527b15

Browse files
committed
Revert "Fix corner cases for wide rank support"
This reverts commit f098934.
1 parent 3b27deb commit 7527b15

File tree

1 file changed

+9
-10
lines changed

1 file changed

+9
-10
lines changed

include/pasta/bit_vector/support/wide_rank_select.hpp

Lines changed: 9 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -113,6 +113,7 @@ class WideRankSelect : public WideRank<optimized_for> {
113113
[[nodiscard("select0 computed but not used")]] size_t
114114
select0(size_t rank) const {
115115
size_t const l1_end = l1_.size();
116+
size_t const l2_end = l2_.size();
116117

117118
size_t l2_pos = ((rank - 1) / WideRankSelectConfig::SELECT_SAMPLE_RATE);
118119
size_t l1_pos = l2_pos / 128;
@@ -132,13 +133,12 @@ class WideRankSelect : public WideRank<optimized_for> {
132133
rank -= l1_[l1_pos];
133134
}
134135

135-
l2_pos = l1_pos * 128;
136+
l2_pos = std::max(l1_pos * 128, l2_pos);
136137

137138
if constexpr (use_linear_search(find_with)) {
138-
size_t const local_l2_end = l2_pos + 128;
139139
if constexpr (optimize_one_or_dont_care(optimized_for)) {
140140
size_t added = 0;
141-
while (l2_pos + 1 < local_l2_end &&
141+
while (l2_pos + 1 < l2_end &&
142142
((added + 1) * WideRankSelectConfig::L2_BIT_SIZE) -
143143
l2_[l2_pos + 1] <
144144
rank) {
@@ -147,13 +147,12 @@ class WideRankSelect : public WideRank<optimized_for> {
147147
}
148148
rank -= (added * WideRankSelectConfig::L2_BIT_SIZE) - l2_[l2_pos];
149149
} else {
150-
while (l2_pos + 1 < local_l2_end && l2_[l2_pos + 1] < rank) {
150+
while (l2_pos + 1 < l2_end && l2_[l2_pos + 1] < rank) {
151151
++l2_pos;
152152
}
153153
rank -= l2_[l2_pos];
154154
}
155155
} else if constexpr (use_binary_search(find_with)) {
156-
size_t const l2_end = l2_.size();
157156
size_t const end = std::min((l1_pos + 1) * 128, l2_end);
158157
size_t const iterations = tlx::integer_log2_ceil(end - l2_pos + 1);
159158
size_t size = 1ULL << (iterations - 1);
@@ -233,6 +232,7 @@ class WideRankSelect : public WideRank<optimized_for> {
233232
[[nodiscard("select1 computed but not used")]] size_t
234233
select1(size_t rank) const {
235234
size_t const l1_end = l1_.size();
235+
size_t const l2_end = l2_.size();
236236

237237
size_t l2_pos = ((rank - 1) / WideRankSelectConfig::SELECT_SAMPLE_RATE);
238238
size_t l1_pos = l2_pos / 128;
@@ -252,17 +252,17 @@ class WideRankSelect : public WideRank<optimized_for> {
252252
rank -= (l1_pos * WideRankSelectConfig::L1_BIT_SIZE) - l1_[l1_pos];
253253
}
254254

255-
l2_pos = l1_pos * 128;
255+
l2_pos = std::max(l1_pos * 128, l2_pos);
256+
256257
if constexpr (use_linear_search(find_with)) {
257-
size_t const local_l2_end = std::min(l2_.size(), l2_pos + 128);
258258
if constexpr (optimize_one_or_dont_care(optimized_for)) {
259-
while (l2_pos + 1 < local_l2_end && l2_[l2_pos + 1] < rank) {
259+
while (l2_pos + 1 < l2_end && l2_[l2_pos + 1] < rank) {
260260
++l2_pos;
261261
}
262262
rank -= l2_[l2_pos];
263263
} else {
264264
size_t added = 0;
265-
while (l2_pos + 1 < local_l2_end &&
265+
while (l2_pos + 1 < l2_end &&
266266
((added + 1) * WideRankSelectConfig::L2_BIT_SIZE) -
267267
l2_[l2_pos + 1] <
268268
rank) {
@@ -272,7 +272,6 @@ class WideRankSelect : public WideRank<optimized_for> {
272272
rank -= (added * WideRankSelectConfig::L2_BIT_SIZE) - l2_[l2_pos];
273273
}
274274
} else if constexpr (use_binary_search(find_with)) {
275-
size_t const l2_end = l2_.size();
276275
size_t const end = std::min((l1_pos + 1) * 128, l2_end);
277276
size_t const iterations = tlx::integer_log2_ceil(end - l2_pos + 1);
278277
size_t size = 1ULL << (iterations - 1);

0 commit comments

Comments
 (0)