提交 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(); k_ &= ~((1ULL<<((level+1) * bits_per_level)) - 1);
if (next != nullptr) { k_ |= (u64(start_idx) << (level * bits_per_level));
// Clear everything this level and under and set this one. return find_first_leaf(level);
k_ &= ~((1ULL<<((level+1) * bits_per_level)) - 1); } else {
k_ |= (u64(idx) << (level * bits_per_level)); return false;
path_[level] = next;
// Try to find a leaf.
if (level == 0 || find_first_leaf(level-1))
return true;
}
} }
// Failed to advance. Abort.
return false;
} }
bool bool
......
您添加了 0 到此讨论。请谨慎行事。
请先完成此评论的编辑!
注册 或者 后发表评论