X-Git-Url: http://nsz.repo.hu/git/?a=blobdiff_plain;f=ir%2Fadt%2Feset.c;h=6dd23a9011bcbf52b4051b53e1a0732819561166;hb=0d7e276e9033ffe7f5423d1018e00abb017b659f;hp=33ddd385c34eeb04f58b8b677e5a029531d7308b;hpb=1ab0f17a893cb796b8dd3f71408949eeb13d44b6;p=libfirm diff --git a/ir/adt/eset.c b/ir/adt/eset.c index 33ddd385c..6dd23a901 100644 --- a/ir/adt/eset.c +++ b/ir/adt/eset.c @@ -1,37 +1,41 @@ -/* ------------------------------------------------------------------- - * $Id$ - * ------------------------------------------------------------------- - * Datentyp: Vereinfachte Menge (hash-set) zum Speichern von - * Zeigern/Adressen. - * - * Erstellt: Hubert Schmid, 09.06.2002 - * ---------------------------------------------------------------- */ - +/* + * Project: libFIRM + * File name: ir/adt/eset.c + * 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. + */ #include "eset.h" - #include "set.h" - +#include "hashptr.h" struct eset { int dummy; /* dummy entry */ }; -static const int INITIAL_SLOTS = 64; +#define INITIAL_SLOTS 64 +static int pcmp(const void *p1, const void *p2, size_t size) { + const void **q1 = (const void **)p1; + const void **q2 = (const void **)p2; -static int pcmp(const void * * p1, const void * * p2, size_t size) { - return *p1 == *p2 ? 0 : 1; + return *q1 != *q2; } eset * eset_create(void) { - return (eset *) new_set((set_cmp_fun) pcmp, INITIAL_SLOTS); + return (eset *) new_set(pcmp, INITIAL_SLOTS); } -eset * eset_copy(eset * source) { +eset * eset_copy(eset *source) { eset * ret = eset_create(); void * p; for (p = eset_first(source); p; p = eset_next(source)) { @@ -41,37 +45,41 @@ eset * eset_copy(eset * source) { } -void eset_destroy(eset * s) { - del_set((set *) s); +void eset_destroy(eset *s) { + del_set((set *)s); } +/* Returns the number of elements in the set. */ +int eset_count(eset *s) { + return set_count((set *)s); +} -void eset_insert(eset * s, void * p) { +void eset_insert(eset *s, void *p) { if (!eset_contains(s, p)) { - set_insert((set *) s, &p, sizeof(void *), (unsigned) p); + set_insert((set *)s, &p, sizeof(p), HASH_PTR(p)); } } -bool eset_contains(eset * s, void * p) { - return set_find((set *) s, &p, sizeof(void *), (unsigned) p) != NULL; +int eset_contains(eset *s, void *p) { + return set_find((set *)s, &p, sizeof(p), HASH_PTR(p)) != NULL; } -void * eset_first(eset * s) { +void * eset_first(eset *s) { void * p = set_first((set *) s); - return p == NULL ? NULL : *((void * *) p); + return p == NULL ? NULL : *((void **)p); } void * eset_next(eset *s) { - void * p = set_next((set *) s); - return p == NULL ? NULL : *((void * *) p); + void *p = set_next((set *) s); + return p == NULL ? NULL : *((void **)p); } -void eset_insert_all(eset * target, eset * source) { - void * p; +void eset_insert_all(eset *target, eset *source) { + void *p; for (p = eset_first(source); p; p = eset_next(source)) { eset_insert(target, p); }