X-Git-Url: http://git.madism.org/?p=apps%2Fmadmutt.git;a=blobdiff_plain;f=lib-lib%2Fhash.h;fp=lib-lib%2Fhash.h;h=3fdba2142b77b2829542dfc3e78999af440ad55e;hp=0000000000000000000000000000000000000000;hb=3e611c4b53a33408955152e1c9336f8643ea096e;hpb=21595f98b7c8132f99abb9fee60ecdce31fc980f diff --git a/lib-lib/hash.h b/lib-lib/hash.h new file mode 100644 index 0000000..3fdba21 --- /dev/null +++ b/lib-lib/hash.h @@ -0,0 +1,58 @@ +/* + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or (at + * your option) any later version. + * + * This program is distributed in the hope that it will be useful, but + * WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, + * MA 02110-1301, USA. + * + * Copyright © 2006 Pierre Habouzit + */ + +/* + * Copyright notice from original mutt: + * Copyright (C) 1996-2000 Michael R. Elkins + */ + +#ifndef MUTT_LIB_LIB_HASH_H +#define MUTT_LIB_LIB_HASH_H + +struct hash_elem { + const char *key; + void *data; + struct hash_elem *next; +}; + +typedef struct { + int nelem, curnelem; + struct hash_elem **table; +} HASH; + +#define hash_find(table, key) \ + hash_find_hash(table, hash_string((unsigned char *)key, table->nelem), key) + +#define hash_delete(table,key,data,destroy) \ + hash_delete_hash(table, hash_string((unsigned char *)key, table->nelem), key, data, destroy) + +HASH *hash_create(int nelem); +int hash_string(const unsigned char *s, int n); +int hash_insert(HASH *table, const char *key, void *data, int allow_dup); +HASH *hash_resize(HASH *table, int nelem); +void *hash_find_hash(const HASH *table, int hash, const char *key); +void hash_delete_hash(HASH *table, int hash, const char *key, + const void *data, void (*destroy)(void *)); +void hash_destroy(HASH **hash, void (*destroy)(void *)); + +void hash_map(HASH *table, + void (*mapfunc)(const char *key, void *data, unsigned long more), + unsigned long more); + +#endif /* MUTT_LIB_LIB_HASH_H */