* @file
* @author Michael Beck
* @brief A value set, containing expression for values.
- * @version $Id$
*/
#include "config.h"
#define KeyType ir_node*
#define ConstKeyType const ir_node*
#define GetKey(entry) (entry).value
-#define InitData(self,entry,key) do { (entry).value = (key); (entry).list.next = NULL; (entry).list.prev = NULL; } while(0)
+#define InitData(self,entry,key) do { (entry).value = (key); (entry).list.next = NULL; (entry).list.prev = NULL; } while (0)
#define Hash(self,key) ir_node_hash(key)
#define KeysEqual(self,key1,key2) (key1) == (key2)
#define SetRangeEmpty(ptr,size) memset(ptr, 0, (size) * sizeof((ptr)[0]))
#define EntrySetEmpty(entry) (entry).value = NULL
-#define EntrySetDeleted(entry) do { (entry).data.value = (ir_node*) -1; list_del(&(entry).data.list); } while(0)
+#define EntrySetDeleted(entry) do { (entry).data.value = (ir_node*) -1; list_del(&(entry).data.list); } while (0)
#define EntryIsEmpty(entry) ((entry).data.value == NULL)
#define EntryIsDeleted(entry) ((entry).data.value == (ir_node*)-1)
#define hashset_init ir_valueset_init
#define hashset_init_size ir_valueset_init_size
#define hashset_destroy ir_valueset_destroy
-#define hashset_insert _ir_valueset_insert
+ir_valueset_entry_t *ir_valueset_insert_(ir_valueset_t *self, ir_node *value);
+#define hashset_insert ir_valueset_insert_
#define hashset_remove ir_valueset_remove
-#define hashset_find _ir_valueset_find
+ir_valueset_entry_t *ir_valueset_find_(const ir_valueset_t *self,
+ const ir_node *value);
+#define hashset_find ir_valueset_find_
#define hashset_size ir_valueset_size
#define ADDITIONAL_INIT INIT_LIST_HEAD(&self->elem_list); INIT_LIST_HEAD(&self->all_iters);
#define ADDITIONAL_TERM INIT_LIST_HEAD(&self->elem_list); INIT_LIST_HEAD(&self->all_iters);
-#define NO_ITERATOR
#define HAVE_OWN_RESIZE
-#include "hashset.c"
+#include "hashset.c.inl"
/**
* Resize the hashset
* @internal
*/
-static INLINE
-void resize(HashSet *self, size_t new_size)
+static void resize(HashSet *self, size_t new_size)
{
- size_t num_buckets = self->num_buckets;
HashSetEntry *old_entries = self->entries;
HashSetEntry *new_entries;
list_head list = self->elem_list;
- ValueType *entry;
int res = 1;
/* allocate a new array with double size */
int ir_valueset_insert(ir_valueset_t *valueset, ir_node *value, ir_node *expr)
{
- ir_valueset_entry_t *entry = _ir_valueset_insert(valueset, value);
+ ir_valueset_entry_t *entry = ir_valueset_insert_(valueset, value);
if (entry->list.next != NULL) {
/* this value is already inserted, do nothing */
int ir_valueset_replace(ir_valueset_t *valueset, ir_node *value, ir_node *expr)
{
int res = 0;
- ir_valueset_entry_t *entry = _ir_valueset_insert(valueset, value);
+ ir_valueset_entry_t *entry = ir_valueset_insert_(valueset, value);
if (entry->expr != expr) {
entry->expr = expr;
void *ir_valueset_lookup(const ir_valueset_t *valueset, const ir_node *value)
{
- ir_valueset_entry_t *entry = _ir_valueset_find(valueset, value);
+ ir_valueset_entry_t *entry = ir_valueset_find_(valueset, value);
if (entry != NULL)
return entry->expr;
return NULL;
}
void ir_valueset_iterator_init(ir_valueset_iterator_t *iterator,
- const ir_valueset_t *valueset) {
+ const ir_valueset_t *valueset)
+{
iterator->iter = valueset->elem_list.next;
iterator->valueset = valueset;
}
-ir_node *ir_valueset_iterator_next(ir_valueset_iterator_t *iterator, ir_node **expr) {
+ir_node *ir_valueset_iterator_next(ir_valueset_iterator_t *iterator, ir_node **expr)
+{
ir_valueset_entry_t *entry;
if (iterator->iter == &iterator->valueset->elem_list) {
return entry->value;
}
-void ir_valueset_remove_iterator(ir_valueset_t *valueset, ir_valueset_iterator_t *iterator) {
- ir_valueset_entry_t *rem = list_entry(iterator->iter, ir_valueset_entry_t, list);
-
- iterator->iter = rem->list.prev;
+void ir_valueset_remove_iterator(ir_valueset_t *valueset, ir_valueset_iterator_t *iterator)
+{
+ ir_valueset_entry_t *rem = list_entry(iterator->iter->prev, ir_valueset_entry_t, list);
ir_valueset_remove(valueset, rem->value);
}