* @file
* @author Michael Beck
* @brief A value set, containing expression for values.
- * @version $Id$
*/
#include "config.h"
#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
-void resize(HashSet *self, size_t new_size)
+static void resize(HashSet *self, size_t new_size)
{
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_set_link(const ir_valueset_t *valueset, const ir_node *value, void *link)
+{
+ ir_valueset_entry_t *entry = ir_valueset_find_(valueset, value);
+ assert(entry);
+ entry->link = link;
+}
+
+void *ir_valueset_get_link(const ir_valueset_t *valueset, const ir_node *value)
+{
+ ir_valueset_entry_t *entry = ir_valueset_find_(valueset, value);
+ assert(entry);
+ return entry->link;
+}
+
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;
}