Advertisement
ffilz

avltree_position_dirent_sorted

Mar 10th, 2017
365
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 0.76 KB | None | 0 0
  1. int avltree_position_dirent_sorted(const struct avltree_node *key,
  2.                    const struct avltree *tree,
  3.                    struct avltree_node **left,
  4.                    struct avltree_node **right)
  5. {
  6.     struct avltree_node *node = tree->root;
  7.     struct avltree_node *parent = NULL;
  8.     int res = 0;
  9.  
  10.     *left = NULL;
  11.     *right = NULL;
  12.  
  13.     while (node) {
  14.         res = avl_dirent_dirent_sorted_cmpf(node, key);
  15.         if (res == 0)
  16.             break;
  17.         parent = node;
  18.         if (res > 0))
  19.             node = node->left;
  20.         else
  21.             node = node->right;
  22.     }
  23.  
  24.     if (parent != NULL) {
  25.         switch (res) {
  26.         case -1:
  27.             *left = avltree_prev(parent);
  28.             *right = parent;
  29.             break;
  30.         case 0:
  31.             break;
  32.         case 1:
  33.             *left = parent;
  34.             *right = avltree_next(parent);
  35.             break;
  36.         default:
  37.             assert(false);
  38.         }
  39.     }
  40.  
  41.     return res;
  42. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement