예제 #1
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);
  }
예제 #2
0
RBTreeValue rb_tree_lookup(RBTree *tree, RBTreeKey key)
{
	RBTreeNode *node;

	/* Find the node for this key. */

	node = rb_tree_lookup_node(tree, key);

	if (node == NULL) {
		return RB_TREE_NULL;
	} else {
		return node->value;
	}
}
예제 #3
0
int rb_tree_remove(RBTree *tree, RBTreeKey key)
{
	RBTreeNode *node;

	/* Find the node to remove. */

	node = rb_tree_lookup_node(tree, key);

	if (node == NULL) {
		return 0;
	}

	rb_tree_remove_node(tree, node);

	return 1;
}