提交 f014b06a 创建 作者: David Benjamin's avatar David Benjamin

Simplify advance a bit

上级 7fd23738
...@@ -166,24 +166,16 @@ radix_iterator2::advance(u32 level) ...@@ -166,24 +166,16 @@ radix_iterator2::advance(u32 level)
return true; return true;
} }
// Try to advance this level. // Try to advance this level, if we can.
for (u32 idx = index(k_, level) + 1; u32 start_idx = index(k_, level)+1;
idx < (1<<bits_per_level); if (start_idx < (1<<bits_per_level)) {
idx++) { // Find the first leaf starting at our sibling node.
void *next = node(level+1)->ptr[idx].ptr().load();
if (next != nullptr) {
// Clear everything this level and under and set this one.
k_ &= ~((1ULL<<((level+1) * bits_per_level)) - 1); k_ &= ~((1ULL<<((level+1) * bits_per_level)) - 1);
k_ |= (u64(idx) << (level * bits_per_level)); k_ |= (u64(start_idx) << (level * bits_per_level));
path_[level] = next; return find_first_leaf(level);
} else {
// Try to find a leaf.
if (level == 0 || find_first_leaf(level-1))
return true;
}
}
// Failed to advance. Abort.
return false; return false;
}
} }
bool bool
......
您添加了 0 到此讨论。请谨慎行事。
请先完成此评论的编辑!
注册 或者 后发表评论