mirror of
https://github.com/bkthomps/Containers.git
synced 2025-11-16 12:34:47 +00:00
Clear should cause memory size to shrink
Calling clear on an unordered (multi) set or map not only clears all elements but reduces the hash table size.
This commit is contained in:
@@ -350,8 +350,11 @@ bool unordered_map_remove(unordered_map me, void *const key)
|
||||
* Clears the elements from the unordered map.
|
||||
*
|
||||
* @param me The unordered map to clear.
|
||||
*
|
||||
* @return 0 No error.
|
||||
* -ENOMEM Out of memory.
|
||||
*/
|
||||
void unordered_map_clear(unordered_map me)
|
||||
int unordered_map_clear(unordered_map me)
|
||||
{
|
||||
for (int i = 0; i < me->capacity; i++) {
|
||||
struct node *traverse = me->buckets[i];
|
||||
@@ -365,6 +368,14 @@ void unordered_map_clear(unordered_map me)
|
||||
me->buckets[i] = NULL;
|
||||
}
|
||||
me->size = 0;
|
||||
me->capacity = STARTING_BUCKETS;
|
||||
struct node **temp = calloc((size_t) me->capacity, sizeof(struct node *));
|
||||
if (temp == NULL) {
|
||||
return -ENOMEM;
|
||||
}
|
||||
free(me->buckets);
|
||||
me->buckets = temp;
|
||||
return 0;
|
||||
}
|
||||
|
||||
/**
|
||||
|
||||
@@ -46,7 +46,7 @@ bool unordered_map_contains(unordered_map me, void *key);
|
||||
bool unordered_map_remove(unordered_map me, void *key);
|
||||
|
||||
// Ending
|
||||
void unordered_map_clear(unordered_map me);
|
||||
int unordered_map_clear(unordered_map me);
|
||||
unordered_map unordered_map_destroy(unordered_map me);
|
||||
|
||||
#endif /* CONTAINERS_UNORDERED_MAP_H */
|
||||
|
||||
@@ -346,8 +346,11 @@ bool unordered_multiset_remove(unordered_multiset me, void *const key)
|
||||
* Clears the elements from the unordered multi-set.
|
||||
*
|
||||
* @param me The unordered multi-set to clear.
|
||||
*
|
||||
* @return 0 No error.
|
||||
* -ENOMEM Out of memory.
|
||||
*/
|
||||
void unordered_multiset_clear(unordered_multiset me)
|
||||
int unordered_multiset_clear(unordered_multiset me)
|
||||
{
|
||||
for (int i = 0; i < me->capacity; i++) {
|
||||
struct node *traverse = me->buckets[i];
|
||||
@@ -361,6 +364,14 @@ void unordered_multiset_clear(unordered_multiset me)
|
||||
}
|
||||
me->size = 0;
|
||||
me->used = 0;
|
||||
me->capacity = STARTING_BUCKETS;
|
||||
struct node **temp = calloc((size_t) me->capacity, sizeof(struct node *));
|
||||
if (temp == NULL) {
|
||||
return -ENOMEM;
|
||||
}
|
||||
free(me->buckets);
|
||||
me->buckets = temp;
|
||||
return 0;
|
||||
}
|
||||
|
||||
/**
|
||||
|
||||
@@ -46,7 +46,7 @@ bool unordered_multiset_contains(unordered_multiset me, void *key);
|
||||
bool unordered_multiset_remove(unordered_multiset me, void *key);
|
||||
|
||||
// Ending
|
||||
void unordered_multiset_clear(unordered_multiset me);
|
||||
int unordered_multiset_clear(unordered_multiset me);
|
||||
unordered_multiset unordered_multiset_destroy(unordered_multiset me);
|
||||
|
||||
#endif /* CONTAINERS_UNORDERED_MULTISET_H */
|
||||
|
||||
@@ -313,8 +313,11 @@ bool unordered_set_remove(unordered_set me, void *const key)
|
||||
* Clears the elements from the unordered set.
|
||||
*
|
||||
* @param me The unordered set to clear.
|
||||
*
|
||||
* @return 0 No error.
|
||||
* -ENOMEM Out of memory.
|
||||
*/
|
||||
void unordered_set_clear(unordered_set me)
|
||||
int unordered_set_clear(unordered_set me)
|
||||
{
|
||||
for (int i = 0; i < me->capacity; i++) {
|
||||
struct node *traverse = me->buckets[i];
|
||||
@@ -327,6 +330,14 @@ void unordered_set_clear(unordered_set me)
|
||||
me->buckets[i] = NULL;
|
||||
}
|
||||
me->size = 0;
|
||||
me->capacity = STARTING_BUCKETS;
|
||||
struct node **temp = calloc((size_t) me->capacity, sizeof(struct node *));
|
||||
if (temp == NULL) {
|
||||
return -ENOMEM;
|
||||
}
|
||||
free(me->buckets);
|
||||
me->buckets = temp;
|
||||
return 0;
|
||||
}
|
||||
|
||||
/**
|
||||
|
||||
@@ -44,7 +44,7 @@ bool unordered_set_contains(unordered_set me, void *key);
|
||||
bool unordered_set_remove(unordered_set me, void *key);
|
||||
|
||||
// Ending
|
||||
void unordered_set_clear(unordered_set me);
|
||||
int unordered_set_clear(unordered_set me);
|
||||
unordered_set unordered_set_destroy(unordered_set me);
|
||||
|
||||
#endif /* CONTAINERS_UNORDERED_SET_H */
|
||||
|
||||
Reference in New Issue
Block a user