/*
- * Copyright (C) 1995-2007 University of Karlsruhe. All right reserved.
+ * Copyright (C) 1995-2008 University of Karlsruhe. All right reserved.
*
* This file is part of libFirm.
*
* @date 30.03.2007
* @brief A nodeset. This should be prefered over a simple pset, because it
* tries to guarantee deterministic behavior. (and is faster)
- * @version $Id$
* @note Actually the bits to make the behaviour deterministic are not
* implemented yet...
*/
#ifndef _FIRM_IRNODESET_H_
#define _FIRM_IRNODESET_H_
+#include <stdbool.h>
#include "firm_types.h"
#include "xmalloc.h"
#define HashSetIterator ir_nodeset_iterator_t
#define ValueType ir_node*
#define DO_REHASH
+
#include "hashset.h"
+
#undef DO_REHASH
#undef ValueType
#undef HashSetIterator
* @param expected_elements Number of elements expected in the nodeset (roughly)
* @return The initialized nodeset
*/
-static INLINE ir_nodeset_t *ir_nodeset_new(size_t expected_elements) {
- ir_nodeset_t *res = xmalloc(sizeof(*res));
+static inline ir_nodeset_t *ir_nodeset_new(size_t expected_elements) {
+ ir_nodeset_t *res = XMALLOC(ir_nodeset_t);
ir_nodeset_init_size(res, expected_elements);
return res;
}
/**
* Destroys a nodeset and frees the memory of the nodeset itself.
*/
-static INLINE void ir_nodeset_del(ir_nodeset_t *nodeset) {
+static inline void ir_nodeset_del(ir_nodeset_t *nodeset) {
ir_nodeset_destroy(nodeset);
xfree(nodeset);
}
*
* @param nodeset Pointer to the nodeset
* @param node node to insert into the nodeset
- * @returns 1 if the element has been inserted,
- * 0 if it was already there
+ * @returns true if the element has been inserted,
+ * false if it was already there
*/
-int ir_nodeset_insert(ir_nodeset_t *nodeset, ir_node *node);
+bool ir_nodeset_insert(ir_nodeset_t *nodeset, ir_node *node);
+
/**
* Removes a node from a nodeset. Does nothing if the nodeset doesn't contain
*
* @param nodeset Pointer to the nodeset
* @param node The pointer to find
- * @returns 1 if nodeset contains the node, 0 else
*/
-int ir_nodeset_contains(const ir_nodeset_t *nodeset, const ir_node *node);
+bool ir_nodeset_contains(const ir_nodeset_t *nodeset, const ir_node *node);
/**
* Returns the number of pointers contained in the nodeset
void ir_nodeset_remove_iterator(ir_nodeset_t *nodeset,
const ir_nodeset_iterator_t *iterator);
+static inline ir_node *ir_nodeset_first(ir_nodeset_t const *const nodeset)
+{
+ ir_nodeset_iterator_t iter;
+ ir_nodeset_iterator_init(&iter, nodeset);
+ return ir_nodeset_iterator_next(&iter);
+}
+
#define foreach_ir_nodeset(nodeset, irn, iter) \
- for(ir_nodeset_iterator_init(&iter, nodeset), \
- irn = ir_nodeset_iterator_next(&iter); \
- irn != NULL; irn = ir_nodeset_iterator_next(&iter))
+ for (bool irn##__once = true; irn##__once;) \
+ for (ir_nodeset_iterator_t iter; irn##__once;) \
+ for (ir_node *irn; irn##__once; irn##__once = false) \
+ for (ir_nodeset_iterator_init(&iter, nodeset); (irn = ir_nodeset_iterator_next(&iter));)
#endif