Commit db8c712f authored by Michael Beck's avatar Michael Beck
Browse files

- can build without iterator

- added ADDITIONAL_INIT and ADDITIONAL_TERM for initializing/terminating ADDITIONAL_DATA
- typos fixed

[r20290]
parent eb0a39c0
...@@ -56,6 +56,7 @@ struct HashSet { ...@@ -56,6 +56,7 @@ struct HashSet {
#endif #endif
}; };
#ifndef NO_ITERATOR
struct HashSetIterator { struct HashSetIterator {
HashSetEntry *current_bucket; HashSetEntry *current_bucket;
HashSetEntry *end; HashSetEntry *end;
...@@ -64,6 +65,7 @@ struct HashSetIterator { ...@@ -64,6 +65,7 @@ struct HashSetIterator {
unsigned entries_version; unsigned entries_version;
#endif #endif
}; };
#endif
#ifdef DO_REHASH #ifdef DO_REHASH
#undef HashSetEntry #undef HashSetEntry
......
...@@ -192,6 +192,8 @@ ...@@ -192,6 +192,8 @@
#ifndef hashset_size #ifndef hashset_size
#error You have to redefine hashset_size #error You have to redefine hashset_size
#endif #endif
#ifndef NO_ITERATOR
#ifndef hashset_iterator_init #ifndef hashset_iterator_init
#error You have to redefine hashset_iterator_init #error You have to redefine hashset_iterator_init
#endif #endif
...@@ -201,6 +203,7 @@ ...@@ -201,6 +203,7 @@
#ifndef hashset_remove_iterator #ifndef hashset_remove_iterator
#error You have to redefine hashset_remove_iterator #error You have to redefine hashset_remove_iterator
#endif #endif
#endif NO_ITERATOR
/** /**
* Returns the number of elements in the hashset * Returns the number of elements in the hashset
...@@ -404,9 +407,9 @@ void maybe_shrink(HashSet *self) ...@@ -404,9 +407,9 @@ void maybe_shrink(HashSet *self)
} }
/** /**
* Insert an element into the hashset. If no element with key key exists yet, * Insert an element into the hashset. If no element with the given key exists yet,
* then a new one is created and initialized with the InitData function. * then a new one is created and initialized with the InitData function.
* Otherwise the exisiting element is returned (for hashs where key is equal to * Otherwise the existing element is returned (for hashs where key is equal to
* value, nothing is returned.) * value, nothing is returned.)
* *
* @param self the hashset * @param self the hashset
...@@ -425,7 +428,7 @@ InsertReturnValue hashset_insert(HashSet *self, KeyType key) ...@@ -425,7 +428,7 @@ InsertReturnValue hashset_insert(HashSet *self, KeyType key)
} }
/** /**
* Searchs for an element with key @p key. * Searches for an element with key @p key.
* *
* @param self the hashset * @param self the hashset
* @param key the key to search for * @param key the key to search for
...@@ -521,12 +524,15 @@ void init_size(HashSet *self, size_t initial_size) ...@@ -521,12 +524,15 @@ void init_size(HashSet *self, size_t initial_size)
#ifndef NDEBUG #ifndef NDEBUG
self->entries_version = 0; self->entries_version = 0;
#endif #endif
#ifdef ADDITIONAL_INIT
ADDITIONAL_INIT
#endif
reset_thresholds(self); reset_thresholds(self);
} }
/** /**
* Initialializes a hashset with the default size. The memory for the set has to * Initializes a hashset with the default size. The memory for the set has to
* already allocated. * already allocated.
*/ */
void hashset_init(HashSet *self) void hashset_init(HashSet *self)
...@@ -540,6 +546,9 @@ void hashset_init(HashSet *self) ...@@ -540,6 +546,9 @@ void hashset_init(HashSet *self)
*/ */
void hashset_destroy(HashSet *self) void hashset_destroy(HashSet *self)
{ {
#ifdef ADDITIONAL_TERM
ADDITIONAL_TERM
#endif
Free(self->entries); Free(self->entries);
#ifndef NDEBUG #ifndef NDEBUG
self->entries = NULL; self->entries = NULL;
...@@ -547,7 +556,7 @@ void hashset_destroy(HashSet *self) ...@@ -547,7 +556,7 @@ void hashset_destroy(HashSet *self)
} }
/** /**
* Initializes a hashset expecting expected_element size * Initializes a hashset expecting expected_element size.
*/ */
void hashset_init_size(HashSet *self, size_t expected_elements) void hashset_init_size(HashSet *self, size_t expected_elements)
{ {
...@@ -563,6 +572,7 @@ void hashset_init_size(HashSet *self, size_t expected_elements) ...@@ -563,6 +572,7 @@ void hashset_init_size(HashSet *self, size_t expected_elements)
init_size(self, po2size); init_size(self, po2size);
} }
#ifndef NO_ITERATOR
/** /**
* Initializes a hashset iterator. The memory for the allocator has to be * Initializes a hashset iterator. The memory for the allocator has to be
* already allocated. * already allocated.
...@@ -621,5 +631,6 @@ void hashset_remove_iterator(HashSet *self, const HashSetIterator *iter) ...@@ -621,5 +631,6 @@ void hashset_remove_iterator(HashSet *self, const HashSetIterator *iter)
self->num_deleted++; self->num_deleted++;
self->consider_shrink = 1; self->consider_shrink = 1;
} }
#endif /* NO_ITERATOR */
#endif #endif /* HashSet */
Supports Markdown
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment