예제 #1
0
status_t _release_tree_chunks(rb_tree_handle_t tree) {
    status_t status = NO_ERROR;
    rb_tree_node_handle_t last = NULL;
    rb_tree_node_handle_t next = NULL;
    void* chunk = NULL;

    if (NULL == tree) {
        return ERR_NULL_POINTER;
    }

    status = rb_tree_enumerate(
                 tree,
                 NULL,
                 NULL,
                 last,
                 &next);
    while ((NO_ERROR == status) && (NULL != next)) {
        last = next;
        status = rb_tree_node_key(next, &chunk);
        if (NO_ERROR != status) {
            continue;
        }
        free(chunk);
        status = rb_tree_enumerate(
                     tree,
                     NULL,
                     NULL,
                     last,
                     &next);
    }
    return status;
}
예제 #2
0
static void print_tree (RBTreeNode* node, int depth) {
  int* value;
  int i;

  if (node == NULL) {
    return;
    }

  print_tree (rb_tree_node_child (node, RB_TREE_NODE_LEFT), depth + 1);

  for (i = 0; i < depth * 6; ++i) {
    printf (" ");
    }

  value = rb_tree_node_key (node);
  printf ("%i\n", *value);

  print_tree (rb_tree_node_child (node, RB_TREE_NODE_RIGHT), depth + 1);
  }
예제 #3
0
void test_rb_tree_insert_lookup (void) {
  RBTree* tree;
  RBTreeNode* node;
  int i;
  int* value;

  /* Create a tree containing some values. Validate the
   * tree is consistent at all stages. */

  tree = rb_tree_new ( (RBTreeCompareFunc) int_compare);

  for (i = 0; i < NUM_TEST_VALUES; ++i) {
    test_array[i] = i;
    rb_tree_insert (tree, &test_array[i], &test_array[i]);

    assert (rb_tree_num_entries (tree) == i + 1);
    validate_tree (tree);
    }

  assert (rb_tree_root_node (tree) != NULL);

  /* Check that all values can be read back again */

  for (i = 0; i < NUM_TEST_VALUES; ++i) {
    node = rb_tree_lookup_node (tree, &i);
    assert (node != NULL);
    value = rb_tree_node_key (node);
    assert (*value == i);
    value = rb_tree_node_value (node);
    assert (*value == i);
    }

  /* Check that invalid nodes are not found */

  i = -1;
  assert (rb_tree_lookup_node (tree, &i) == NULL);
  i = NUM_TEST_VALUES + 100;
  assert (rb_tree_lookup_node (tree, &i) == NULL);

  rb_tree_free (tree);
  }