mirror of
https://github.com/bkthomps/Containers.git
synced 2025-11-16 12:34:47 +00:00
Style change for null checking
Now "if (var == NULL)" is "if (!var)" and "if (var != NULL)" is "if (var)".
This commit is contained in:
@@ -42,13 +42,13 @@ struct _array {
|
||||
array array_init(const int element_count, const size_t data_size)
|
||||
{
|
||||
struct _array *const init = malloc(sizeof(struct _array));
|
||||
if (init == NULL) {
|
||||
if (!init) {
|
||||
return NULL;
|
||||
}
|
||||
init->data_size = data_size;
|
||||
init->element_count = element_count;
|
||||
init->data = calloc((size_t) element_count, data_size);
|
||||
if (init->data == NULL) {
|
||||
if (!init->data) {
|
||||
free(init);
|
||||
return NULL;
|
||||
}
|
||||
|
||||
24
src/deque.c
24
src/deque.c
@@ -51,7 +51,7 @@ struct node {
|
||||
deque deque_init(const size_t data_size)
|
||||
{
|
||||
struct _deque *const init = malloc(sizeof(struct _deque));
|
||||
if (init == NULL) {
|
||||
if (!init) {
|
||||
return NULL;
|
||||
}
|
||||
init->data_size = data_size;
|
||||
@@ -59,13 +59,13 @@ deque deque_init(const size_t data_size)
|
||||
init->end_index = init->start_index + 1;
|
||||
init->block_count = 1;
|
||||
init->block = malloc(sizeof(struct node));
|
||||
if (init->block == NULL) {
|
||||
if (!init->block) {
|
||||
free(init);
|
||||
return NULL;
|
||||
}
|
||||
struct node *const block = init->block;
|
||||
block->data = malloc(BLOCK_SIZE * init->data_size);
|
||||
if (block->data == NULL) {
|
||||
if (!block->data) {
|
||||
free(init->block);
|
||||
free(init);
|
||||
return NULL;
|
||||
@@ -114,7 +114,7 @@ int deque_trim(deque me)
|
||||
const int end_block = me->end_index / BLOCK_SIZE;
|
||||
const int new_block_count = end_block - start_block + 1;
|
||||
void *const new_block = malloc(new_block_count * sizeof(struct node));
|
||||
if (new_block == NULL) {
|
||||
if (!new_block) {
|
||||
return -ENOMEM;
|
||||
}
|
||||
for (int i = 0; i < start_block; i++) {
|
||||
@@ -172,7 +172,7 @@ int deque_push_front(deque me, void *const data)
|
||||
const int added_blocks = new_block_count - old_block_count;
|
||||
void *temp = realloc(me->block,
|
||||
new_block_count * sizeof(struct node));
|
||||
if (temp == NULL) {
|
||||
if (!temp) {
|
||||
return -ENOMEM;
|
||||
}
|
||||
me->block = temp;
|
||||
@@ -189,9 +189,9 @@ int deque_push_front(deque me, void *const data)
|
||||
}
|
||||
}
|
||||
struct node *const block_item = &me->block[block_index];
|
||||
if (block_item->data == NULL) {
|
||||
if (!block_item->data) {
|
||||
block_item->data = malloc(BLOCK_SIZE * me->data_size);
|
||||
if (block_item->data == NULL) {
|
||||
if (!block_item->data) {
|
||||
return -ENOMEM;
|
||||
}
|
||||
}
|
||||
@@ -221,7 +221,7 @@ int deque_push_back(deque me, void *const data)
|
||||
(int) ceil(RESIZE_RATIO * me->block_count);
|
||||
void *temp = realloc(me->block,
|
||||
new_block_count * sizeof(struct node));
|
||||
if (temp == NULL) {
|
||||
if (!temp) {
|
||||
return -ENOMEM;
|
||||
}
|
||||
me->block = temp;
|
||||
@@ -232,9 +232,9 @@ int deque_push_back(deque me, void *const data)
|
||||
}
|
||||
}
|
||||
struct node *const block_item = &me->block[block_index];
|
||||
if (block_item->data == NULL) {
|
||||
if (!block_item->data) {
|
||||
block_item->data = malloc(BLOCK_SIZE * me->data_size);
|
||||
if (block_item->data == NULL) {
|
||||
if (!block_item->data) {
|
||||
return -ENOMEM;
|
||||
}
|
||||
}
|
||||
@@ -402,11 +402,11 @@ int deque_get_last(void *const data, deque me)
|
||||
int deque_clear(deque me)
|
||||
{
|
||||
struct node *const temp_block = malloc(sizeof(struct node));
|
||||
if (temp_block == NULL) {
|
||||
if (!temp_block) {
|
||||
return -ENOMEM;
|
||||
}
|
||||
void *const temp_block_data = malloc(BLOCK_SIZE * me->data_size);
|
||||
if (temp_block_data == NULL) {
|
||||
if (!temp_block_data) {
|
||||
free(temp_block);
|
||||
return -ENOMEM;
|
||||
}
|
||||
|
||||
@@ -46,7 +46,7 @@ struct node {
|
||||
forward_list forward_list_init(const size_t data_size)
|
||||
{
|
||||
struct _forward_list *const init = malloc(sizeof(struct _forward_list));
|
||||
if (init == NULL) {
|
||||
if (!init) {
|
||||
return NULL;
|
||||
}
|
||||
init->data_size = data_size;
|
||||
@@ -89,7 +89,7 @@ void forward_list_copy_to_array(void *const arr, forward_list me)
|
||||
{
|
||||
struct node *traverse = me->head;
|
||||
int offset = 0;
|
||||
while (traverse != NULL) {
|
||||
while (traverse) {
|
||||
memcpy(arr + offset, traverse->data, me->data_size);
|
||||
offset += me->data_size;
|
||||
traverse = traverse->next;
|
||||
@@ -139,11 +139,11 @@ int forward_list_add_at(forward_list me, const int index, void *const data)
|
||||
return -EINVAL;
|
||||
}
|
||||
struct node *const add = malloc(sizeof(struct node));
|
||||
if (add == NULL) {
|
||||
if (!add) {
|
||||
return -ENOMEM;
|
||||
}
|
||||
add->data = malloc(me->data_size);
|
||||
if (add->data == NULL) {
|
||||
if (!add->data) {
|
||||
free(add);
|
||||
return -ENOMEM;
|
||||
}
|
||||
@@ -347,7 +347,7 @@ int forward_list_get_last(void *const data, forward_list me)
|
||||
void forward_list_clear(forward_list me)
|
||||
{
|
||||
struct node *traverse = me->head;
|
||||
while (traverse != NULL) {
|
||||
while (traverse) {
|
||||
struct node *const temp = traverse;
|
||||
traverse = traverse->next;
|
||||
free(temp->data);
|
||||
|
||||
24
src/list.c
24
src/list.c
@@ -48,7 +48,7 @@ struct node {
|
||||
list list_init(const size_t data_size)
|
||||
{
|
||||
struct _list *const init = malloc(sizeof(struct _list));
|
||||
if (init == NULL) {
|
||||
if (!init) {
|
||||
return NULL;
|
||||
}
|
||||
init->data_size = data_size;
|
||||
@@ -92,7 +92,7 @@ void list_copy_to_array(void *const arr, list me)
|
||||
{
|
||||
struct node *traverse = me->head;
|
||||
int offset = 0;
|
||||
while (traverse != NULL) {
|
||||
while (traverse) {
|
||||
memcpy(arr + offset, traverse->data, me->data_size);
|
||||
offset += me->data_size;
|
||||
traverse = traverse->next;
|
||||
@@ -148,22 +148,22 @@ int list_add_first(list me, void *const data)
|
||||
{
|
||||
struct node *const traverse = me->head;
|
||||
struct node *const add = malloc(sizeof(struct node));
|
||||
if (add == NULL) {
|
||||
if (!add) {
|
||||
return -ENOMEM;
|
||||
}
|
||||
add->data = malloc(me->data_size);
|
||||
if (add->data == NULL) {
|
||||
if (!add->data) {
|
||||
free(add);
|
||||
return -ENOMEM;
|
||||
}
|
||||
add->prev = NULL;
|
||||
memcpy(add->data, data, me->data_size);
|
||||
add->next = traverse;
|
||||
if (traverse != NULL) {
|
||||
if (traverse) {
|
||||
traverse->prev = add;
|
||||
}
|
||||
me->head = add;
|
||||
if (me->tail == NULL) {
|
||||
if (!me->tail) {
|
||||
me->tail = traverse;
|
||||
}
|
||||
me->space++;
|
||||
@@ -195,11 +195,11 @@ int list_add_at(list me, const int index, void *const data)
|
||||
// The new node will go right before this node.
|
||||
struct node *const traverse = list_get_node_at(me, index);
|
||||
struct node *const add = malloc(sizeof(struct node));
|
||||
if (add == NULL) {
|
||||
if (!add) {
|
||||
return -ENOMEM;
|
||||
}
|
||||
add->data = malloc(me->data_size);
|
||||
if (add->data == NULL) {
|
||||
if (!add->data) {
|
||||
free(add);
|
||||
return -ENOMEM;
|
||||
}
|
||||
@@ -225,18 +225,18 @@ int list_add_last(list me, void *const data)
|
||||
{
|
||||
struct node *const traverse = me->tail;
|
||||
struct node *const add = malloc(sizeof(struct node));
|
||||
if (add == NULL) {
|
||||
if (!add) {
|
||||
return -ENOMEM;
|
||||
}
|
||||
add->data = malloc(me->data_size);
|
||||
if (add->data == NULL) {
|
||||
if (!add->data) {
|
||||
free(add);
|
||||
return -ENOMEM;
|
||||
}
|
||||
add->prev = traverse;
|
||||
memcpy(add->data, data, me->data_size);
|
||||
add->next = NULL;
|
||||
if (traverse != NULL) {
|
||||
if (traverse) {
|
||||
traverse->next = add;
|
||||
}
|
||||
me->tail = add;
|
||||
@@ -413,7 +413,7 @@ int list_get_last(void *const data, list me)
|
||||
void list_clear(list me)
|
||||
{
|
||||
struct node *traverse = me->head;
|
||||
while (traverse != NULL) {
|
||||
while (traverse) {
|
||||
struct node *const temp = traverse;
|
||||
traverse = traverse->next;
|
||||
free(temp->data);
|
||||
|
||||
68
src/map.c
68
src/map.c
@@ -1,5 +1,5 @@
|
||||
/*
|
||||
* Copyright (c) 2017 Bailey Thompson
|
||||
* Copyright (c) 2017-2018 Bailey Thompson
|
||||
*
|
||||
* Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||
* of this software and associated documentation files (the "Software"), to deal
|
||||
@@ -57,7 +57,7 @@ map map_init(const size_t key_size,
|
||||
int (*const comparator)(const void *const, const void *const))
|
||||
{
|
||||
struct _map *const init = malloc(sizeof(struct _map));
|
||||
if (init == NULL) {
|
||||
if (!init) {
|
||||
return NULL;
|
||||
}
|
||||
init->key_size = key_size;
|
||||
@@ -100,7 +100,7 @@ static void map_reference_parent(map me,
|
||||
struct node *const child)
|
||||
{
|
||||
child->parent = parent->parent;
|
||||
if (parent->parent == NULL) {
|
||||
if (!parent->parent) {
|
||||
me->root = child;
|
||||
} else if (parent->parent->left == parent) {
|
||||
parent->parent->left = child;
|
||||
@@ -118,7 +118,7 @@ static void map_rotate_left(map me,
|
||||
{
|
||||
map_reference_parent(me, parent, child);
|
||||
struct node *const grand_child = child->left;
|
||||
if (grand_child != NULL) {
|
||||
if (grand_child) {
|
||||
grand_child->parent = parent;
|
||||
}
|
||||
parent->parent = child;
|
||||
@@ -135,7 +135,7 @@ static void map_rotate_right(map me,
|
||||
{
|
||||
map_reference_parent(me, parent, child);
|
||||
struct node *const grand_child = child->right;
|
||||
if (grand_child != NULL) {
|
||||
if (grand_child) {
|
||||
grand_child->parent = parent;
|
||||
}
|
||||
parent->parent = child;
|
||||
@@ -217,7 +217,7 @@ static void map_insert_balance(map me, struct node *const item)
|
||||
struct node *grand_child = NULL;
|
||||
struct node *child = item;
|
||||
struct node *parent = item->parent;
|
||||
while (parent != NULL) {
|
||||
while (parent) {
|
||||
if (parent->left == child) {
|
||||
parent->balance--;
|
||||
} else {
|
||||
@@ -248,19 +248,19 @@ static struct node *map_create_node(map me,
|
||||
struct node *const parent)
|
||||
{
|
||||
struct node *const insert = malloc(sizeof(struct node));
|
||||
if (insert == NULL) {
|
||||
if (!insert) {
|
||||
return NULL;
|
||||
}
|
||||
insert->parent = parent;
|
||||
insert->balance = 0;
|
||||
insert->key = malloc(me->key_size);
|
||||
if (insert->key == NULL) {
|
||||
if (!insert->key) {
|
||||
free(insert);
|
||||
return NULL;
|
||||
}
|
||||
memcpy(insert->key, key, me->key_size);
|
||||
insert->value = malloc(me->value_size);
|
||||
if (insert->value == NULL) {
|
||||
if (!insert->value) {
|
||||
free(insert->key);
|
||||
free(insert);
|
||||
return NULL;
|
||||
@@ -285,9 +285,9 @@ static struct node *map_create_node(map me,
|
||||
*/
|
||||
int map_put(map me, void *const key, void *const value)
|
||||
{
|
||||
if (me->root == NULL) {
|
||||
if (!me->root) {
|
||||
struct node *insert = map_create_node(me, key, value, NULL);
|
||||
if (insert == NULL) {
|
||||
if (!insert) {
|
||||
return -ENOMEM;
|
||||
}
|
||||
me->root = insert;
|
||||
@@ -297,11 +297,11 @@ int map_put(map me, void *const key, void *const value)
|
||||
while (true) {
|
||||
const int compare = me->comparator(key, traverse->key);
|
||||
if (compare < 0) {
|
||||
if (traverse->left != NULL) {
|
||||
if (traverse->left) {
|
||||
traverse = traverse->left;
|
||||
} else {
|
||||
struct node *insert = map_create_node(me, key, value, traverse);
|
||||
if (insert == NULL) {
|
||||
if (!insert) {
|
||||
return -ENOMEM;
|
||||
}
|
||||
traverse->left = insert;
|
||||
@@ -309,11 +309,11 @@ int map_put(map me, void *const key, void *const value)
|
||||
return 0;
|
||||
}
|
||||
} else if (compare > 0) {
|
||||
if (traverse->right != NULL) {
|
||||
if (traverse->right) {
|
||||
traverse = traverse->right;
|
||||
} else {
|
||||
struct node *insert = map_create_node(me, key, value, traverse);
|
||||
if (insert == NULL) {
|
||||
if (!insert) {
|
||||
return -ENOMEM;
|
||||
}
|
||||
traverse->right = insert;
|
||||
@@ -333,19 +333,19 @@ int map_put(map me, void *const key, void *const value)
|
||||
static struct node *map_equal_match(map me, const void *const key)
|
||||
{
|
||||
struct node *traverse = me->root;
|
||||
if (traverse == NULL) {
|
||||
if (!traverse) {
|
||||
return false;
|
||||
}
|
||||
while (true) {
|
||||
const int compare = me->comparator(key, traverse->key);
|
||||
if (compare < 0) {
|
||||
if (traverse->left != NULL) {
|
||||
if (traverse->left) {
|
||||
traverse = traverse->left;
|
||||
} else {
|
||||
return NULL;
|
||||
}
|
||||
} else if (compare > 0) {
|
||||
if (traverse->right != NULL) {
|
||||
if (traverse->right) {
|
||||
traverse = traverse->right;
|
||||
} else {
|
||||
return NULL;
|
||||
@@ -368,7 +368,7 @@ static struct node *map_equal_match(map me, const void *const key)
|
||||
bool map_get(void *const value, map me, void *const key)
|
||||
{
|
||||
struct node *const traverse = map_equal_match(me, key);
|
||||
if (traverse == NULL) {
|
||||
if (!traverse) {
|
||||
return false;
|
||||
}
|
||||
memcpy(value, traverse->value, me->value_size);
|
||||
@@ -420,13 +420,13 @@ static void map_delete_balance(map me,
|
||||
// Must re-balance if not in {-1, 0, 1}
|
||||
if (item->balance > 1 || item->balance < -1) {
|
||||
item = map_repair_pivot(me, item, is_left_deleted);
|
||||
if (item->parent == NULL || item->balance == -1 || item->balance == 1) {
|
||||
if (!item->parent || item->balance == -1 || item->balance == 1) {
|
||||
return;
|
||||
}
|
||||
}
|
||||
struct node *child = item;
|
||||
struct node *parent = item->parent;
|
||||
while (parent != NULL) {
|
||||
while (parent) {
|
||||
if (parent->left == child) {
|
||||
parent->balance++;
|
||||
} else {
|
||||
@@ -442,7 +442,7 @@ static void map_delete_balance(map me,
|
||||
parent = child->parent;
|
||||
// If balance is -1 or +1 after modification or the parent is NULL,
|
||||
// then the tree is balanced.
|
||||
if (parent == NULL || child->balance == -1 || child->balance == 1) {
|
||||
if (!parent || child->balance == -1 || child->balance == 1) {
|
||||
return;
|
||||
}
|
||||
} else {
|
||||
@@ -459,7 +459,7 @@ static void map_remove_no_children(map me, const struct node *const traverse)
|
||||
{
|
||||
struct node *const parent = traverse->parent;
|
||||
// If no parent and no children, then the only node is traverse.
|
||||
if (parent == NULL) {
|
||||
if (!parent) {
|
||||
me->root = NULL;
|
||||
return;
|
||||
}
|
||||
@@ -480,8 +480,8 @@ static void map_remove_one_child(map me, const struct node *const traverse)
|
||||
{
|
||||
struct node *const parent = traverse->parent;
|
||||
// If no parent, make the child of traverse the new root.
|
||||
if (parent == NULL) {
|
||||
if (traverse->left != NULL) {
|
||||
if (!parent) {
|
||||
if (traverse->left) {
|
||||
traverse->left->parent = NULL;
|
||||
me->root = traverse->left;
|
||||
} else {
|
||||
@@ -492,7 +492,7 @@ static void map_remove_one_child(map me, const struct node *const traverse)
|
||||
}
|
||||
// The parent of traverse now references the child of traverse.
|
||||
if (parent->left == traverse) {
|
||||
if (traverse->left != NULL) {
|
||||
if (traverse->left) {
|
||||
parent->left = traverse->left;
|
||||
traverse->left->parent = parent;
|
||||
} else {
|
||||
@@ -501,7 +501,7 @@ static void map_remove_one_child(map me, const struct node *const traverse)
|
||||
}
|
||||
map_delete_balance(me, parent, true);
|
||||
} else {
|
||||
if (traverse->left != NULL) {
|
||||
if (traverse->left) {
|
||||
parent->right = traverse->left;
|
||||
traverse->left->parent = parent;
|
||||
} else {
|
||||
@@ -529,13 +529,13 @@ static void map_remove_two_children(map me, const struct node *const traverse)
|
||||
item->left->parent = item;
|
||||
} else {
|
||||
item = traverse->right->left;
|
||||
while (item->left != NULL) {
|
||||
while (item->left) {
|
||||
item = item->left;
|
||||
}
|
||||
parent = item->parent;
|
||||
item->balance = traverse->balance;
|
||||
item->parent->left = item->right;
|
||||
if (item->right != NULL) {
|
||||
if (item->right) {
|
||||
item->right->parent = item->parent;
|
||||
}
|
||||
item->left = traverse->left;
|
||||
@@ -544,7 +544,7 @@ static void map_remove_two_children(map me, const struct node *const traverse)
|
||||
item->right->parent = item;
|
||||
item->parent = traverse->parent;
|
||||
}
|
||||
if (traverse->parent == NULL) {
|
||||
if (!traverse->parent) {
|
||||
me->root = item;
|
||||
} else if (traverse->parent->left == traverse) {
|
||||
item->parent->left = item;
|
||||
@@ -559,9 +559,9 @@ static void map_remove_two_children(map me, const struct node *const traverse)
|
||||
*/
|
||||
static void map_remove_element(map me, struct node *const traverse)
|
||||
{
|
||||
if (traverse->left == NULL && traverse->right == NULL) {
|
||||
if (!traverse->left && !traverse->right) {
|
||||
map_remove_no_children(me, traverse);
|
||||
} else if (traverse->left == NULL || traverse->right == NULL) {
|
||||
} else if (!traverse->left || !traverse->right) {
|
||||
map_remove_one_child(me, traverse);
|
||||
} else {
|
||||
map_remove_two_children(me, traverse);
|
||||
@@ -583,7 +583,7 @@ static void map_remove_element(map me, struct node *const traverse)
|
||||
bool map_remove(map me, void *const key)
|
||||
{
|
||||
struct node *const traverse = map_equal_match(me, key);
|
||||
if (traverse == NULL) {
|
||||
if (!traverse) {
|
||||
return false;
|
||||
}
|
||||
map_remove_element(me, traverse);
|
||||
@@ -597,7 +597,7 @@ bool map_remove(map me, void *const key)
|
||||
*/
|
||||
void map_clear(map me)
|
||||
{
|
||||
while (me->root != NULL) {
|
||||
while (me->root) {
|
||||
map_remove_element(me, me->root);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
/*
|
||||
* Copyright (c) 2017 Bailey Thompson
|
||||
* Copyright (c) 2017-2018 Bailey Thompson
|
||||
*
|
||||
* Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||
* of this software and associated documentation files (the "Software"), to deal
|
||||
@@ -69,7 +69,7 @@ multimap multimap_init(const size_t key_size,
|
||||
const void *const))
|
||||
{
|
||||
struct _multimap *const init = malloc(sizeof(struct _multimap));
|
||||
if (init == NULL) {
|
||||
if (!init) {
|
||||
return NULL;
|
||||
}
|
||||
init->key_size = key_size;
|
||||
@@ -114,7 +114,7 @@ static void multimap_reference_parent(multimap me,
|
||||
struct node *const child)
|
||||
{
|
||||
child->parent = parent->parent;
|
||||
if (parent->parent == NULL) {
|
||||
if (!parent->parent) {
|
||||
me->root = child;
|
||||
} else if (parent->parent->left == parent) {
|
||||
parent->parent->left = child;
|
||||
@@ -132,7 +132,7 @@ static void multimap_rotate_left(multimap me,
|
||||
{
|
||||
multimap_reference_parent(me, parent, child);
|
||||
struct node *const grand_child = child->left;
|
||||
if (grand_child != NULL) {
|
||||
if (grand_child) {
|
||||
grand_child->parent = parent;
|
||||
}
|
||||
parent->parent = child;
|
||||
@@ -149,7 +149,7 @@ static void multimap_rotate_right(multimap me,
|
||||
{
|
||||
multimap_reference_parent(me, parent, child);
|
||||
struct node *const grand_child = child->right;
|
||||
if (grand_child != NULL) {
|
||||
if (grand_child) {
|
||||
grand_child->parent = parent;
|
||||
}
|
||||
parent->parent = child;
|
||||
@@ -231,7 +231,7 @@ static void multimap_insert_balance(multimap me, struct node *const item)
|
||||
struct node *grand_child = NULL;
|
||||
struct node *child = item;
|
||||
struct node *parent = item->parent;
|
||||
while (parent != NULL) {
|
||||
while (parent) {
|
||||
if (parent->left == child) {
|
||||
parent->balance--;
|
||||
} else {
|
||||
@@ -260,11 +260,11 @@ static struct value_node *multimap_create_value_node(multimap me,
|
||||
const void *const value)
|
||||
{
|
||||
struct value_node *const add = malloc(sizeof(struct value_node));
|
||||
if (add == NULL) {
|
||||
if (!add) {
|
||||
return NULL;
|
||||
}
|
||||
add->value = malloc(me->value_size);
|
||||
if (add->value == NULL) {
|
||||
if (!add->value) {
|
||||
free(add);
|
||||
return NULL;
|
||||
}
|
||||
@@ -282,20 +282,20 @@ static struct node *multimap_create_node(multimap me,
|
||||
struct node *const parent)
|
||||
{
|
||||
struct node *const insert = malloc(sizeof(struct node));
|
||||
if (insert == NULL) {
|
||||
if (!insert) {
|
||||
return NULL;
|
||||
}
|
||||
insert->parent = parent;
|
||||
insert->balance = 0;
|
||||
insert->key = malloc(me->key_size);
|
||||
if (insert->key == NULL) {
|
||||
if (!insert->key) {
|
||||
free(insert);
|
||||
return NULL;
|
||||
}
|
||||
memcpy(insert->key, key, me->key_size);
|
||||
insert->value_count = 1;
|
||||
insert->head = multimap_create_value_node(me, value);
|
||||
if (insert->head == NULL) {
|
||||
if (!insert->head) {
|
||||
free(insert->key);
|
||||
free(insert);
|
||||
return NULL;
|
||||
@@ -318,9 +318,9 @@ static struct node *multimap_create_node(multimap me,
|
||||
*/
|
||||
int multimap_put(multimap me, void *const key, void *const value)
|
||||
{
|
||||
if (me->root == NULL) {
|
||||
if (!me->root) {
|
||||
struct node *insert = multimap_create_node(me, key, value, NULL);
|
||||
if (insert == NULL) {
|
||||
if (!insert) {
|
||||
return -ENOMEM;
|
||||
}
|
||||
me->root = insert;
|
||||
@@ -330,12 +330,12 @@ int multimap_put(multimap me, void *const key, void *const value)
|
||||
while (true) {
|
||||
const int compare = me->key_comparator(key, traverse->key);
|
||||
if (compare < 0) {
|
||||
if (traverse->left != NULL) {
|
||||
if (traverse->left) {
|
||||
traverse = traverse->left;
|
||||
} else {
|
||||
struct node *insert =
|
||||
multimap_create_node(me, key, value, traverse);
|
||||
if (insert == NULL) {
|
||||
if (!insert) {
|
||||
return -ENOMEM;
|
||||
}
|
||||
traverse->left = insert;
|
||||
@@ -343,12 +343,12 @@ int multimap_put(multimap me, void *const key, void *const value)
|
||||
return 0;
|
||||
}
|
||||
} else if (compare > 0) {
|
||||
if (traverse->right != NULL) {
|
||||
if (traverse->right) {
|
||||
traverse = traverse->right;
|
||||
} else {
|
||||
struct node *insert =
|
||||
multimap_create_node(me, key, value, traverse);
|
||||
if (insert == NULL) {
|
||||
if (!insert) {
|
||||
return -ENOMEM;
|
||||
}
|
||||
traverse->right = insert;
|
||||
@@ -357,7 +357,7 @@ int multimap_put(multimap me, void *const key, void *const value)
|
||||
}
|
||||
} else {
|
||||
struct value_node *value_traverse = traverse->head;
|
||||
while (value_traverse->next != NULL) {
|
||||
while (value_traverse->next) {
|
||||
value_traverse = value_traverse->next;
|
||||
}
|
||||
value_traverse->next = multimap_create_value_node(me, value);
|
||||
@@ -374,19 +374,19 @@ int multimap_put(multimap me, void *const key, void *const value)
|
||||
static struct node *multimap_equal_match(multimap me, const void *const key)
|
||||
{
|
||||
struct node *traverse = me->root;
|
||||
if (traverse == NULL) {
|
||||
if (!traverse) {
|
||||
return false;
|
||||
}
|
||||
while (true) {
|
||||
const int compare = me->key_comparator(key, traverse->key);
|
||||
if (compare < 0) {
|
||||
if (traverse->left != NULL) {
|
||||
if (traverse->left) {
|
||||
traverse = traverse->left;
|
||||
} else {
|
||||
return NULL;
|
||||
}
|
||||
} else if (compare > 0) {
|
||||
if (traverse->right != NULL) {
|
||||
if (traverse->right) {
|
||||
traverse = traverse->right;
|
||||
} else {
|
||||
return NULL;
|
||||
@@ -408,7 +408,7 @@ static struct node *multimap_equal_match(multimap me, const void *const key)
|
||||
void multimap_get_start(multimap me, void *const key)
|
||||
{
|
||||
const struct node *const traverse = multimap_equal_match(me, key);
|
||||
if (traverse != NULL) {
|
||||
if (traverse) {
|
||||
me->iterate_get = traverse->head;
|
||||
}
|
||||
}
|
||||
@@ -425,7 +425,7 @@ void multimap_get_start(multimap me, void *const key)
|
||||
*/
|
||||
bool multimap_get_next(void *const value, multimap me)
|
||||
{
|
||||
if (me->iterate_get == NULL) {
|
||||
if (!me->iterate_get) {
|
||||
return false;
|
||||
}
|
||||
const struct value_node *const item = me->iterate_get;
|
||||
@@ -445,7 +445,7 @@ bool multimap_get_next(void *const value, multimap me)
|
||||
int multimap_count(multimap me, void *const key)
|
||||
{
|
||||
struct node *const traverse = multimap_equal_match(me, key);
|
||||
if (traverse == NULL) {
|
||||
if (!traverse) {
|
||||
return 0;
|
||||
}
|
||||
return traverse->value_count;
|
||||
@@ -496,13 +496,13 @@ static void multimap_delete_balance(multimap me,
|
||||
// Must re-balance if not in {-1, 0, 1}
|
||||
if (item->balance > 1 || item->balance < -1) {
|
||||
item = multimap_repair_pivot(me, item, is_left_deleted);
|
||||
if (item->parent == NULL || item->balance == -1 || item->balance == 1) {
|
||||
if (!item->parent || item->balance == -1 || item->balance == 1) {
|
||||
return;
|
||||
}
|
||||
}
|
||||
struct node *child = item;
|
||||
struct node *parent = item->parent;
|
||||
while (parent != NULL) {
|
||||
while (parent) {
|
||||
if (parent->left == child) {
|
||||
parent->balance++;
|
||||
} else {
|
||||
@@ -518,7 +518,7 @@ static void multimap_delete_balance(multimap me,
|
||||
parent = child->parent;
|
||||
// If balance is -1 or +1 after modification or the parent is NULL,
|
||||
// then the tree is balanced.
|
||||
if (parent == NULL || child->balance == -1 || child->balance == 1) {
|
||||
if (!parent || child->balance == -1 || child->balance == 1) {
|
||||
return;
|
||||
}
|
||||
} else {
|
||||
@@ -536,7 +536,7 @@ static void multimap_remove_no_children(multimap me,
|
||||
{
|
||||
struct node *const parent = traverse->parent;
|
||||
// If no parent and no children, then the only node is traverse.
|
||||
if (parent == NULL) {
|
||||
if (!parent) {
|
||||
me->root = NULL;
|
||||
return;
|
||||
}
|
||||
@@ -558,8 +558,8 @@ static void multimap_remove_one_child(multimap me,
|
||||
{
|
||||
struct node *const parent = traverse->parent;
|
||||
// If no parent, make the child of traverse the new root.
|
||||
if (parent == NULL) {
|
||||
if (traverse->left != NULL) {
|
||||
if (!parent) {
|
||||
if (traverse->left) {
|
||||
traverse->left->parent = NULL;
|
||||
me->root = traverse->left;
|
||||
} else {
|
||||
@@ -570,7 +570,7 @@ static void multimap_remove_one_child(multimap me,
|
||||
}
|
||||
// The parent of traverse now references the child of traverse.
|
||||
if (parent->left == traverse) {
|
||||
if (traverse->left != NULL) {
|
||||
if (traverse->left) {
|
||||
parent->left = traverse->left;
|
||||
traverse->left->parent = parent;
|
||||
} else {
|
||||
@@ -579,7 +579,7 @@ static void multimap_remove_one_child(multimap me,
|
||||
}
|
||||
multimap_delete_balance(me, parent, true);
|
||||
} else {
|
||||
if (traverse->left != NULL) {
|
||||
if (traverse->left) {
|
||||
parent->right = traverse->left;
|
||||
traverse->left->parent = parent;
|
||||
} else {
|
||||
@@ -608,13 +608,13 @@ static void multimap_remove_two_children(multimap me,
|
||||
item->left->parent = item;
|
||||
} else {
|
||||
item = traverse->right->left;
|
||||
while (item->left != NULL) {
|
||||
while (item->left) {
|
||||
item = item->left;
|
||||
}
|
||||
parent = item->parent;
|
||||
item->balance = traverse->balance;
|
||||
item->parent->left = item->right;
|
||||
if (item->right != NULL) {
|
||||
if (item->right) {
|
||||
item->right->parent = item->parent;
|
||||
}
|
||||
item->left = traverse->left;
|
||||
@@ -623,7 +623,7 @@ static void multimap_remove_two_children(multimap me,
|
||||
item->right->parent = item;
|
||||
item->parent = traverse->parent;
|
||||
}
|
||||
if (traverse->parent == NULL) {
|
||||
if (!traverse->parent) {
|
||||
me->root = item;
|
||||
} else if (traverse->parent->left == traverse) {
|
||||
item->parent->left = item;
|
||||
@@ -638,9 +638,9 @@ static void multimap_remove_two_children(multimap me,
|
||||
*/
|
||||
static void multimap_remove_element(multimap me, struct node *const traverse)
|
||||
{
|
||||
if (traverse->left == NULL && traverse->right == NULL) {
|
||||
if (!traverse->left && !traverse->right) {
|
||||
multimap_remove_no_children(me, traverse);
|
||||
} else if (traverse->left == NULL || traverse->right == NULL) {
|
||||
} else if (!traverse->left || !traverse->right) {
|
||||
multimap_remove_one_child(me, traverse);
|
||||
} else {
|
||||
multimap_remove_two_children(me, traverse);
|
||||
@@ -661,7 +661,7 @@ static void multimap_remove_element(multimap me, struct node *const traverse)
|
||||
bool multimap_remove(multimap me, void *const key, void *const value)
|
||||
{
|
||||
struct node *const traverse = multimap_equal_match(me, key);
|
||||
if (traverse == NULL) {
|
||||
if (!traverse) {
|
||||
return false;
|
||||
}
|
||||
struct value_node *current = traverse->head;
|
||||
@@ -670,12 +670,11 @@ bool multimap_remove(multimap me, void *const key, void *const value)
|
||||
} else {
|
||||
struct value_node *previous = current;
|
||||
current = current->next;
|
||||
while (current != NULL &&
|
||||
me->value_comparator(current->value, value) != 0) {
|
||||
while (current && me->value_comparator(current->value, value) != 0) {
|
||||
previous = current;
|
||||
current = current->next;
|
||||
}
|
||||
if (current == NULL) {
|
||||
if (!current) {
|
||||
return false;
|
||||
}
|
||||
previous->next = current->next;
|
||||
@@ -697,7 +696,7 @@ static void multimap_remove_all_element(multimap me,
|
||||
struct node *const traverse)
|
||||
{
|
||||
struct value_node *value_traverse = traverse->head;
|
||||
while (value_traverse != NULL) {
|
||||
while (value_traverse) {
|
||||
struct value_node *temp = value_traverse;
|
||||
value_traverse = value_traverse->next;
|
||||
free(temp->value);
|
||||
@@ -718,7 +717,7 @@ static void multimap_remove_all_element(multimap me,
|
||||
bool multimap_remove_all(multimap me, void *const key)
|
||||
{
|
||||
struct node *const traverse = multimap_equal_match(me, key);
|
||||
if (traverse == NULL) {
|
||||
if (!traverse) {
|
||||
return false;
|
||||
}
|
||||
multimap_remove_all_element(me, traverse);
|
||||
@@ -732,7 +731,7 @@ bool multimap_remove_all(multimap me, void *const key)
|
||||
*/
|
||||
void multimap_clear(multimap me)
|
||||
{
|
||||
while (me->root != NULL) {
|
||||
while (me->root) {
|
||||
multimap_remove_all_element(me, me->root);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -55,7 +55,7 @@ multiset multiset_init(const size_t key_size,
|
||||
const void *const))
|
||||
{
|
||||
struct _multiset *const init = malloc(sizeof(struct _multiset));
|
||||
if (init == NULL) {
|
||||
if (!init) {
|
||||
return NULL;
|
||||
}
|
||||
init->key_size = key_size;
|
||||
@@ -97,7 +97,7 @@ static void multiset_reference_parent(multiset me,
|
||||
struct node *const child)
|
||||
{
|
||||
child->parent = parent->parent;
|
||||
if (parent->parent == NULL) {
|
||||
if (!parent->parent) {
|
||||
me->root = child;
|
||||
} else if (parent->parent->left == parent) {
|
||||
parent->parent->left = child;
|
||||
@@ -115,7 +115,7 @@ static void multiset_rotate_left(multiset me,
|
||||
{
|
||||
multiset_reference_parent(me, parent, child);
|
||||
struct node *const grand_child = child->left;
|
||||
if (grand_child != NULL) {
|
||||
if (grand_child) {
|
||||
grand_child->parent = parent;
|
||||
}
|
||||
parent->parent = child;
|
||||
@@ -132,7 +132,7 @@ static void multiset_rotate_right(multiset me,
|
||||
{
|
||||
multiset_reference_parent(me, parent, child);
|
||||
struct node *const grand_child = child->right;
|
||||
if (grand_child != NULL) {
|
||||
if (grand_child) {
|
||||
grand_child->parent = parent;
|
||||
}
|
||||
parent->parent = child;
|
||||
@@ -214,7 +214,7 @@ static void multiset_insert_balance(multiset me, struct node *const item)
|
||||
struct node *grand_child = NULL;
|
||||
struct node *child = item;
|
||||
struct node *parent = item->parent;
|
||||
while (parent != NULL) {
|
||||
while (parent) {
|
||||
if (parent->left == child) {
|
||||
parent->balance--;
|
||||
} else {
|
||||
@@ -244,14 +244,14 @@ static struct node *multiset_create_node(multiset me,
|
||||
struct node *const parent)
|
||||
{
|
||||
struct node *const insert = malloc(sizeof(struct node));
|
||||
if (insert == NULL) {
|
||||
if (!insert) {
|
||||
return NULL;
|
||||
}
|
||||
insert->count = 1;
|
||||
insert->parent = parent;
|
||||
insert->balance = 0;
|
||||
insert->key = malloc(me->key_size);
|
||||
if (insert->key == NULL) {
|
||||
if (!insert->key) {
|
||||
free(insert);
|
||||
return NULL;
|
||||
}
|
||||
@@ -273,9 +273,9 @@ static struct node *multiset_create_node(multiset me,
|
||||
*/
|
||||
int multiset_put(multiset me, void *const key)
|
||||
{
|
||||
if (me->root == NULL) {
|
||||
if (!me->root) {
|
||||
struct node *insert = multiset_create_node(me, key, NULL);
|
||||
if (insert == NULL) {
|
||||
if (!insert) {
|
||||
return -ENOMEM;
|
||||
}
|
||||
me->root = insert;
|
||||
@@ -285,11 +285,11 @@ int multiset_put(multiset me, void *const key)
|
||||
while (true) {
|
||||
const int compare = me->comparator(key, traverse->key);
|
||||
if (compare < 0) {
|
||||
if (traverse->left != NULL) {
|
||||
if (traverse->left) {
|
||||
traverse = traverse->left;
|
||||
} else {
|
||||
struct node *insert = multiset_create_node(me, key, traverse);
|
||||
if (insert == NULL) {
|
||||
if (!insert) {
|
||||
return -ENOMEM;
|
||||
}
|
||||
traverse->left = insert;
|
||||
@@ -297,11 +297,11 @@ int multiset_put(multiset me, void *const key)
|
||||
return 0;
|
||||
}
|
||||
} else if (compare > 0) {
|
||||
if (traverse->right != NULL) {
|
||||
if (traverse->right) {
|
||||
traverse = traverse->right;
|
||||
} else {
|
||||
struct node *insert = multiset_create_node(me, key, traverse);
|
||||
if (insert == NULL) {
|
||||
if (!insert) {
|
||||
return -ENOMEM;
|
||||
}
|
||||
traverse->right = insert;
|
||||
@@ -322,19 +322,19 @@ int multiset_put(multiset me, void *const key)
|
||||
static struct node *multiset_equal_match(multiset me, const void *const key)
|
||||
{
|
||||
struct node *traverse = me->root;
|
||||
if (traverse == NULL) {
|
||||
if (!traverse) {
|
||||
return false;
|
||||
}
|
||||
while (true) {
|
||||
const int compare = me->comparator(key, traverse->key);
|
||||
if (compare < 0) {
|
||||
if (traverse->left != NULL) {
|
||||
if (traverse->left) {
|
||||
traverse = traverse->left;
|
||||
} else {
|
||||
return NULL;
|
||||
}
|
||||
} else if (compare > 0) {
|
||||
if (traverse->right != NULL) {
|
||||
if (traverse->right) {
|
||||
traverse = traverse->right;
|
||||
} else {
|
||||
return NULL;
|
||||
@@ -356,7 +356,7 @@ static struct node *multiset_equal_match(multiset me, const void *const key)
|
||||
int multiset_count(multiset me, void *const key)
|
||||
{
|
||||
const struct node *const item = multiset_equal_match(me, key);
|
||||
if (item == NULL) {
|
||||
if (!item) {
|
||||
return 0;
|
||||
}
|
||||
return item->count;
|
||||
@@ -407,13 +407,13 @@ static void multiset_delete_balance(multiset me,
|
||||
// Must re-balance if not in {-1, 0, 1}
|
||||
if (item->balance > 1 || item->balance < -1) {
|
||||
item = multiset_repair_pivot(me, item, is_left_deleted);
|
||||
if (item->parent == NULL || item->balance == -1 || item->balance == 1) {
|
||||
if (!item->parent || item->balance == -1 || item->balance == 1) {
|
||||
return;
|
||||
}
|
||||
}
|
||||
struct node *child = item;
|
||||
struct node *parent = item->parent;
|
||||
while (parent != NULL) {
|
||||
while (parent) {
|
||||
if (parent->left == child) {
|
||||
parent->balance++;
|
||||
} else {
|
||||
@@ -429,7 +429,7 @@ static void multiset_delete_balance(multiset me,
|
||||
parent = child->parent;
|
||||
// If balance is -1 or +1 after modification or the parent is NULL,
|
||||
// then the tree is balanced.
|
||||
if (parent == NULL || child->balance == -1 || child->balance == 1) {
|
||||
if (!parent || child->balance == -1 || child->balance == 1) {
|
||||
return;
|
||||
}
|
||||
} else {
|
||||
@@ -447,7 +447,7 @@ static void multiset_remove_no_children(multiset me,
|
||||
{
|
||||
struct node *const parent = traverse->parent;
|
||||
// If no parent and no children, then the only node is traverse.
|
||||
if (parent == NULL) {
|
||||
if (!parent) {
|
||||
me->root = NULL;
|
||||
return;
|
||||
}
|
||||
@@ -469,8 +469,8 @@ static void multiset_remove_one_child(multiset me,
|
||||
{
|
||||
struct node *const parent = traverse->parent;
|
||||
// If no parent, make the child of traverse the new root.
|
||||
if (parent == NULL) {
|
||||
if (traverse->left != NULL) {
|
||||
if (!parent) {
|
||||
if (traverse->left) {
|
||||
traverse->left->parent = NULL;
|
||||
me->root = traverse->left;
|
||||
} else {
|
||||
@@ -481,7 +481,7 @@ static void multiset_remove_one_child(multiset me,
|
||||
}
|
||||
// The parent of traverse now references the child of traverse.
|
||||
if (parent->left == traverse) {
|
||||
if (traverse->left != NULL) {
|
||||
if (traverse->left) {
|
||||
parent->left = traverse->left;
|
||||
traverse->left->parent = parent;
|
||||
} else {
|
||||
@@ -490,7 +490,7 @@ static void multiset_remove_one_child(multiset me,
|
||||
}
|
||||
multiset_delete_balance(me, parent, true);
|
||||
} else {
|
||||
if (traverse->left != NULL) {
|
||||
if (traverse->left) {
|
||||
parent->right = traverse->left;
|
||||
traverse->left->parent = parent;
|
||||
} else {
|
||||
@@ -519,13 +519,13 @@ static void multiset_remove_two_children(multiset me,
|
||||
item->left->parent = item;
|
||||
} else {
|
||||
item = traverse->right->left;
|
||||
while (item->left != NULL) {
|
||||
while (item->left) {
|
||||
item = item->left;
|
||||
}
|
||||
parent = item->parent;
|
||||
item->balance = traverse->balance;
|
||||
item->parent->left = item->right;
|
||||
if (item->right != NULL) {
|
||||
if (item->right) {
|
||||
item->right->parent = item->parent;
|
||||
}
|
||||
item->left = traverse->left;
|
||||
@@ -534,7 +534,7 @@ static void multiset_remove_two_children(multiset me,
|
||||
item->right->parent = item;
|
||||
item->parent = traverse->parent;
|
||||
}
|
||||
if (traverse->parent == NULL) {
|
||||
if (!traverse->parent) {
|
||||
me->root = item;
|
||||
} else if (traverse->parent->left == traverse) {
|
||||
item->parent->left = item;
|
||||
@@ -549,9 +549,9 @@ static void multiset_remove_two_children(multiset me,
|
||||
*/
|
||||
static void multiset_remove_element(multiset me, struct node *const traverse)
|
||||
{
|
||||
if (traverse->left == NULL && traverse->right == NULL) {
|
||||
if (!traverse->left && !traverse->right) {
|
||||
multiset_remove_no_children(me, traverse);
|
||||
} else if (traverse->left == NULL || traverse->right == NULL) {
|
||||
} else if (!traverse->left || !traverse->right) {
|
||||
multiset_remove_one_child(me, traverse);
|
||||
} else {
|
||||
multiset_remove_two_children(me, traverse);
|
||||
@@ -571,7 +571,7 @@ static void multiset_remove_element(multiset me, struct node *const traverse)
|
||||
bool multiset_remove(multiset me, void *const key)
|
||||
{
|
||||
struct node *const traverse = multiset_equal_match(me, key);
|
||||
if (traverse == NULL) {
|
||||
if (!traverse) {
|
||||
return false;
|
||||
}
|
||||
traverse->count--;
|
||||
@@ -593,7 +593,7 @@ bool multiset_remove(multiset me, void *const key)
|
||||
bool multiset_remove_all(multiset me, void *const key)
|
||||
{
|
||||
struct node *const traverse = multiset_equal_match(me, key);
|
||||
if (traverse == NULL) {
|
||||
if (!traverse) {
|
||||
return false;
|
||||
}
|
||||
me->size -= traverse->count;
|
||||
@@ -608,7 +608,7 @@ bool multiset_remove_all(multiset me, void *const key)
|
||||
*/
|
||||
void multiset_clear(multiset me)
|
||||
{
|
||||
while (me->root != NULL) {
|
||||
while (me->root) {
|
||||
multiset_remove_element(me, me->root);
|
||||
}
|
||||
me->size = 0;
|
||||
|
||||
@@ -47,12 +47,12 @@ priority_queue priority_queue_init(const size_t data_size,
|
||||
const void *const))
|
||||
{
|
||||
struct _priority_queue *const init = malloc(sizeof(struct _priority_queue));
|
||||
if (init == NULL) {
|
||||
if (!init) {
|
||||
return NULL;
|
||||
}
|
||||
init->data_size = data_size;
|
||||
init->data = vector_init(data_size);
|
||||
if (init->data == NULL) {
|
||||
if (!init->data) {
|
||||
free(init);
|
||||
return NULL;
|
||||
}
|
||||
@@ -96,7 +96,7 @@ bool priority_queue_is_empty(priority_queue me)
|
||||
int priority_queue_push(priority_queue me, void *const data)
|
||||
{
|
||||
void *const temp = malloc(me->data_size);
|
||||
if (temp == NULL) {
|
||||
if (!temp) {
|
||||
return -ENOMEM;
|
||||
}
|
||||
const int rc = vector_add_last(me->data, data);
|
||||
|
||||
@@ -42,12 +42,12 @@ struct _queue {
|
||||
queue queue_init(const size_t data_size)
|
||||
{
|
||||
struct _queue *const init = malloc(sizeof(struct _queue));
|
||||
if (init == NULL) {
|
||||
if (!init) {
|
||||
return NULL;
|
||||
}
|
||||
init->trim_count = 0;
|
||||
init->deque_data = deque_init(data_size);
|
||||
if (init->deque_data == NULL) {
|
||||
if (!init->deque_data) {
|
||||
free(init);
|
||||
return NULL;
|
||||
}
|
||||
|
||||
64
src/set.c
64
src/set.c
@@ -1,5 +1,5 @@
|
||||
/*
|
||||
* Copyright (c) 2017 Bailey Thompson
|
||||
* Copyright (c) 2017-2018 Bailey Thompson
|
||||
*
|
||||
* Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||
* of this software and associated documentation files (the "Software"), to deal
|
||||
@@ -52,7 +52,7 @@ set set_init(const size_t key_size,
|
||||
int (*const comparator)(const void *const, const void *const))
|
||||
{
|
||||
struct _set *const init = malloc(sizeof(struct _set));
|
||||
if (init == NULL) {
|
||||
if (!init) {
|
||||
return NULL;
|
||||
}
|
||||
init->key_size = key_size;
|
||||
@@ -94,7 +94,7 @@ static void set_reference_parent(set me,
|
||||
struct node *const child)
|
||||
{
|
||||
child->parent = parent->parent;
|
||||
if (parent->parent == NULL) {
|
||||
if (!parent->parent) {
|
||||
me->root = child;
|
||||
} else if (parent->parent->left == parent) {
|
||||
parent->parent->left = child;
|
||||
@@ -112,7 +112,7 @@ static void set_rotate_left(set me,
|
||||
{
|
||||
set_reference_parent(me, parent, child);
|
||||
struct node *const grand_child = child->left;
|
||||
if (grand_child != NULL) {
|
||||
if (grand_child) {
|
||||
grand_child->parent = parent;
|
||||
}
|
||||
parent->parent = child;
|
||||
@@ -129,7 +129,7 @@ static void set_rotate_right(set me,
|
||||
{
|
||||
set_reference_parent(me, parent, child);
|
||||
struct node *const grand_child = child->right;
|
||||
if (grand_child != NULL) {
|
||||
if (grand_child) {
|
||||
grand_child->parent = parent;
|
||||
}
|
||||
parent->parent = child;
|
||||
@@ -211,7 +211,7 @@ static void set_insert_balance(set me, struct node *const item)
|
||||
struct node *grand_child = NULL;
|
||||
struct node *child = item;
|
||||
struct node *parent = item->parent;
|
||||
while (parent != NULL) {
|
||||
while (parent) {
|
||||
if (parent->left == child) {
|
||||
parent->balance--;
|
||||
} else {
|
||||
@@ -241,13 +241,13 @@ static struct node *set_create_node(set me,
|
||||
struct node *const parent)
|
||||
{
|
||||
struct node *const insert = malloc(sizeof(struct node));
|
||||
if (insert == NULL) {
|
||||
if (!insert) {
|
||||
return NULL;
|
||||
}
|
||||
insert->parent = parent;
|
||||
insert->balance = 0;
|
||||
insert->key = malloc(me->key_size);
|
||||
if (insert->key == NULL) {
|
||||
if (!insert->key) {
|
||||
free(insert);
|
||||
return NULL;
|
||||
}
|
||||
@@ -269,9 +269,9 @@ static struct node *set_create_node(set me,
|
||||
*/
|
||||
int set_put(set me, void *const key)
|
||||
{
|
||||
if (me->root == NULL) {
|
||||
if (!me->root) {
|
||||
struct node *insert = set_create_node(me, key, NULL);
|
||||
if (insert == NULL) {
|
||||
if (!insert) {
|
||||
return -ENOMEM;
|
||||
}
|
||||
me->root = insert;
|
||||
@@ -281,11 +281,11 @@ int set_put(set me, void *const key)
|
||||
while (true) {
|
||||
const int compare = me->comparator(key, traverse->key);
|
||||
if (compare < 0) {
|
||||
if (traverse->left != NULL) {
|
||||
if (traverse->left) {
|
||||
traverse = traverse->left;
|
||||
} else {
|
||||
struct node *insert = set_create_node(me, key, traverse);
|
||||
if (insert == NULL) {
|
||||
if (!insert) {
|
||||
return -ENOMEM;
|
||||
}
|
||||
traverse->left = insert;
|
||||
@@ -293,11 +293,11 @@ int set_put(set me, void *const key)
|
||||
return 0;
|
||||
}
|
||||
} else if (compare > 0) {
|
||||
if (traverse->right != NULL) {
|
||||
if (traverse->right) {
|
||||
traverse = traverse->right;
|
||||
} else {
|
||||
struct node *insert = set_create_node(me, key, traverse);
|
||||
if (insert == NULL) {
|
||||
if (!insert) {
|
||||
return -ENOMEM;
|
||||
}
|
||||
traverse->right = insert;
|
||||
@@ -316,19 +316,19 @@ int set_put(set me, void *const key)
|
||||
static struct node *set_equal_match(set me, const void *const key)
|
||||
{
|
||||
struct node *traverse = me->root;
|
||||
if (traverse == NULL) {
|
||||
if (!traverse) {
|
||||
return false;
|
||||
}
|
||||
while (true) {
|
||||
const int compare = me->comparator(key, traverse->key);
|
||||
if (compare < 0) {
|
||||
if (traverse->left != NULL) {
|
||||
if (traverse->left) {
|
||||
traverse = traverse->left;
|
||||
} else {
|
||||
return NULL;
|
||||
}
|
||||
} else if (compare > 0) {
|
||||
if (traverse->right != NULL) {
|
||||
if (traverse->right) {
|
||||
traverse = traverse->right;
|
||||
} else {
|
||||
return NULL;
|
||||
@@ -384,13 +384,13 @@ static void set_delete_balance(set me,
|
||||
// Must re-balance if not in {-1, 0, 1}
|
||||
if (item->balance > 1 || item->balance < -1) {
|
||||
item = set_repair_pivot(me, item, is_left_deleted);
|
||||
if (item->parent == NULL || item->balance == -1 || item->balance == 1) {
|
||||
if (!item->parent || item->balance == -1 || item->balance == 1) {
|
||||
return;
|
||||
}
|
||||
}
|
||||
struct node *child = item;
|
||||
struct node *parent = item->parent;
|
||||
while (parent != NULL) {
|
||||
while (parent) {
|
||||
if (parent->left == child) {
|
||||
parent->balance++;
|
||||
} else {
|
||||
@@ -406,7 +406,7 @@ static void set_delete_balance(set me,
|
||||
parent = child->parent;
|
||||
// If balance is -1 or +1 after modification or the parent is NULL,
|
||||
// then the tree is balanced.
|
||||
if (parent == NULL || child->balance == -1 || child->balance == 1) {
|
||||
if (!parent || child->balance == -1 || child->balance == 1) {
|
||||
return;
|
||||
}
|
||||
} else {
|
||||
@@ -423,7 +423,7 @@ static void set_remove_no_children(set me, const struct node *const traverse)
|
||||
{
|
||||
struct node *const parent = traverse->parent;
|
||||
// If no parent and no children, then the only node is traverse.
|
||||
if (parent == NULL) {
|
||||
if (!parent) {
|
||||
me->root = NULL;
|
||||
return;
|
||||
}
|
||||
@@ -444,8 +444,8 @@ static void set_remove_one_child(set me, const struct node *const traverse)
|
||||
{
|
||||
struct node *const parent = traverse->parent;
|
||||
// If no parent, make the child of traverse the new root.
|
||||
if (parent == NULL) {
|
||||
if (traverse->left != NULL) {
|
||||
if (!parent) {
|
||||
if (traverse->left) {
|
||||
traverse->left->parent = NULL;
|
||||
me->root = traverse->left;
|
||||
} else {
|
||||
@@ -456,7 +456,7 @@ static void set_remove_one_child(set me, const struct node *const traverse)
|
||||
}
|
||||
// The parent of traverse now references the child of traverse.
|
||||
if (parent->left == traverse) {
|
||||
if (traverse->left != NULL) {
|
||||
if (traverse->left) {
|
||||
parent->left = traverse->left;
|
||||
traverse->left->parent = parent;
|
||||
} else {
|
||||
@@ -465,7 +465,7 @@ static void set_remove_one_child(set me, const struct node *const traverse)
|
||||
}
|
||||
set_delete_balance(me, parent, true);
|
||||
} else {
|
||||
if (traverse->left != NULL) {
|
||||
if (traverse->left) {
|
||||
parent->right = traverse->left;
|
||||
traverse->left->parent = parent;
|
||||
} else {
|
||||
@@ -493,13 +493,13 @@ static void set_remove_two_children(set me, const struct node *const traverse)
|
||||
item->left->parent = item;
|
||||
} else {
|
||||
item = traverse->right->left;
|
||||
while (item->left != NULL) {
|
||||
while (item->left) {
|
||||
item = item->left;
|
||||
}
|
||||
parent = item->parent;
|
||||
item->balance = traverse->balance;
|
||||
item->parent->left = item->right;
|
||||
if (item->right != NULL) {
|
||||
if (item->right) {
|
||||
item->right->parent = item->parent;
|
||||
}
|
||||
item->left = traverse->left;
|
||||
@@ -508,7 +508,7 @@ static void set_remove_two_children(set me, const struct node *const traverse)
|
||||
item->right->parent = item;
|
||||
item->parent = traverse->parent;
|
||||
}
|
||||
if (traverse->parent == NULL) {
|
||||
if (!traverse->parent) {
|
||||
me->root = item;
|
||||
} else if (traverse->parent->left == traverse) {
|
||||
item->parent->left = item;
|
||||
@@ -523,9 +523,9 @@ static void set_remove_two_children(set me, const struct node *const traverse)
|
||||
*/
|
||||
static void set_remove_element(set me, struct node *const traverse)
|
||||
{
|
||||
if (traverse->left == NULL && traverse->right == NULL) {
|
||||
if (!traverse->left && !traverse->right) {
|
||||
set_remove_no_children(me, traverse);
|
||||
} else if (traverse->left == NULL || traverse->right == NULL) {
|
||||
} else if (!traverse->left || !traverse->right) {
|
||||
set_remove_one_child(me, traverse);
|
||||
} else {
|
||||
set_remove_two_children(me, traverse);
|
||||
@@ -546,7 +546,7 @@ static void set_remove_element(set me, struct node *const traverse)
|
||||
bool set_remove(set me, void *const key)
|
||||
{
|
||||
struct node *const traverse = set_equal_match(me, key);
|
||||
if (traverse == NULL) {
|
||||
if (!traverse) {
|
||||
return false;
|
||||
}
|
||||
set_remove_element(me, traverse);
|
||||
@@ -560,7 +560,7 @@ bool set_remove(set me, void *const key)
|
||||
*/
|
||||
void set_clear(set me)
|
||||
{
|
||||
while (me->root != NULL) {
|
||||
while (me->root) {
|
||||
set_remove_element(me, me->root);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -39,11 +39,11 @@ struct _stack {
|
||||
stack stack_init(const size_t data_size)
|
||||
{
|
||||
struct _stack *const init = malloc(sizeof(struct _stack));
|
||||
if (init == NULL) {
|
||||
if (!init) {
|
||||
return NULL;
|
||||
}
|
||||
init->deque_data = deque_init(data_size);
|
||||
if (init->deque_data == NULL) {
|
||||
if (!init->deque_data) {
|
||||
free(init);
|
||||
return NULL;
|
||||
}
|
||||
|
||||
@@ -65,7 +65,7 @@ unordered_map unordered_map_init(const size_t key_size,
|
||||
const void *const))
|
||||
{
|
||||
struct _unordered_map *const init = malloc(sizeof(struct _unordered_map));
|
||||
if (init == NULL) {
|
||||
if (!init) {
|
||||
return NULL;
|
||||
}
|
||||
init->key_size = key_size;
|
||||
@@ -75,7 +75,7 @@ unordered_map unordered_map_init(const size_t key_size,
|
||||
init->size = 0;
|
||||
init->capacity = STARTING_BUCKETS;
|
||||
init->buckets = calloc(STARTING_BUCKETS, sizeof(struct node *));
|
||||
if (init->buckets == NULL) {
|
||||
if (!init->buckets) {
|
||||
free(init);
|
||||
return NULL;
|
||||
}
|
||||
@@ -89,12 +89,12 @@ static void unordered_map_add_item(unordered_map me, struct node *const add)
|
||||
{
|
||||
const int index = (int) (add->hash % me->capacity);
|
||||
add->next = NULL;
|
||||
if (me->buckets[index] == NULL) {
|
||||
if (!me->buckets[index]) {
|
||||
me->buckets[index] = add;
|
||||
return;
|
||||
}
|
||||
struct node *traverse = me->buckets[index];
|
||||
while (traverse->next != NULL) {
|
||||
while (traverse->next) {
|
||||
traverse = traverse->next;
|
||||
}
|
||||
traverse->next = add;
|
||||
@@ -113,13 +113,13 @@ int unordered_map_rehash(unordered_map me)
|
||||
{
|
||||
struct node **old_buckets = me->buckets;
|
||||
me->buckets = calloc((size_t) me->capacity, sizeof(struct node *));
|
||||
if (me->buckets == NULL) {
|
||||
if (!me->buckets) {
|
||||
me->buckets = old_buckets;
|
||||
return -ENOMEM;
|
||||
}
|
||||
for (int i = 0; i < me->capacity; i++) {
|
||||
struct node *traverse = old_buckets[i];
|
||||
while (traverse != NULL) {
|
||||
while (traverse) {
|
||||
struct node *const backup = traverse->next;
|
||||
traverse->hash = me->hash(traverse->key);
|
||||
unordered_map_add_item(me, traverse);
|
||||
@@ -163,14 +163,14 @@ static int unordered_map_resize(unordered_map me)
|
||||
const int new_capacity = (int) (me->capacity * RESIZE_RATIO);
|
||||
struct node **old_buckets = me->buckets;
|
||||
me->buckets = calloc((size_t) new_capacity, sizeof(struct node *));
|
||||
if (me->buckets == NULL) {
|
||||
if (!me->buckets) {
|
||||
me->buckets = old_buckets;
|
||||
return -ENOMEM;
|
||||
}
|
||||
me->capacity = new_capacity;
|
||||
for (int i = 0; i < old_capacity; i++) {
|
||||
struct node *traverse = old_buckets[i];
|
||||
while (traverse != NULL) {
|
||||
while (traverse) {
|
||||
struct node *const backup = traverse->next;
|
||||
unordered_map_add_item(me, traverse);
|
||||
traverse = backup;
|
||||
@@ -200,17 +200,17 @@ static struct node *const unordered_map_create_element(unordered_map me,
|
||||
const void *const value)
|
||||
{
|
||||
struct node *const init = malloc(sizeof(struct node));
|
||||
if (init == NULL) {
|
||||
if (!init) {
|
||||
return NULL;
|
||||
}
|
||||
init->key = malloc(me->key_size);
|
||||
if (init->key == NULL) {
|
||||
if (!init->key) {
|
||||
free(init);
|
||||
return NULL;
|
||||
}
|
||||
memcpy(init->key, key, me->key_size);
|
||||
init->value = malloc(me->value_size);
|
||||
if (init->value == NULL) {
|
||||
if (!init->value) {
|
||||
free(init->key);
|
||||
free(init);
|
||||
return NULL;
|
||||
@@ -237,9 +237,9 @@ int unordered_map_put(unordered_map me, void *const key, void *const value)
|
||||
|
||||
const unsigned long hash = me->hash(key);
|
||||
const int index = (int) (hash % me->capacity);
|
||||
if (me->buckets[index] == NULL) {
|
||||
if (!me->buckets[index]) {
|
||||
me->buckets[index] = unordered_map_create_element(me, hash, key, value);
|
||||
if (me->buckets[index] == NULL) {
|
||||
if (!me->buckets[index]) {
|
||||
return -ENOMEM;
|
||||
}
|
||||
} else {
|
||||
@@ -248,7 +248,7 @@ int unordered_map_put(unordered_map me, void *const key, void *const value)
|
||||
memcpy(traverse->value, value, me->value_size);
|
||||
return 0;
|
||||
}
|
||||
while (traverse->next != NULL) {
|
||||
while (traverse->next) {
|
||||
traverse = traverse->next;
|
||||
if (unordered_map_is_equal(me, traverse, hash, key)) {
|
||||
memcpy(traverse->value, value, me->value_size);
|
||||
@@ -256,7 +256,7 @@ int unordered_map_put(unordered_map me, void *const key, void *const value)
|
||||
}
|
||||
}
|
||||
traverse->next = unordered_map_create_element(me, hash, key, value);
|
||||
if (traverse->next == NULL) {
|
||||
if (!traverse->next) {
|
||||
return -ENOMEM;
|
||||
}
|
||||
}
|
||||
@@ -281,7 +281,7 @@ bool unordered_map_get(void *const value, unordered_map me, void *const key)
|
||||
const unsigned long hash = me->hash(key);
|
||||
const int index = (int) (hash % me->capacity);
|
||||
struct node *traverse = me->buckets[index];
|
||||
while (traverse != NULL) {
|
||||
while (traverse) {
|
||||
if (unordered_map_is_equal(me, traverse, hash, key)) {
|
||||
memcpy(value, traverse->value, me->value_size);
|
||||
return true;
|
||||
@@ -304,7 +304,7 @@ bool unordered_map_contains(unordered_map me, void *const key)
|
||||
const unsigned long hash = me->hash(key);
|
||||
const int index = (int) (hash % me->capacity);
|
||||
const struct node *traverse = me->buckets[index];
|
||||
while (traverse != NULL) {
|
||||
while (traverse) {
|
||||
if (unordered_map_is_equal(me, traverse, hash, key)) {
|
||||
return true;
|
||||
}
|
||||
@@ -325,7 +325,7 @@ bool unordered_map_remove(unordered_map me, void *const key)
|
||||
{
|
||||
const unsigned long hash = me->hash(key);
|
||||
const int index = (int) (hash % me->capacity);
|
||||
if (me->buckets[index] == NULL) {
|
||||
if (!me->buckets[index]) {
|
||||
return false;
|
||||
}
|
||||
struct node *traverse = me->buckets[index];
|
||||
@@ -337,7 +337,7 @@ bool unordered_map_remove(unordered_map me, void *const key)
|
||||
me->size--;
|
||||
return true;
|
||||
}
|
||||
while (traverse->next != NULL) {
|
||||
while (traverse->next) {
|
||||
if (unordered_map_is_equal(me, traverse->next, hash, key)) {
|
||||
struct node *const backup = traverse->next;
|
||||
traverse->next = traverse->next->next;
|
||||
@@ -364,12 +364,12 @@ int unordered_map_clear(unordered_map me)
|
||||
{
|
||||
struct node **temp =
|
||||
calloc((size_t) STARTING_BUCKETS, sizeof(struct node *));
|
||||
if (temp == NULL) {
|
||||
if (!temp) {
|
||||
return -ENOMEM;
|
||||
}
|
||||
for (int i = 0; i < me->capacity; i++) {
|
||||
struct node *traverse = me->buckets[i];
|
||||
while (traverse != NULL) {
|
||||
while (traverse) {
|
||||
struct node *const backup = traverse;
|
||||
traverse = traverse->next;
|
||||
free(backup->key);
|
||||
|
||||
@@ -74,7 +74,7 @@ unordered_multimap_init(const size_t key_size,
|
||||
{
|
||||
struct _unordered_multimap *const init =
|
||||
malloc(sizeof(struct _unordered_multimap));
|
||||
if (init == NULL) {
|
||||
if (!init) {
|
||||
return NULL;
|
||||
}
|
||||
init->key_size = key_size;
|
||||
@@ -85,13 +85,13 @@ unordered_multimap_init(const size_t key_size,
|
||||
init->size = 0;
|
||||
init->capacity = STARTING_BUCKETS;
|
||||
init->buckets = calloc(STARTING_BUCKETS, sizeof(struct node *));
|
||||
if (init->buckets == NULL) {
|
||||
if (!init->buckets) {
|
||||
free(init);
|
||||
return NULL;
|
||||
}
|
||||
init->iterate_hash = 0;
|
||||
init->iterate_key = calloc(1, init->key_size);
|
||||
if (init->iterate_key == NULL) {
|
||||
if (!init->iterate_key) {
|
||||
free(init->buckets);
|
||||
free(init);
|
||||
return NULL;
|
||||
@@ -108,12 +108,12 @@ static void unordered_multimap_add_item(unordered_multimap me,
|
||||
{
|
||||
const int index = (int) (add->hash % me->capacity);
|
||||
add->next = NULL;
|
||||
if (me->buckets[index] == NULL) {
|
||||
if (!me->buckets[index]) {
|
||||
me->buckets[index] = add;
|
||||
return;
|
||||
}
|
||||
struct node *traverse = me->buckets[index];
|
||||
while (traverse->next != NULL) {
|
||||
while (traverse->next) {
|
||||
traverse = traverse->next;
|
||||
}
|
||||
traverse->next = add;
|
||||
@@ -132,13 +132,13 @@ int unordered_multimap_rehash(unordered_multimap me)
|
||||
{
|
||||
struct node **old_buckets = me->buckets;
|
||||
me->buckets = calloc((size_t) me->capacity, sizeof(struct node *));
|
||||
if (me->buckets == NULL) {
|
||||
if (!me->buckets) {
|
||||
me->buckets = old_buckets;
|
||||
return -ENOMEM;
|
||||
}
|
||||
for (int i = 0; i < me->capacity; i++) {
|
||||
struct node *traverse = old_buckets[i];
|
||||
while (traverse != NULL) {
|
||||
while (traverse) {
|
||||
struct node *const backup = traverse->next;
|
||||
traverse->hash = me->hash(traverse->key);
|
||||
unordered_multimap_add_item(me, traverse);
|
||||
@@ -182,14 +182,14 @@ static int unordered_multimap_resize(unordered_multimap me)
|
||||
const int new_capacity = (int) (me->capacity * RESIZE_RATIO);
|
||||
struct node **old_buckets = me->buckets;
|
||||
me->buckets = calloc((size_t) new_capacity, sizeof(struct node *));
|
||||
if (me->buckets == NULL) {
|
||||
if (!me->buckets) {
|
||||
me->buckets = old_buckets;
|
||||
return -ENOMEM;
|
||||
}
|
||||
me->capacity = new_capacity;
|
||||
for (int i = 0; i < old_capacity; i++) {
|
||||
struct node *traverse = old_buckets[i];
|
||||
while (traverse != NULL) {
|
||||
while (traverse) {
|
||||
struct node *const backup = traverse->next;
|
||||
unordered_multimap_add_item(me, traverse);
|
||||
traverse = backup;
|
||||
@@ -220,17 +220,17 @@ unordered_multimap_create_element(unordered_multimap me,
|
||||
const void *const value)
|
||||
{
|
||||
struct node *const init = malloc(sizeof(struct node));
|
||||
if (init == NULL) {
|
||||
if (!init) {
|
||||
return NULL;
|
||||
}
|
||||
init->key = malloc(me->key_size);
|
||||
if (init->key == NULL) {
|
||||
if (!init->key) {
|
||||
free(init);
|
||||
return NULL;
|
||||
}
|
||||
memcpy(init->key, key, me->key_size);
|
||||
init->value = malloc(me->value_size);
|
||||
if (init->value == NULL) {
|
||||
if (!init->value) {
|
||||
free(init->key);
|
||||
free(init);
|
||||
return NULL;
|
||||
@@ -257,20 +257,20 @@ int unordered_multimap_put(unordered_multimap me,
|
||||
{
|
||||
const unsigned long hash = me->hash(key);
|
||||
const int index = (int) (hash % me->capacity);
|
||||
if (me->buckets[index] == NULL) {
|
||||
if (!me->buckets[index]) {
|
||||
me->buckets[index] =
|
||||
unordered_multimap_create_element(me, hash, key, value);
|
||||
if (me->buckets[index] == NULL) {
|
||||
if (!me->buckets[index]) {
|
||||
return -ENOMEM;
|
||||
}
|
||||
} else {
|
||||
struct node *traverse = me->buckets[index];
|
||||
while (traverse->next != NULL) {
|
||||
while (traverse->next) {
|
||||
traverse = traverse->next;
|
||||
}
|
||||
traverse->next =
|
||||
unordered_multimap_create_element(me, hash, key, value);
|
||||
if (traverse->next == NULL) {
|
||||
if (!traverse->next) {
|
||||
return -ENOMEM;
|
||||
}
|
||||
}
|
||||
@@ -296,7 +296,7 @@ void unordered_multimap_get_start(unordered_multimap me, void *const key)
|
||||
me->iterate_element = NULL;
|
||||
const int index = (int) (me->iterate_hash % me->capacity);
|
||||
struct node *traverse = me->buckets[index];
|
||||
while (traverse != NULL) {
|
||||
while (traverse) {
|
||||
if (unordered_multimap_is_equal(me, traverse, me->iterate_hash, key)) {
|
||||
me->iterate_element = traverse;
|
||||
return;
|
||||
@@ -318,12 +318,12 @@ void unordered_multimap_get_start(unordered_multimap me, void *const key)
|
||||
*/
|
||||
bool unordered_multimap_get_next(void *const value, unordered_multimap me)
|
||||
{
|
||||
if (me->iterate_element == NULL) {
|
||||
if (!me->iterate_element) {
|
||||
return false;
|
||||
}
|
||||
struct node *const item = me->iterate_element;
|
||||
struct node *traverse = item->next;
|
||||
while (traverse != NULL) {
|
||||
while (traverse) {
|
||||
if (unordered_multimap_is_equal(me, traverse, me->iterate_hash,
|
||||
me->iterate_key)) {
|
||||
me->iterate_element = traverse;
|
||||
@@ -351,7 +351,7 @@ int unordered_multimap_count(unordered_multimap me, void *const key)
|
||||
const unsigned long hash = me->hash(key);
|
||||
const int index = (int) (hash % me->capacity);
|
||||
const struct node *traverse = me->buckets[index];
|
||||
while (traverse != NULL) {
|
||||
while (traverse) {
|
||||
if (unordered_multimap_is_equal(me, traverse, hash, key)) {
|
||||
count++;
|
||||
}
|
||||
@@ -373,7 +373,7 @@ bool unordered_multimap_contains(unordered_multimap me, void *const key)
|
||||
const unsigned long hash = me->hash(key);
|
||||
const int index = (int) (hash % me->capacity);
|
||||
const struct node *traverse = me->buckets[index];
|
||||
while (traverse != NULL) {
|
||||
while (traverse) {
|
||||
if (unordered_multimap_is_equal(me, traverse, hash, key)) {
|
||||
return true;
|
||||
}
|
||||
@@ -397,7 +397,7 @@ bool unordered_multimap_remove(unordered_multimap me,
|
||||
{
|
||||
const unsigned long hash = me->hash(key);
|
||||
const int index = (int) (hash % me->capacity);
|
||||
if (me->buckets[index] == NULL) {
|
||||
if (!me->buckets[index]) {
|
||||
return false;
|
||||
}
|
||||
struct node *traverse = me->buckets[index];
|
||||
@@ -410,7 +410,7 @@ bool unordered_multimap_remove(unordered_multimap me,
|
||||
me->size--;
|
||||
return true;
|
||||
}
|
||||
while (traverse->next != NULL) {
|
||||
while (traverse->next) {
|
||||
is_key_equal =
|
||||
unordered_multimap_is_equal(me, traverse->next, hash, key);
|
||||
if (is_key_equal && me->value_comparator(traverse->value, value) == 0) {
|
||||
@@ -443,7 +443,7 @@ bool unordered_multimap_remove_all(unordered_multimap me, void *const key)
|
||||
bool was_modified = false;
|
||||
while (true) {
|
||||
struct node *traverse = me->buckets[index];
|
||||
if (traverse == NULL) {
|
||||
if (!traverse) {
|
||||
break;
|
||||
}
|
||||
if (unordered_multimap_is_equal(me, traverse, hash, key)) {
|
||||
@@ -455,7 +455,7 @@ bool unordered_multimap_remove_all(unordered_multimap me, void *const key)
|
||||
was_modified = true;
|
||||
continue;
|
||||
}
|
||||
while (traverse->next != NULL) {
|
||||
while (traverse->next) {
|
||||
if (unordered_multimap_is_equal(me, traverse->next, hash, key)) {
|
||||
struct node *const backup = traverse->next;
|
||||
traverse->next = traverse->next->next;
|
||||
@@ -485,12 +485,12 @@ int unordered_multimap_clear(unordered_multimap me)
|
||||
{
|
||||
struct node **temp =
|
||||
calloc((size_t) STARTING_BUCKETS, sizeof(struct node *));
|
||||
if (temp == NULL) {
|
||||
if (!temp) {
|
||||
return -ENOMEM;
|
||||
}
|
||||
for (int i = 0; i < me->capacity; i++) {
|
||||
struct node *traverse = me->buckets[i];
|
||||
while (traverse != NULL) {
|
||||
while (traverse) {
|
||||
struct node *const backup = traverse;
|
||||
traverse = traverse->next;
|
||||
free(backup->key);
|
||||
|
||||
@@ -64,7 +64,7 @@ unordered_multiset_init(const size_t key_size,
|
||||
{
|
||||
struct _unordered_multiset *const init =
|
||||
malloc(sizeof(struct _unordered_multiset));
|
||||
if (init == NULL) {
|
||||
if (!init) {
|
||||
return NULL;
|
||||
}
|
||||
init->key_size = key_size;
|
||||
@@ -74,7 +74,7 @@ unordered_multiset_init(const size_t key_size,
|
||||
init->used = 0;
|
||||
init->capacity = STARTING_BUCKETS;
|
||||
init->buckets = calloc(STARTING_BUCKETS, sizeof(struct node *));
|
||||
if (init->buckets == NULL) {
|
||||
if (!init->buckets) {
|
||||
free(init);
|
||||
return NULL;
|
||||
}
|
||||
@@ -89,12 +89,12 @@ static void unordered_multiset_add_item(unordered_multiset me,
|
||||
{
|
||||
const int index = (int) (add->hash % me->capacity);
|
||||
add->next = NULL;
|
||||
if (me->buckets[index] == NULL) {
|
||||
if (!me->buckets[index]) {
|
||||
me->buckets[index] = add;
|
||||
return;
|
||||
}
|
||||
struct node *traverse = me->buckets[index];
|
||||
while (traverse->next != NULL) {
|
||||
while (traverse->next) {
|
||||
traverse = traverse->next;
|
||||
}
|
||||
traverse->next = add;
|
||||
@@ -113,13 +113,13 @@ int unordered_multiset_rehash(unordered_multiset me)
|
||||
{
|
||||
struct node **old_buckets = me->buckets;
|
||||
me->buckets = calloc((size_t) me->capacity, sizeof(struct node *));
|
||||
if (me->buckets == NULL) {
|
||||
if (!me->buckets) {
|
||||
me->buckets = old_buckets;
|
||||
return -ENOMEM;
|
||||
}
|
||||
for (int i = 0; i < me->capacity; i++) {
|
||||
struct node *traverse = old_buckets[i];
|
||||
while (traverse != NULL) {
|
||||
while (traverse) {
|
||||
struct node *const backup = traverse->next;
|
||||
traverse->hash = me->hash(traverse->key);
|
||||
unordered_multiset_add_item(me, traverse);
|
||||
@@ -163,14 +163,14 @@ static int unordered_multiset_resize(unordered_multiset me)
|
||||
const int new_capacity = (int) (me->capacity * RESIZE_RATIO);
|
||||
struct node **old_buckets = me->buckets;
|
||||
me->buckets = calloc((size_t) new_capacity, sizeof(struct node *));
|
||||
if (me->buckets == NULL) {
|
||||
if (!me->buckets) {
|
||||
me->buckets = old_buckets;
|
||||
return -ENOMEM;
|
||||
}
|
||||
me->capacity = new_capacity;
|
||||
for (int i = 0; i < old_capacity; i++) {
|
||||
struct node *traverse = old_buckets[i];
|
||||
while (traverse != NULL) {
|
||||
while (traverse) {
|
||||
struct node *const backup = traverse->next;
|
||||
unordered_multiset_add_item(me, traverse);
|
||||
traverse = backup;
|
||||
@@ -200,12 +200,12 @@ unordered_multiset_create_element(unordered_multiset me,
|
||||
const void *const key)
|
||||
{
|
||||
struct node *const init = malloc(sizeof(struct node));
|
||||
if (init == NULL) {
|
||||
if (!init) {
|
||||
return NULL;
|
||||
}
|
||||
init->count = 1;
|
||||
init->key = malloc(me->key_size);
|
||||
if (init->key == NULL) {
|
||||
if (!init->key) {
|
||||
free(init);
|
||||
return NULL;
|
||||
}
|
||||
@@ -229,9 +229,9 @@ int unordered_multiset_put(unordered_multiset me, void *const key)
|
||||
|
||||
const unsigned long hash = me->hash(key);
|
||||
const int index = (int) (hash % me->capacity);
|
||||
if (me->buckets[index] == NULL) {
|
||||
if (!me->buckets[index]) {
|
||||
me->buckets[index] = unordered_multiset_create_element(me, hash, key);
|
||||
if (me->buckets[index] == NULL) {
|
||||
if (!me->buckets[index]) {
|
||||
return -ENOMEM;
|
||||
}
|
||||
} else {
|
||||
@@ -241,7 +241,7 @@ int unordered_multiset_put(unordered_multiset me, void *const key)
|
||||
me->size++;
|
||||
return 0;
|
||||
}
|
||||
while (traverse->next != NULL) {
|
||||
while (traverse->next) {
|
||||
traverse = traverse->next;
|
||||
if (unordered_multiset_is_equal(me, traverse, hash, key)) {
|
||||
traverse->count++;
|
||||
@@ -250,7 +250,7 @@ int unordered_multiset_put(unordered_multiset me, void *const key)
|
||||
}
|
||||
}
|
||||
traverse->next = unordered_multiset_create_element(me, hash, key);
|
||||
if (traverse->next == NULL) {
|
||||
if (!traverse->next) {
|
||||
return -ENOMEM;
|
||||
}
|
||||
}
|
||||
@@ -275,7 +275,7 @@ int unordered_multiset_count(unordered_multiset me, void *const key)
|
||||
const unsigned long hash = me->hash(key);
|
||||
const int index = (int) (hash % me->capacity);
|
||||
const struct node *traverse = me->buckets[index];
|
||||
while (traverse != NULL) {
|
||||
while (traverse) {
|
||||
if (unordered_multiset_is_equal(me, traverse, hash, key)) {
|
||||
return traverse->count;
|
||||
}
|
||||
@@ -309,7 +309,7 @@ bool unordered_multiset_remove(unordered_multiset me, void *const key)
|
||||
{
|
||||
const unsigned long hash = me->hash(key);
|
||||
const int index = (int) (hash % me->capacity);
|
||||
if (me->buckets[index] == NULL) {
|
||||
if (!me->buckets[index]) {
|
||||
return false;
|
||||
}
|
||||
struct node *traverse = me->buckets[index];
|
||||
@@ -324,7 +324,7 @@ bool unordered_multiset_remove(unordered_multiset me, void *const key)
|
||||
me->size--;
|
||||
return true;
|
||||
}
|
||||
while (traverse->next != NULL) {
|
||||
while (traverse->next) {
|
||||
if (unordered_multiset_is_equal(me, traverse->next, hash, key)) {
|
||||
struct node *const backup = traverse->next;
|
||||
backup->count--;
|
||||
@@ -355,7 +355,7 @@ bool unordered_multiset_remove_all(unordered_multiset me, void *const key)
|
||||
{
|
||||
const unsigned long hash = me->hash(key);
|
||||
const int index = (int) (hash % me->capacity);
|
||||
if (me->buckets[index] == NULL) {
|
||||
if (!me->buckets[index]) {
|
||||
return false;
|
||||
}
|
||||
struct node *traverse = me->buckets[index];
|
||||
@@ -367,7 +367,7 @@ bool unordered_multiset_remove_all(unordered_multiset me, void *const key)
|
||||
me->used--;
|
||||
return true;
|
||||
}
|
||||
while (traverse->next != NULL) {
|
||||
while (traverse->next) {
|
||||
if (unordered_multiset_is_equal(me, traverse->next, hash, key)) {
|
||||
struct node *const backup = traverse->next;
|
||||
traverse->next = traverse->next->next;
|
||||
@@ -394,12 +394,12 @@ int unordered_multiset_clear(unordered_multiset me)
|
||||
{
|
||||
struct node **temp =
|
||||
calloc((size_t) STARTING_BUCKETS, sizeof(struct node *));
|
||||
if (temp == NULL) {
|
||||
if (!temp) {
|
||||
return -ENOMEM;
|
||||
}
|
||||
for (int i = 0; i < me->capacity; i++) {
|
||||
struct node *traverse = me->buckets[i];
|
||||
while (traverse != NULL) {
|
||||
while (traverse) {
|
||||
struct node *const backup = traverse;
|
||||
traverse = traverse->next;
|
||||
free(backup->key);
|
||||
|
||||
@@ -61,7 +61,7 @@ unordered_set unordered_set_init(const size_t key_size,
|
||||
const void *const))
|
||||
{
|
||||
struct _unordered_set *const init = malloc(sizeof(struct _unordered_set));
|
||||
if (init == NULL) {
|
||||
if (!init) {
|
||||
return NULL;
|
||||
}
|
||||
init->key_size = key_size;
|
||||
@@ -70,7 +70,7 @@ unordered_set unordered_set_init(const size_t key_size,
|
||||
init->size = 0;
|
||||
init->capacity = STARTING_BUCKETS;
|
||||
init->buckets = calloc(STARTING_BUCKETS, sizeof(struct node *));
|
||||
if (init->buckets == NULL) {
|
||||
if (!init->buckets) {
|
||||
free(init);
|
||||
return NULL;
|
||||
}
|
||||
@@ -84,12 +84,12 @@ static void unordered_set_add_item(unordered_set me, struct node *const add)
|
||||
{
|
||||
const int index = (int) (add->hash % me->capacity);
|
||||
add->next = NULL;
|
||||
if (me->buckets[index] == NULL) {
|
||||
if (!me->buckets[index]) {
|
||||
me->buckets[index] = add;
|
||||
return;
|
||||
}
|
||||
struct node *traverse = me->buckets[index];
|
||||
while (traverse->next != NULL) {
|
||||
while (traverse->next) {
|
||||
traverse = traverse->next;
|
||||
}
|
||||
traverse->next = add;
|
||||
@@ -108,13 +108,13 @@ int unordered_set_rehash(unordered_set me)
|
||||
{
|
||||
struct node **old_buckets = me->buckets;
|
||||
me->buckets = calloc((size_t) me->capacity, sizeof(struct node *));
|
||||
if (me->buckets == NULL) {
|
||||
if (!me->buckets) {
|
||||
me->buckets = old_buckets;
|
||||
return -ENOMEM;
|
||||
}
|
||||
for (int i = 0; i < me->capacity; i++) {
|
||||
struct node *traverse = old_buckets[i];
|
||||
while (traverse != NULL) {
|
||||
while (traverse) {
|
||||
struct node *const backup = traverse->next;
|
||||
traverse->hash = me->hash(traverse->key);
|
||||
unordered_set_add_item(me, traverse);
|
||||
@@ -158,14 +158,14 @@ static int unordered_set_resize(unordered_set me)
|
||||
const int new_capacity = (int) (me->capacity * RESIZE_RATIO);
|
||||
struct node **old_buckets = me->buckets;
|
||||
me->buckets = calloc((size_t) new_capacity, sizeof(struct node *));
|
||||
if (me->buckets == NULL) {
|
||||
if (!me->buckets) {
|
||||
me->buckets = old_buckets;
|
||||
return -ENOMEM;
|
||||
}
|
||||
me->capacity = new_capacity;
|
||||
for (int i = 0; i < old_capacity; i++) {
|
||||
struct node *traverse = old_buckets[i];
|
||||
while (traverse != NULL) {
|
||||
while (traverse) {
|
||||
struct node *const backup = traverse->next;
|
||||
unordered_set_add_item(me, traverse);
|
||||
traverse = backup;
|
||||
@@ -194,11 +194,11 @@ static struct node *const unordered_set_create_element(unordered_set me,
|
||||
const void *const key)
|
||||
{
|
||||
struct node *const init = malloc(sizeof(struct node));
|
||||
if (init == NULL) {
|
||||
if (!init) {
|
||||
return NULL;
|
||||
}
|
||||
init->key = malloc(me->key_size);
|
||||
if (init->key == NULL) {
|
||||
if (!init->key) {
|
||||
free(init);
|
||||
return NULL;
|
||||
}
|
||||
@@ -223,9 +223,9 @@ int unordered_set_put(unordered_set me, void *const key)
|
||||
|
||||
const unsigned long hash = me->hash(key);
|
||||
const int index = (int) (hash % me->capacity);
|
||||
if (me->buckets[index] == NULL) {
|
||||
if (!me->buckets[index]) {
|
||||
me->buckets[index] = unordered_set_create_element(me, hash, key);
|
||||
if (me->buckets[index] == NULL) {
|
||||
if (!me->buckets[index]) {
|
||||
return -ENOMEM;
|
||||
}
|
||||
} else {
|
||||
@@ -233,14 +233,14 @@ int unordered_set_put(unordered_set me, void *const key)
|
||||
if (unordered_set_is_equal(me, traverse, hash, key)) {
|
||||
return 0;
|
||||
}
|
||||
while (traverse->next != NULL) {
|
||||
while (traverse->next) {
|
||||
traverse = traverse->next;
|
||||
if (unordered_set_is_equal(me, traverse, hash, key)) {
|
||||
return 0;
|
||||
}
|
||||
}
|
||||
traverse->next = unordered_set_create_element(me, hash, key);
|
||||
if (traverse->next == NULL) {
|
||||
if (!traverse->next) {
|
||||
return -ENOMEM;
|
||||
}
|
||||
}
|
||||
@@ -264,7 +264,7 @@ bool unordered_set_contains(unordered_set me, void *const key)
|
||||
const unsigned long hash = me->hash(key);
|
||||
const int index = (int) (hash % me->capacity);
|
||||
const struct node *traverse = me->buckets[index];
|
||||
while (traverse != NULL) {
|
||||
while (traverse) {
|
||||
if (unordered_set_is_equal(me, traverse, hash, key)) {
|
||||
return true;
|
||||
}
|
||||
@@ -285,7 +285,7 @@ bool unordered_set_remove(unordered_set me, void *const key)
|
||||
{
|
||||
const unsigned long hash = me->hash(key);
|
||||
const int index = (int) (hash % me->capacity);
|
||||
if (me->buckets[index] == NULL) {
|
||||
if (!me->buckets[index]) {
|
||||
return false;
|
||||
}
|
||||
struct node *traverse = me->buckets[index];
|
||||
@@ -296,7 +296,7 @@ bool unordered_set_remove(unordered_set me, void *const key)
|
||||
me->size--;
|
||||
return true;
|
||||
}
|
||||
while (traverse->next != NULL) {
|
||||
while (traverse->next) {
|
||||
if (unordered_set_is_equal(me, traverse->next, hash, key)) {
|
||||
struct node *const backup = traverse->next;
|
||||
traverse->next = traverse->next->next;
|
||||
@@ -322,12 +322,12 @@ int unordered_set_clear(unordered_set me)
|
||||
{
|
||||
struct node **temp =
|
||||
calloc((size_t) STARTING_BUCKETS, sizeof(struct node *));
|
||||
if (temp == NULL) {
|
||||
if (!temp) {
|
||||
return -ENOMEM;
|
||||
}
|
||||
for (int i = 0; i < me->capacity; i++) {
|
||||
struct node *traverse = me->buckets[i];
|
||||
while (traverse != NULL) {
|
||||
while (traverse) {
|
||||
struct node *const backup = traverse;
|
||||
traverse = traverse->next;
|
||||
free(backup->key);
|
||||
|
||||
@@ -45,14 +45,14 @@ struct _vector {
|
||||
vector vector_init(const size_t data_size)
|
||||
{
|
||||
struct _vector *const init = malloc(sizeof(struct _vector));
|
||||
if (init == NULL) {
|
||||
if (!init) {
|
||||
return NULL;
|
||||
}
|
||||
init->data_size = data_size;
|
||||
init->offset = 0;
|
||||
init->space = START_SPACE;
|
||||
init->storage = malloc(init->space * init->data_size);
|
||||
if (init->storage == NULL) {
|
||||
if (!init->storage) {
|
||||
free(init);
|
||||
return NULL;
|
||||
}
|
||||
@@ -89,7 +89,7 @@ bool vector_is_empty(vector me)
|
||||
static int vector_set_space(vector me, const int size)
|
||||
{
|
||||
void *const temp = realloc(me->storage, size * me->data_size);
|
||||
if (temp == NULL) {
|
||||
if (!temp) {
|
||||
return -ENOMEM;
|
||||
}
|
||||
me->storage = temp;
|
||||
@@ -190,7 +190,7 @@ int vector_add_at(vector me, const int index, void *const data)
|
||||
if (me->offset + 1 >= me->space) {
|
||||
const int new_space = (int) (me->space * RESIZE_RATIO);
|
||||
void *const temp = realloc(me->storage, new_space * me->data_size);
|
||||
if (temp == NULL) {
|
||||
if (!temp) {
|
||||
return -ENOMEM;
|
||||
}
|
||||
me->storage = temp;
|
||||
|
||||
Reference in New Issue
Block a user