mirror of
https://gitee.com/anod/open_agb_firm.git
synced 2025-05-07 06:14:12 +08:00
29 lines
630 B
C
29 lines
630 B
C
#include "arm11/util/rbtree.h"
|
|
#include "rbtree_internal.h"
|
|
|
|
void
|
|
rbtree_rotate(rbtree_t *tree,
|
|
rbtree_node_t *node,
|
|
int left)
|
|
{
|
|
rbtree_node_t *tmp = node->child[left];
|
|
rbtree_node_t *parent = get_parent(node);
|
|
|
|
node->child[left] = tmp->child[!left];
|
|
if(tmp->child[!left] != NULL)
|
|
set_parent(tmp->child[!left], node);
|
|
|
|
tmp->child[!left] = node;
|
|
set_parent(tmp, parent);
|
|
if(parent != NULL)
|
|
{
|
|
if(node == parent->child[!left])
|
|
parent->child[!left] = tmp;
|
|
else
|
|
parent->child[left] = tmp;
|
|
}
|
|
else
|
|
tree->root = tmp;
|
|
set_parent(node, tmp);
|
|
}
|