added a callback function to check whether a given entity is a allocation call
[libfirm] / ir / adt / eset.h
index be85ff6..60284fd 100644 (file)
@@ -1,62 +1,76 @@
 /*
- * Project:     libFIRM
- * File name:   ir/adt/eset.h
- * Purpose:     Datentyp: Vereinfachte Menge (hash-set) zum Speichern von
- *              Zeigern/Adressen.
- * Author:      Hubert Schmid
- * Modified by:
- * Created:     09.06.2002
- * CVS-ID:      $Id$
- * Copyright:   (c) 2002 Universität Karlsruhe
- * Licence:     This file protected by GPL -  GNU GENERAL PUBLIC LICENSE.
+ * Copyright (C) 1995-2007 University of Karlsruhe.  All right reserved.
+ *
+ * This file is part of libFirm.
+ *
+ * This file may be distributed and/or modified under the terms of the
+ * GNU General Public License version 2 as published by the Free Software
+ * Foundation and appearing in the file LICENSE.GPL included in the
+ * packaging of this file.
+ *
+ * Licensees holding valid libFirm Professional Edition licenses may use
+ * this file in accordance with the libFirm Commercial License.
+ * Agreement provided with the Software.
+ *
+ * This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
+ * WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+ * PURPOSE.
  */
 
+/**
+ * @file
+ * @brief       a pointer hashset (WARNING: deprecated, use hashset_new.*
+ *              instead)
+ * @author      Hubert Schmid
+ * @date        09.06.2002
+ * @version     $Id$
+ */
+#ifndef FIRM_ADT_ESET_H
+#define FIRM_ADT_ESET_H
 
-#ifndef _ESET_H_
-#define _ESET_H_
-
-#include <stdbool.h>
-
-
-/* "eset" ist eine Menge von Adressen. Der Vergleich und das Hashen
- * wird über die Adresse gemacht. "NULL" sollte nicht gespeichert
- * werden. */
-
+/**
+ * "eset" is a set of addresses. The addresses are used for element
+ * compare and hash calculation.
+ * The value "NULL" can not be stored, as it is used as internal sentinel.
+ */
 typedef struct eset eset;
 
+/** Creates a new empty set. */
+eset *eset_create(void);
 
-/* Erzeugt eine neue leere Menge. */
-eset * eset_create(void);
+/**
+ * Creates a copy of the given set. Does NOT work if NULL is contained in source. */
+eset *eset_copy(eset *source);
 
-/* Erzeugt eine Kopie der übergebenen Menge. Das Kopieren funktioniert
- * nur, wenn in der übergebenen Menge "NULL" nicht enthalten ist. */
-eset * eset_copy(eset *);
+/** Deletes a set. */
+void eset_destroy(eset *s);
 
-/* Löscht die Menge. */
-void eset_destroy(eset *);
+/** Returns the number of elements in the set. */
+int eset_count(eset *s);
 
-/* Fügt ein Adresse in die Menge ein, wenn es nicht bereits in der
- * Menge enthalten ist. */
-void eset_insert(eset *, void *);
+/** Inserts an address into the set. */
+void eset_insert(eset *s, void *p);
 
-/* Prüft ob eine Adresse in der Menge enthalten ist. */
-bool eset_contains(eset *, void *);
+/** Checks, whether an address is element of a set. */
+int eset_contains(eset *s, void *p);
 
-/* Mit den Funktionen "eset_first" und "eset_next" kann man durch die
- * Menge iterieren. Die Funktion gibt jeweils die Adresse zurück. Wenn
- * keine weiteren Adressen in der Menge sind, geben die Funktionen
- * "NULL" zurück. Warnung: Man sollte deshalb "NULL" nicht in der
- * Menge speichern, weil man sonst nicht durch die Menge iterieren
- * kann.
- * ACHTUNG: Waehrend dem iterieren darf man keine neuen Elemente
- * einfuergen!! */
-void * eset_first(eset *);
-void * eset_next(eset *);
+/**
+ * Starts the iteration over a set and returns the first element or NULL
+ * if the set is empty.
+ *
+ * @note: It is NOT possible to add new elements while iterating through a set.
+ */
+void *eset_first(eset *s);
 
-/* Fügt alle Elemente der Menge "source" der Menge "target"
- * hinzu. Diese Funktion funktioniert nur, wenn in der Menge "source"
- * die "NULL"-Adresse nicht enthalten ist. */
-void eset_insert_all(eset * target, eset * source);
+/**
+ * Continues iteration through a set and returns the next element or NULL if the
+ * iteration is finished.
+ *
+ * @note: It is NOT possible to add new elements while iterating through a set.
+ */
+void *eset_next(eset *s);
 
+/** Inserts all elements of source into target (union).  Does NOT work if NULL is contained in source. */
+void eset_insert_all(eset *target, eset *source);
 
-#endif /* _ESET_H_ */
+#endif