diff options
author | Brian Aker <brian@tangent.org> | 2011-10-02 11:02:19 -0700 |
---|---|---|
committer | Brian Aker <brian@tangent.org> | 2011-10-02 11:02:19 -0700 |
commit | fee8381b6b80398fcb6893860400ead6a598f15b (patch) | |
tree | 8e3b1f916f4586412615a48b02390e511a68a601 /libhashkit-1.0 | |
parent | 000909672d7d6337c2115a9f263d22e39a28917c (diff) | |
download | libmemcached-fee8381b6b80398fcb6893860400ead6a598f15b.tar.gz |
Create version 1.0 directory structure.
Diffstat (limited to 'libhashkit-1.0')
-rw-r--r-- | libhashkit-1.0/algorithm.h | 85 | ||||
-rw-r--r-- | libhashkit-1.0/behavior.h | 23 | ||||
-rw-r--r-- | libhashkit-1.0/configure.h.in | 17 | ||||
-rw-r--r-- | libhashkit-1.0/digest.h | 27 | ||||
-rw-r--r-- | libhashkit-1.0/function.h | 41 | ||||
-rw-r--r-- | libhashkit-1.0/has.h | 48 | ||||
-rw-r--r-- | libhashkit-1.0/hashkit.h | 93 | ||||
-rw-r--r-- | libhashkit-1.0/hashkit.hpp | 97 | ||||
-rw-r--r-- | libhashkit-1.0/include.am | 19 | ||||
-rw-r--r-- | libhashkit-1.0/str_algorithm.h | 48 | ||||
-rw-r--r-- | libhashkit-1.0/strerror.h | 20 | ||||
-rw-r--r-- | libhashkit-1.0/types.h | 96 | ||||
-rw-r--r-- | libhashkit-1.0/visibility.h | 48 |
13 files changed, 662 insertions, 0 deletions
diff --git a/libhashkit-1.0/algorithm.h b/libhashkit-1.0/algorithm.h new file mode 100644 index 00000000..fa5f3ae5 --- /dev/null +++ b/libhashkit-1.0/algorithm.h @@ -0,0 +1,85 @@ +/* HashKit + * Copyright (C) 2009 Brian Aker + * All rights reserved. + * + * Use and distribution licensed under the BSD license. See + * the COPYING file in the parent directory for full text. + */ + +/** + * @file + * @brief HashKit Header + */ + +#pragma once + +#ifdef __cplusplus +extern "C" { +#endif + +HASHKIT_API +uint32_t libhashkit_one_at_a_time(const char *key, size_t key_length); + +HASHKIT_API +uint32_t libhashkit_fnv1_64(const char *key, size_t key_length); + +HASHKIT_API +uint32_t libhashkit_fnv1a_64(const char *key, size_t key_length); + +HASHKIT_API +uint32_t libhashkit_fnv1_32(const char *key, size_t key_length); + +HASHKIT_API +uint32_t libhashkit_fnv1a_32(const char *key, size_t key_length); + +HASHKIT_API +uint32_t libhashkit_crc32(const char *key, size_t key_length); + +HASHKIT_API +uint32_t libhashkit_hsieh(const char *key, size_t key_length); + +HASHKIT_API +uint32_t libhashkit_murmur(const char *key, size_t key_length); + +HASHKIT_API +uint32_t libhashkit_jenkins(const char *key, size_t key_length); + +HASHKIT_API +uint32_t libhashkit_md5(const char *key, size_t key_length); + +HASHKIT_LOCAL +uint32_t hashkit_one_at_a_time(const char *key, size_t key_length, void *context); + +HASHKIT_LOCAL +uint32_t hashkit_fnv1_64(const char *key, size_t key_length, void *context); + +HASHKIT_LOCAL +uint32_t hashkit_fnv1a_64(const char *key, size_t key_length, void *context); + +HASHKIT_LOCAL +uint32_t hashkit_fnv1_32(const char *key, size_t key_length, void *context); + +HASHKIT_LOCAL +uint32_t hashkit_fnv1a_32(const char *key, size_t key_length, void *context); + +HASHKIT_LOCAL +uint32_t hashkit_crc32(const char *key, size_t key_length, void *context); + +HASHKIT_LOCAL +uint32_t hashkit_hsieh(const char *key, size_t key_length, void *context); + +HASHKIT_LOCAL +uint32_t hashkit_murmur(const char *key, size_t key_length, void *context); + +HASHKIT_LOCAL +uint32_t hashkit_jenkins(const char *key, size_t key_length, void *context); + +HASHKIT_LOCAL +uint32_t hashkit_md5(const char *key, size_t key_length, void *context); + +HASHKIT_API +void libhashkit_md5_signature(const unsigned char *key, size_t length, unsigned char *result); + +#ifdef __cplusplus +} +#endif diff --git a/libhashkit-1.0/behavior.h b/libhashkit-1.0/behavior.h new file mode 100644 index 00000000..0fb22588 --- /dev/null +++ b/libhashkit-1.0/behavior.h @@ -0,0 +1,23 @@ +/* HashKit + * Copyright (C) 2009 Brian Aker + * All rights reserved. + * + * Use and distribution licensed under the BSD license. See + * the COPYING file in the parent directory for full text. + */ + +/** + * @file + * @brief HashKit Header + */ + +#pragma once + +#ifdef __cplusplus +extern "C" { +#endif + + +#ifdef __cplusplus +} +#endif diff --git a/libhashkit-1.0/configure.h.in b/libhashkit-1.0/configure.h.in new file mode 100644 index 00000000..8aec3865 --- /dev/null +++ b/libhashkit-1.0/configure.h.in @@ -0,0 +1,17 @@ +/* HashKit + * Copyright (C) 2009-2010 Brian Aker + * All rights reserved. + * + * Use and distribution licensed under the BSD license. See + * the COPYING file in the parent directory for full text. + */ + +#pragma once + +#ifdef __cplusplus +extern "C" { +#endif + +#ifdef __cplusplus +} +#endif diff --git a/libhashkit-1.0/digest.h b/libhashkit-1.0/digest.h new file mode 100644 index 00000000..5a226b01 --- /dev/null +++ b/libhashkit-1.0/digest.h @@ -0,0 +1,27 @@ +/* HashKit + * Copyright (C) 2010 Brian Aker + * All rights reserved. + * + * Use and distribution licensed under the BSD license. See + * the COPYING file in the parent directory for full text. + */ + +#pragma once + +#ifdef __cplusplus +extern "C" { +#endif + +HASHKIT_API +uint32_t hashkit_digest(const hashkit_st *self, const char *key, size_t key_length); + +/** + This is a utilitly function provided so that you can directly access hashes with a hashkit_st. +*/ + +HASHKIT_API +uint32_t libhashkit_digest(const char *key, size_t key_length, hashkit_hash_algorithm_t hash_algorithm); + +#ifdef __cplusplus +} +#endif diff --git a/libhashkit-1.0/function.h b/libhashkit-1.0/function.h new file mode 100644 index 00000000..215d978b --- /dev/null +++ b/libhashkit-1.0/function.h @@ -0,0 +1,41 @@ +/* HashKit + * Copyright (C) 2010 Brian Aker + * All rights reserved. + * + * Use and distribution licensed under the BSD license. See + * the COPYING file in the parent directory for full text. + */ + +#pragma once + +#ifdef __cplusplus +extern "C" { +#endif + +/** + This sets/gets the default function we will be using. +*/ +HASHKIT_API +hashkit_return_t hashkit_set_function(hashkit_st *hash, hashkit_hash_algorithm_t hash_algorithm); + +HASHKIT_API +hashkit_return_t hashkit_set_custom_function(hashkit_st *hash, hashkit_hash_fn function, void *context); + +HASHKIT_API +hashkit_hash_algorithm_t hashkit_get_function(const hashkit_st *hash); + +/** + This sets/gets the function we use for distribution. +*/ +HASHKIT_API +hashkit_return_t hashkit_set_distribution_function(hashkit_st *hash, hashkit_hash_algorithm_t hash_algorithm); + +HASHKIT_API +hashkit_return_t hashkit_set_custom_distribution_function(hashkit_st *self, hashkit_hash_fn function, void *context); + +HASHKIT_API +hashkit_hash_algorithm_t hashkit_get_distribution_function(const hashkit_st *self); + +#ifdef __cplusplus +} +#endif diff --git a/libhashkit-1.0/has.h b/libhashkit-1.0/has.h new file mode 100644 index 00000000..8975c7a8 --- /dev/null +++ b/libhashkit-1.0/has.h @@ -0,0 +1,48 @@ +/* vim:expandtab:shiftwidth=2:tabstop=2:smarttab: + * + * Libmemcached library + * + * Copyright (C) 2011 Data Differential, http://datadifferential.com/ + * + * 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. + * + * * The names of its contributors may not be used to endorse or + * promote products derived from this software without specific prior + * written permission. + * + * 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. + * + */ + +#pragma once + +#ifdef __cplusplus +extern "C" { +#endif + +HASHKIT_API +bool libhashkit_has_algorithm(const hashkit_hash_algorithm_t); + +#ifdef __cplusplus +} +#endif diff --git a/libhashkit-1.0/hashkit.h b/libhashkit-1.0/hashkit.h new file mode 100644 index 00000000..97af9866 --- /dev/null +++ b/libhashkit-1.0/hashkit.h @@ -0,0 +1,93 @@ +/* vim:expandtab:shiftwidth=2:tabstop=2:smarttab: + * + * HashKit library + * + * Copyright (C) 2011 Data Differential, http://datadifferential.com/ + * Copyright (C) 2009-2010 Brian Aker All rights reserved. + * + * 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. + * + * * The names of its contributors may not be used to endorse or + * promote products derived from this software without specific prior + * written permission. + * + * 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. + * + */ + + +#pragma once + + +#if !defined(__cplusplus) +# include <stdbool.h> +#endif +#include <inttypes.h> +#include <sys/types.h> + +#include <libhashkit-1.0/visibility.h> +#include <libhashkit-1.0/configure.h> +#include <libhashkit-1.0/types.h> +#include <libhashkit-1.0/has.h> +#include <libhashkit-1.0/algorithm.h> +#include <libhashkit-1.0/behavior.h> +#include <libhashkit-1.0/digest.h> +#include <libhashkit-1.0/function.h> +#include <libhashkit-1.0/str_algorithm.h> +#include <libhashkit-1.0/strerror.h> + +struct hashkit_st +{ + struct hashkit_function_st { + hashkit_hash_fn function; + void *context; + } base_hash, distribution_hash; + + struct { + bool is_base_same_distributed:1; + } flags; + + struct { + bool is_allocated:1; + } options; +}; + +#ifdef __cplusplus +extern "C" { +#endif + +HASHKIT_API +hashkit_st *hashkit_create(hashkit_st *hash); + +HASHKIT_API +hashkit_st *hashkit_clone(hashkit_st *destination, const hashkit_st *ptr); + +HASHKIT_API +bool hashkit_compare(const hashkit_st *first, const hashkit_st *second); + +HASHKIT_API +void hashkit_free(hashkit_st *hash); + +#ifdef __cplusplus +} // extern "C" +#endif diff --git a/libhashkit-1.0/hashkit.hpp b/libhashkit-1.0/hashkit.hpp new file mode 100644 index 00000000..7ead63d0 --- /dev/null +++ b/libhashkit-1.0/hashkit.hpp @@ -0,0 +1,97 @@ +/* vim:expandtab:shiftwidth=2:tabstop=2:smarttab: + * + * Libmemcached library + * + * Copyright (C) 2011 Data Differential, http://datadifferential.com/ + * Copyright (C) 2006-2009 Brian Aker All rights reserved. + * + * 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. + * + * * The names of its contributors may not be used to endorse or + * promote products derived from this software without specific prior + * written permission. + * + * 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. + * + */ + +#pragma once + +#include <libhashkit/hashkit.h> +#include <string> + +class Hashkit { + +public: + + Hashkit() + { + hashkit_create(&self); + } + + Hashkit(const Hashkit& source) + { + hashkit_clone(&self, &source.self); + } + + Hashkit& operator=(const Hashkit& source) + { + hashkit_free(&self); + hashkit_clone(&self, &source.self); + + return *this; + } + + friend bool operator==(const Hashkit &left, const Hashkit &right) + { + return hashkit_compare(&left.self, &right.self); + } + + uint32_t digest(std::string& str) + { + return hashkit_digest(&self, str.c_str(), str.length()); + } + + uint32_t digest(const char *key, size_t key_length) + { + return hashkit_digest(&self, key, key_length); + } + + hashkit_return_t set_function(hashkit_hash_algorithm_t hash_algorithm) + { + return hashkit_set_function(&self, hash_algorithm); + } + + hashkit_return_t set_distribution_function(hashkit_hash_algorithm_t hash_algorithm) + { + return hashkit_set_function(&self, hash_algorithm); + } + + ~Hashkit() + { + hashkit_free(&self); + } +private: + + hashkit_st self; +}; diff --git a/libhashkit-1.0/include.am b/libhashkit-1.0/include.am new file mode 100644 index 00000000..b9f7da0d --- /dev/null +++ b/libhashkit-1.0/include.am @@ -0,0 +1,19 @@ +# vim:ft=automake +# included from Top Level Makefile.am +# All paths should be given relative to the root +# + +nobase_include_HEADERS+= \ + libhashkit-1.0/algorithm.h \ + libhashkit-1.0/behavior.h \ + libhashkit-1.0/configure.h \ + libhashkit-1.0/digest.h \ + libhashkit-1.0/function.h \ + libhashkit-1.0/has.h \ + libhashkit-1.0/hashkit.h \ + libhashkit-1.0/hashkit.hpp \ + libhashkit-1.0/strerror.h \ + libhashkit-1.0/str_algorithm.h \ + libhashkit-1.0/types.h \ + libhashkit-1.0/visibility.h + diff --git a/libhashkit-1.0/str_algorithm.h b/libhashkit-1.0/str_algorithm.h new file mode 100644 index 00000000..bb05eb51 --- /dev/null +++ b/libhashkit-1.0/str_algorithm.h @@ -0,0 +1,48 @@ +/* vim:expandtab:shiftwidth=2:tabstop=2:smarttab: + * + * HashKit + * + * Copyright (C) 2011 Data Differential, http://datadifferential.com/ + * + * 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. + * + * * The names of its contributors may not be used to endorse or + * promote products derived from this software without specific prior + * written permission. + * + * 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. + * + */ + +#pragma once + +#ifdef __cplusplus +extern "C" { +#endif + +HASHKIT_API +const char *libhashkit_string_hash(hashkit_hash_algorithm_t type); + +#ifdef __cplusplus +} +#endif diff --git a/libhashkit-1.0/strerror.h b/libhashkit-1.0/strerror.h new file mode 100644 index 00000000..0785f0cc --- /dev/null +++ b/libhashkit-1.0/strerror.h @@ -0,0 +1,20 @@ +/* HashKit + * Copyright (C) 2009 Brian Aker + * All rights reserved. + * + * Use and distribution licensed under the BSD license. See + * the COPYING file in the parent directory for full text. + */ + +#pragma once + +#ifdef __cplusplus +extern "C" { +#endif + +HASHKIT_API + const char *hashkit_strerror(hashkit_st *ptr, hashkit_return_t rc); + +#ifdef __cplusplus +} +#endif diff --git a/libhashkit-1.0/types.h b/libhashkit-1.0/types.h new file mode 100644 index 00000000..e0f1f138 --- /dev/null +++ b/libhashkit-1.0/types.h @@ -0,0 +1,96 @@ +/* vim:expandtab:shiftwidth=2:tabstop=2:smarttab: + * + * HashKit + * + * Copyright (C) 2011 Data Differential, http://datadifferential.com/ + * Copyright (C) 2009 Brian Aker All rights reserved. + * + * 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. + * + * * The names of its contributors may not be used to endorse or + * promote products derived from this software without specific prior + * written permission. + * + * 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. + * + */ + + +#pragma once + +typedef enum { + HASHKIT_SUCCESS, + HASHKIT_FAILURE, + HASHKIT_MEMORY_ALLOCATION_FAILURE, + HASHKIT_INVALID_HASH, + HASHKIT_INVALID_ARGUMENT, + HASHKIT_MAXIMUM_RETURN /* Always add new error code before */ +} hashkit_return_t; + +static inline bool hashkit_success(const hashkit_return_t rc) +{ + return (rc == HASHKIT_SUCCESS); +} + +static inline bool hashkit_failed(const hashkit_return_t rc) +{ + return (rc != HASHKIT_SUCCESS); +} + +typedef enum { + HASHKIT_HASH_DEFAULT= 0, // hashkit_one_at_a_time() + HASHKIT_HASH_MD5, + HASHKIT_HASH_CRC, + HASHKIT_HASH_FNV1_64, + HASHKIT_HASH_FNV1A_64, + HASHKIT_HASH_FNV1_32, + HASHKIT_HASH_FNV1A_32, + HASHKIT_HASH_HSIEH, + HASHKIT_HASH_MURMUR, + HASHKIT_HASH_JENKINS, + HASHKIT_HASH_CUSTOM, + HASHKIT_HASH_MAX +} hashkit_hash_algorithm_t; + +/** + * Hash distributions that are available to use. + */ +typedef enum +{ + HASHKIT_DISTRIBUTION_MODULA, + HASHKIT_DISTRIBUTION_RANDOM, + HASHKIT_DISTRIBUTION_KETAMA, + HASHKIT_DISTRIBUTION_MAX /* Always add new values before this. */ +} hashkit_distribution_t; + +#ifdef __cplusplus +extern "C" { +#endif + +typedef struct hashkit_st hashkit_st; + +typedef uint32_t (*hashkit_hash_fn)(const char *key, size_t key_length, void *context); + +#ifdef __cplusplus +} +#endif diff --git a/libhashkit-1.0/visibility.h b/libhashkit-1.0/visibility.h new file mode 100644 index 00000000..b8f194c5 --- /dev/null +++ b/libhashkit-1.0/visibility.h @@ -0,0 +1,48 @@ +/* + * Summary: interface for HashKit functions + * Description: visibitliy macros for HashKit library + * + * Use and distribution licensed under the BSD license. See + * the COPYING file in this directory for full text. + * + * Author: Monty Taylor + */ + +/** + * @file + * @brief Visibility control macros + */ + +#pragma once + +/** + * + * HASHKIT_API is used for the public API symbols. It either DLL imports or + * DLL exports (or does nothing for static build). + * + * HASHKIT_LOCAL is used for non-api symbols. + */ + +#if defined(BUILDING_HASHKIT) +# if defined(HAVE_VISIBILITY) && HAVE_VISIBILITY +# define HASHKIT_API __attribute__ ((visibility("default"))) +# define HASHKIT_LOCAL __attribute__ ((visibility("hidden"))) +# elif defined (__SUNPRO_C) && (__SUNPRO_C >= 0x550) +# define HASHKIT_API __global +# define HASHKIT_LOCAL __hidden +# elif defined(_MSC_VER) +# define HASHKIT_API extern __declspec(dllexport) +# define HASHKIT_LOCAL +# else +# define HASHKIT_API +# define HASHKIT_LOCAL +# endif /* defined(HAVE_VISIBILITY) */ +#else /* defined(BUILDING_HASHKIT) */ +# if defined(_MSC_VER) +# define HASHKIT_API extern __declspec(dllimport) +# define HASHKIT_LOCAL +# else +# define HASHKIT_API +# define HASHKIT_LOCAL +# endif /* defined(_MSC_VER) */ +#endif /* defined(BUILDING_HASHKIT) */ |