aboutsummaryrefslogtreecommitdiff
path: root/common/sp_tree.c
diff options
context:
space:
mode:
Diffstat (limited to 'common/sp_tree.c')
-rw-r--r--common/sp_tree.c81
1 files changed, 41 insertions, 40 deletions
diff --git a/common/sp_tree.c b/common/sp_tree.c
index 495b843..5097757 100644
--- a/common/sp_tree.c
+++ b/common/sp_tree.c
@@ -10,12 +10,12 @@ static void __sp_turn_left(struct sp_node *n)
sp_paren(n) = l;
sp_right(l) = n;
- if(p && sp_left(p) == n)
+ if (p && sp_left(p) == n)
sp_left(p) = l;
else if (p)
sp_right(p) = l;
- if(sp_left(n))
+ if (sp_left(n))
sp_lparen(n) = n;
}
@@ -29,12 +29,12 @@ static void __sp_turn_right(struct sp_node *n)
sp_paren(n) = r;
sp_left(r) = n;
- if(p && sp_left(p) == n)
+ if (p && sp_left(p) == n)
sp_left(p) = r;
else if (p)
sp_right(p) = r;
- if(sp_right(n))
+ if (sp_right(n))
sp_rparen(n) = n;
}
@@ -43,10 +43,10 @@ static int __sp_balance(struct sp_node *n)
int l = 0;
int r = 0;
- if(sp_left(n))
+ if (sp_left(n))
l = sp_left(n)->hint + 1;
- if(sp_right(n))
+ if (sp_right(n))
r = sp_right(n)->hint + 1;
return l - r;
@@ -57,13 +57,13 @@ static int __sp_max_hint(struct sp_node *n)
int l = 0;
int r = 0;
- if(sp_left(n))
+ if (sp_left(n))
l = sp_left(n)->hint + 1;
- if(sp_right(n))
+ if (sp_right(n))
r = sp_right(n)->hint + 1;
- if(l > r)
+ if (l > r)
return l;
else
return r;
@@ -71,45 +71,44 @@ static int __sp_max_hint(struct sp_node *n)
static void __sp_update(struct sp_node **root, struct sp_node *n)
{
- while(n){
-
+ while (n) {
int b = __sp_balance(n);
int prev_hint = n->hint;
struct sp_node *p = sp_paren(n);
- if(b < -1) {
+ if (b < -1) {
/* leaning to the right */
- if(n == *root)
+ if (n == *root)
*root = sp_right(n);
__sp_turn_right(n);
}
- else if(b > 1){
+ else if (b > 1) {
/* leaning to the left */
- if(n == *root)
+ if (n == *root)
*root = sp_left(n);
__sp_turn_left(n);
}
n->hint = __sp_max_hint(n);
- if(n->hint == 0 || n->hint != prev_hint)
+ if (n->hint == 0 || n->hint != prev_hint)
n = p;
else
return;
}
}
-void sp_insert(struct sp_node **root, struct sp_node *p,
- struct sp_node *n, enum sp_dir d)
+void sp_insert(struct sp_node **root, struct sp_node *p, struct sp_node *n,
+ enum sp_dir d)
{
- if(!*root){
+ if (!*root) {
*root = n;
return;
}
- if(d == LEFT)
+ if (d == LEFT)
sp_left(p) = n;
else
sp_right(p) = n;
@@ -123,29 +122,29 @@ static void __sp_replace_right(struct sp_node *n, struct sp_node *r)
struct sp_node *p = sp_paren(n);
struct sp_node *rp = sp_paren(r);
- if(sp_left(rp) == r){
+ if (sp_left(rp) == r) {
sp_left(rp) = sp_right(r);
- if(sp_right(r))
+ if (sp_right(r))
sp_rparen(r) = rp;
}
- if(sp_paren(rp) == n)
+ if (sp_paren(rp) == n)
sp_paren(rp) = r;
sp_paren(r) = p;
sp_left(r) = sp_left(n);
- if(sp_right(n) != r){
+ if (sp_right(n) != r) {
sp_right(r) = sp_right(n);
sp_rparen(n) = r;
}
- if(p && sp_left(p) == n)
+ if (p && sp_left(p) == n)
sp_left(p) = r;
else if (p)
sp_right(p) = r;
- if(sp_left(n))
+ if (sp_left(n))
sp_lparen(n) = r;
}
@@ -154,39 +153,39 @@ static void __sp_replace_left(struct sp_node *n, struct sp_node *l)
struct sp_node *p = sp_paren(n);
struct sp_node *lp = sp_paren(l);
- if(sp_right(lp) == l){
+ if (sp_right(lp) == l) {
sp_right(lp) = sp_left(l);
- if(sp_left(l))
+ if (sp_left(l))
sp_lparen(l) = lp;
}
- if(sp_paren(lp) == n)
+ if (sp_paren(lp) == n)
sp_paren(lp) = l;
sp_paren(l) = p;
sp_right(l) = sp_right(n);
- if(sp_left(n) != l){
+ if (sp_left(n) != l) {
sp_left(l) = sp_left(n);
sp_lparen(n) = l;
}
- if(p && sp_left(p) == n)
+ if (p && sp_left(p) == n)
sp_left(p) = l;
else if (p)
sp_right(p) = l;
- if(sp_right(n))
+ if (sp_right(n))
sp_rparen(n) = l;
}
/* TODO: handle root better */
void sp_remove(struct sp_node **root, struct sp_node *del)
{
- if(sp_right(del)){
+ if (sp_right(del)) {
struct sp_node *least = sp_first(sp_right(del));
- if(del == *root)
+ if (del == *root)
*root = least;
__sp_replace_right(del, least);
@@ -194,10 +193,10 @@ void sp_remove(struct sp_node **root, struct sp_node *del)
return;
}
- if(sp_left(del)){
+ if (sp_left(del)) {
struct sp_node *most = sp_last(sp_left(del));
- if(del == *root)
+ if (del == *root)
*root = most;
__sp_replace_left(del, most);
@@ -205,7 +204,7 @@ void sp_remove(struct sp_node **root, struct sp_node *del)
return;
}
- if(del == *root){
+ if (del == *root) {
*root = 0;
return;
}
@@ -213,7 +212,7 @@ void sp_remove(struct sp_node **root, struct sp_node *del)
/* empty node */
struct sp_node *paren = sp_paren(del);
- if(sp_left(paren) == del)
+ if (sp_left(paren) == del)
sp_left(paren) = 0;
else
sp_right(paren) = 0;
@@ -223,14 +222,16 @@ void sp_remove(struct sp_node **root, struct sp_node *del)
struct sp_node *sp_first(struct sp_node *n)
{
- if(!sp_left(n)) return n;
+ if (!sp_left(n))
+ return n;
return sp_first(sp_left(n));
}
struct sp_node *sp_last(struct sp_node *n)
{
- if(!sp_right(n)) return n;
+ if (!sp_right(n))
+ return n;
return sp_last(sp_right(n));
}