diff options
author | HyungKyu Song <hk76.song@samsung.com> | 2013-02-16 00:52:20 +0900 |
---|---|---|
committer | HyungKyu Song <hk76.song@samsung.com> | 2013-02-16 00:52:20 +0900 |
commit | e6c15f0e49b4ea41b5c5eb36457db0127ec901fc (patch) | |
tree | 996be9095a97ff2aac0d98963b6044d47a0ec60c /hashtbl.h | |
parent | 65c26d26fb72cec0d43d199c72ed27513d17f4c9 (diff) | |
download | nasm-e6c15f0e49b4ea41b5c5eb36457db0127ec901fc.tar.gz nasm-e6c15f0e49b4ea41b5c5eb36457db0127ec901fc.tar.bz2 nasm-e6c15f0e49b4ea41b5c5eb36457db0127ec901fc.zip |
Diffstat (limited to 'hashtbl.h')
-rw-r--r-- | hashtbl.h | 86 |
1 files changed, 86 insertions, 0 deletions
diff --git a/hashtbl.h b/hashtbl.h new file mode 100644 index 0000000..dd00ddb --- /dev/null +++ b/hashtbl.h @@ -0,0 +1,86 @@ +/* ----------------------------------------------------------------------- * + * + * Copyright 1996-2009 The NASM Authors - All Rights Reserved + * See the file AUTHORS included with the NASM distribution for + * the specific copyright holders. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following + * conditions are met: + * + * * Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * * Redistributions in binary form must reproduce the above + * copyright notice, this list of conditions and the following + * disclaimer in the documentation and/or other materials provided + * with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND + * CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, + * INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF + * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE + * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR + * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, + * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT + * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; + * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) + * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN + * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR + * OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, + * EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * ----------------------------------------------------------------------- */ + +/* + * hashtbl.h + * + * Efficient dictionary hash table class. + */ + +#ifndef NASM_HASHTBL_H +#define NASM_HASHTBL_H + +#include <inttypes.h> +#include <stddef.h> +#include "nasmlib.h" + +struct hash_tbl_node { + uint64_t hash; + const char *key; + void *data; +}; + +struct hash_table { + struct hash_tbl_node *table; + size_t load; + size_t size; + size_t max_load; +}; + +struct hash_insert { + uint64_t hash; + struct hash_table *head; + struct hash_tbl_node *where; +}; + +uint64_t crc64(uint64_t crc, const char *string); +uint64_t crc64i(uint64_t crc, const char *string); +#define CRC64_INIT UINT64_C(0xffffffffffffffff) + +/* Some reasonable initial sizes... */ +#define HASH_SMALL 4 +#define HASH_MEDIUM 16 +#define HASH_LARGE 256 + +void hash_init(struct hash_table *head, size_t size); +void **hash_find(struct hash_table *head, const char *string, + struct hash_insert *insert); +void **hash_findi(struct hash_table *head, const char *string, + struct hash_insert *insert); +void **hash_add(struct hash_insert *insert, const char *string, void *data); +void *hash_iterate(const struct hash_table *head, + struct hash_tbl_node **iterator, + const char **key); +void hash_free(struct hash_table *head); + +#endif /* NASM_HASHTBL_H */ |