composed: insert: require key to be unique

This commit is contained in:
Daniel Eklöf 2021-06-24 19:12:25 +02:00
parent 4a6dea04c2
commit f20956ff1b
No known key found for this signature in database
GPG key ID: 5BBD4992C116573F
3 changed files with 9 additions and 15 deletions

View file

@ -20,14 +20,14 @@ composed_lookup(struct composed *root, uint32_t key)
return NULL;
}
uint32_t
void
composed_insert(struct composed **root, struct composed *node)
{
node->left = node->right = NULL;
if (*root == NULL) {
*root = node;
return node->key;
return;
}
uint32_t key = node->key;
@ -36,10 +36,7 @@ composed_insert(struct composed **root, struct composed *node)
struct composed *n = *root;
while (n != NULL) {
if (n->key == node->key) {
/* TODO: wrap around at (CELL_COMB_CHARS_HI - CELL_COMB_CHARS_LO) */
key++;
}
xassert(n->key != node->key);
prev = n;
n = key < n->key ? n->left : n->right;
@ -48,9 +45,6 @@ composed_insert(struct composed **root, struct composed *node)
xassert(prev != NULL);
xassert(n == NULL);
/* May have been changed */
node->key = key;
if (key < prev->key) {
xassert(prev->left == NULL);
prev->left = node;
@ -58,8 +52,6 @@ composed_insert(struct composed **root, struct composed *node)
xassert(prev->right == NULL);
prev->right = node;
}
return key;
}
void