diff options
Diffstat (limited to 'contrib/libobjc/objc/hash.h')
-rw-r--r-- | contrib/libobjc/objc/hash.h | 49 |
1 files changed, 29 insertions, 20 deletions
diff --git a/contrib/libobjc/objc/hash.h b/contrib/libobjc/objc/hash.h index 02aca6e..b1cdd0c 100644 --- a/contrib/libobjc/objc/hash.h +++ b/contrib/libobjc/objc/hash.h @@ -1,5 +1,5 @@ /* Hash tables for Objective C method dispatch. - Copyright (C) 1993, 1995, 1996 Free Software Foundation, Inc. + Copyright (C) 1993, 1995, 1996, 2004 Free Software Foundation, Inc. This file is part of GCC. @@ -15,8 +15,8 @@ GNU General Public License for more details. You should have received a copy of the GNU General Public License along with GCC; see the file COPYING. If not, write to -the Free Software Foundation, 59 Temple Place - Suite 330, -Boston, MA 02111-1307, USA. */ +the Free Software Foundation, 51 Franklin Street, Fifth Floor, +Boston, MA 02110-1301, USA. */ /* As a special exception, if you link this library with files compiled with GCC to produce an executable, this does not cause @@ -30,7 +30,11 @@ Boston, MA 02111-1307, USA. */ #include <stddef.h> #include <string.h> -#include <objc/objc.h> +#include "objc.h" + +#ifdef __cplusplus +extern "C" { +#endif /* __cplusplus */ /* * This data structure is used to hold items @@ -58,7 +62,7 @@ typedef struct cache_node * * Unfortunately there is a mutual data structure reference problem with this * typedef. Therefore, to remove compiler warnings the functions passed to - * hash_new will have to be casted to this type. + * objc_hash_new will have to be casted to this type. */ typedef unsigned int (*hash_func_type) (void *, const void *); @@ -107,25 +111,25 @@ extern cache_ptr module_hash_table, class_hash_table; /* Allocate and initialize a hash table. */ -cache_ptr hash_new (unsigned int size, - hash_func_type hash_func, - compare_func_type compare_func); +cache_ptr objc_hash_new (unsigned int size, + hash_func_type hash_func, + compare_func_type compare_func); /* Deallocate all of the hash nodes and the cache itself. */ -void hash_delete (cache_ptr cache); +void objc_hash_delete (cache_ptr cache); /* Add the key/value pair to the hash table. If the hash table reaches a level of fullness then it will be resized. assert if the key is already in the hash. */ -void hash_add (cache_ptr *cachep, const void *key, void *value); +void objc_hash_add (cache_ptr *cachep, const void *key, void *value); /* Remove the key/value pair from the hash table. assert if the key isn't in the table. */ -void hash_remove (cache_ptr cache, const void *key); +void objc_hash_remove (cache_ptr cache, const void *key); /* Used to index through the hash table. Start with NULL to get the first entry. @@ -136,15 +140,15 @@ void hash_remove (cache_ptr cache, const void *key); Cache nodes are returned such that key or value can be extracted. */ -node_ptr hash_next (cache_ptr cache, node_ptr node); +node_ptr objc_hash_next (cache_ptr cache, node_ptr node); /* Used to return a value from a hash table using a given key. */ -void *hash_value_for_key (cache_ptr cache, const void *key); +void *objc_hash_value_for_key (cache_ptr cache, const void *key); /* Used to determine if the given key exists in the hash table */ -BOOL hash_is_key_in_hash (cache_ptr cache, const void *key); +BOOL objc_hash_is_key_in_hash (cache_ptr cache, const void *key); /************************************************ @@ -159,7 +163,7 @@ BOOL hash_is_key_in_hash (cache_ptr cache, const void *key); except for those likely to be 0 due to alignment.) */ static inline unsigned int -hash_ptr (cache_ptr cache, const void *key) +objc_hash_ptr (cache_ptr cache, const void *key) { return ((size_t)key / sizeof (void *)) & cache->mask; } @@ -168,11 +172,11 @@ hash_ptr (cache_ptr cache, const void *key) /* Calculate a hash code by iterating over a NULL terminate string. */ static inline unsigned int -hash_string (cache_ptr cache, const void *key) +objc_hash_string (cache_ptr cache, const void *key) { unsigned int ret = 0; unsigned int ctr = 0; - const char *ckey = key; + const char *ckey = (const char *) key; while (*ckey) { ret ^= *ckey++ << ctr; @@ -185,7 +189,7 @@ hash_string (cache_ptr cache, const void *key) /* Compare two pointers for equality. */ static inline int -compare_ptrs (const void *k1, const void *k2) +objc_compare_ptrs (const void *k1, const void *k2) { return (k1 == k2); } @@ -193,15 +197,20 @@ compare_ptrs (const void *k1, const void *k2) /* Compare two strings. */ static inline int -compare_strings (const void *k1, const void *k2) +objc_compare_strings (const void *k1, const void *k2) { if (k1 == k2) return 1; else if (k1 == 0 || k2 == 0) return 0; else - return ! strcmp (k1, k2); + return ! strcmp ((const char *) k1, (const char *) k2); +} + + +#ifdef __cplusplus } +#endif /* __cplusplus */ #endif /* not __hash_INCLUDE_GNU */ |