cpset.c 2.49 KB
Newer Older
1
/*
Michael Beck's avatar
Michael Beck committed
2
 * Copyright (C) 1995-2008 University of Karlsruhe.  All right reserved.
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
 *
 * 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   Custom pointer set
 * @author  Matthias Braun
 * @version $Id$
 *
 * This implements a set of pointers which allows to specify custom callbacks
27
 * for comparing and hashing its elements.
28
 */
29
#include "config.h"
Matthias Braun's avatar
Matthias Braun committed
30
31
32
33
34
35
36
37
38

#include "cpset.h"

#define HashSet                   cpset_t
#define HashSetIterator           cpset_iterator_t
#define HashSetEntry              cpset_hashset_entry_t
#define ValueType                 void*
#define NullValue                 NULL
#define DeletedValue              ((void*)-1)
Matthias Braun's avatar
Matthias Braun committed
39
#define Hash(this,key)            this->hash_function(key)
Matthias Braun's avatar
Matthias Braun committed
40
#define KeysEqual(this,key1,key2) this->cmp_function(key1, key2)
Matthias Braun's avatar
Matthias Braun committed
41
#define SCALAR_RETURN
Matthias Braun's avatar
Matthias Braun committed
42
43
#define SetRangeEmpty(ptr,size)   memset(ptr, 0, (size) * sizeof(cpset_hashset_entry_t))

44
45
46
47
void cpset_init_(cpset_t *self);
#define hashset_init            cpset_init_
void cpset_init_size_(cpset_t *self, size_t expected_elems);
#define hashset_init_size       cpset_init_size_
Matthias Braun's avatar
Matthias Braun committed
48
49
50
51
52
53
54
55
56
57
58
#define hashset_destroy         cpset_destroy
#define hashset_insert          cpset_insert
#define hashset_remove          cpset_remove
#define hashset_find            cpset_find
#define hashset_size            cpset_size
#define hashset_iterator_init   cpset_iterator_init
#define hashset_iterator_next   cpset_iterator_next
#define hashset_remove_iterator cpset_remove_iterator

#include "hashset.c"

59
void cpset_init(cpset_t *this_, cpset_hash_function hash_function,
Matthias Braun's avatar
Matthias Braun committed
60
61
                cpset_cmp_function cmp_function)
{
62
63
64
	this_->hash_function = hash_function;
	this_->cmp_function = cmp_function;
	cpset_init_(this_);
Matthias Braun's avatar
Matthias Braun committed
65
66
}

67
void cpset_init_size(cpset_t *this_, cpset_hash_function hash_function,
Matthias Braun's avatar
Matthias Braun committed
68
69
                     cpset_cmp_function cmp_function, size_t expected_elems)
{
70
71
72
	this_->hash_function = hash_function;
	this_->cmp_function = cmp_function;
	cpset_init_size_(this_, expected_elems);
Matthias Braun's avatar
Matthias Braun committed
73
}