58 int x_rank = items_[
x].load(relaxed).rank;
59 int y_rank = items_[
y].load(relaxed).rank;
65 || (x_rank == y_rank && x < y))
67 std::swap(x_rank, y_rank);
72 Item x_item_old = {
x, x_rank};
73 const Item x_item_new{
y, x_rank};
74 if (!items_[x].compare_exchange_strong(x_item_old, x_item_new, relaxed)) {
79 if (x_rank == y_rank) {
83 Item y_item_old{
y, y_rank};
84 const Item y_item_new{
y, y_rank + 1};
85 items_[
y].compare_exchange_weak(y_item_old, y_item_new, relaxed);
115 const Item item = items_[
x].load(relaxed);
116 if (x == item.parent) {
119 const int new_parent = items_[item.parent].load(relaxed).parent;
120 if (item.parent != new_parent) {
123 Item expected = item;
124 const Item desired{new_parent, item.rank};
125 items_[
x].compare_exchange_weak(expected, desired, relaxed);