62 int x_rank = items_[
x].load(relaxed).rank;
63 int y_rank = items_[
y].load(relaxed).rank;
69 || (x_rank == y_rank &&
x <
y))
71 std::swap(x_rank, y_rank);
76 Item x_item_old = {
x, x_rank};
77 const Item x_item_new{
y, x_rank};
78 if (!items_[
x].compare_exchange_strong(x_item_old, x_item_new, relaxed)) {
83 if (x_rank == y_rank) {
87 Item y_item_old{
y, y_rank};
88 const Item y_item_new{
y, y_rank + 1};
89 items_[
y].compare_exchange_weak(y_item_old, y_item_new, relaxed);
119 const Item item = items_[
x].load(relaxed);
120 if (
x == item.parent) {
123 const int new_parent = items_[item.parent].load(relaxed).parent;
124 if (item.parent != new_parent) {
127 Item expected = item;
128 const Item desired{new_parent, item.rank};
129 items_[
x].compare_exchange_weak(expected, desired, relaxed);