diff options
Diffstat (limited to 'include')
-rw-r--r-- | include/memcached/engine.h | 33 | ||||
-rw-r--r-- | include/memcached/genhash.h | 256 |
2 files changed, 28 insertions, 261 deletions
diff --git a/include/memcached/engine.h b/include/memcached/engine.h index c42daa2..08c2b74 100644 --- a/include/memcached/engine.h +++ b/include/memcached/engine.h @@ -380,19 +380,42 @@ extern "C" { void (*reset_stats)(ENGINE_HANDLE* handle, const void *cookie); /** - * Get an array of per-thread stats. Set to NULL if you don't need it. + * Get an array of per-thread stats. This allows the engine to + * keep separate stats per cookie. Your implementation of this + * callback <b>must</b> return a memory area returned from the + * server API's new_stats. If all of your connections belong + * to the same "stats pool" you should set this callback to + * NULL. + * + * @param handle the engine handle + * @param cookie the cookie representing the connection + * @return A pointer to a stats structure (or NULL if allocation + * failed) */ void *(*get_stats_struct)(ENGINE_HANDLE* handle, const void* cookie); /** - * Aggregate stats among all per-connection stats. Set to NULL if you don't need it. + * Aggregate stats among all per-connection stats. This allows + * the engine to call the aggregation callback for a number of + * stat structures. You would normally not use this if you + * didn't implement a special get_stats_struct(). + * + * + * @param handle the engine handle + * @param cookie the cookie representing the connection + * @param callback the callback function you should call for all + * of the stats structures you want to include in the + * aggregatioin. + * @param dest This is the second parameter to the callback + * function. + * @return ENGINE_SUCCESS unless you had a failure */ ENGINE_ERROR_CODE (*aggregate_stats)(ENGINE_HANDLE* handle, const void* cookie, - void (*callback)(void*, void*), - void*); - + void (*callback)(void* src, + void* dest), + void* dest); /** * Any unknown command will be considered engine specific. diff --git a/include/memcached/genhash.h b/include/memcached/genhash.h deleted file mode 100644 index 235ef47..0000000 --- a/include/memcached/genhash.h +++ /dev/null @@ -1,256 +0,0 @@ -/* - * Generic hash table implementation. - * - * Copyright (c) 2006 Dustin Sallings <dustin@spy.net> - */ - -#ifndef GENHASH_H -#define GENHASH_H 1 - -#include <memcached/visibility.h> - -#ifdef __cplusplus -extern "C" { -#endif - -/*! \mainpage genhash - * - * \section intro_sec Introduction - * - * genhash is a generic hash table implementation in C. It's - * well-tested, freely available (MIT-license) and does what you need. - * - * \section docs_sec API Documentation - * - * Jump right into <a href="group___core.html">the API docs</a> to get started. - */ - -/** - * \defgroup Core genhash core - */ - -/** - * \addtogroup Core - * @{ - */ - -/** - * Operations on keys and values in the hash table. - */ -struct hash_ops { - /** - * Function to compute a hash for the given value. - */ - int (*hashfunc)(const void *, size_t); - /** - * Function that returns true if the given keys are equal. - */ - int (*hasheq)(const void *, size_t, const void *, size_t); - /** - * Function to duplicate a key for storage. - */ - void* (*dupKey)(const void *, size_t); - /** - * Function to duplicate a value for storage. - */ - void* (*dupValue)(const void *, size_t); - /** - * Function to free a key. - */ - void (*freeKey)(void *); - /** - * Function to free a value. - */ - void (*freeValue)(void *); -}; - -/** - * The hash table structure. - */ -typedef struct _genhash genhash_t ; - -/** - * Type of update performed by an update function. - */ -enum update_type { - MODIFICATION, /**< This update is modifying an existing entry */ - NEW /**< This update is creating a new entry */ -}; - -/** - * Create a new generic hashtable. - * - * @param est the estimated number of items to store (must be > 0) - * @param ops the key and value operations - * - * @return the new genhash_t or NULL if one cannot be created - */ -MEMCACHED_PUBLIC_API -genhash_t* genhash_init(int est, struct hash_ops ops); - -/** - * Free a gen hash. - * - * @param h the genhash to free (may be NULL) - */ -MEMCACHED_PUBLIC_API -void genhash_free(genhash_t *h); - -/** - * Store an item. - * - * @param h the genhash - * @param k the key - * @param v the value - */ -MEMCACHED_PUBLIC_API -void genhash_store(genhash_t *h, const void *k, size_t klen, - const void *v, size_t vlen); - -/** - * Get the most recent value stored for the given key. - * - * @param h the genhash - * @param k the key - * - * @return the value, or NULL if one cannot be found - */ -MEMCACHED_PUBLIC_API -void* genhash_find(genhash_t *h, const void *k, size_t klen); - -/** - * Delete the most recent value stored for a key. - * - * @param h the genhash - * @param k the key - * - * @return the number of items deleted - */ -MEMCACHED_PUBLIC_API -int genhash_delete(genhash_t *h, const void *k, size_t klen); - -/** - * Delete all mappings of a given key. - * - * @param h the genhash - * @param k the key - * - * @return the number of items deleted - */ -MEMCACHED_PUBLIC_API -int genhash_delete_all(genhash_t *h, const void *k, size_t klen); - -/** - * Create or update an item in-place. - * - * @param h the genhash - * @param k the key - * @param v the new value to store for this key - * - * @return an indicator of whether this created a new item or updated - * an existing one - */ -MEMCACHED_PUBLIC_API -enum update_type genhash_update(genhash_t *h, const void *k, size_t klen, - const void *v, size_t vlen); - -/** - * Create or update an item in-place with a function. - * - * @param h hashtable - * @param key the key of the item - * @param upd function that will be called with the key and current - * value. Should return the new value. - * @param fr function to free the return value returned by the update - * function - * @param def default value - * - * @return an indicator of whether this created a new item or updated - * an existing one - */ -MEMCACHED_PUBLIC_API -enum update_type genhash_fun_update(genhash_t *h, const void *key, size_t klen, - void *(*upd)(const void *k, const void *oldv, - size_t *ns, void *a), - void (*fr)(void*), - void *arg, - const void *def, size_t deflen); - -/** - * Iterate all keys and values in a hash table. - * - * @param h the genhash - * @param iterfunc a function that will be called once for every k/v pair - * @param arg an argument to be passed to the iterfunc on each iteration - */ -MEMCACHED_PUBLIC_API -void genhash_iter(genhash_t *h, - void (*iterfunc)(const void* key, size_t nkey, - const void* val, size_t nval, - void *arg), - void *arg); - -/** - * Iterate all values for a given key in a hash table. - * - * @param h the genhash - * @param key the key to iterate - * @param iterfunc a function that will be called once for every k/v pair - * @param arg an argument to be passed to the iterfunc on each iteration - */ -MEMCACHED_PUBLIC_API -void genhash_iter_key(genhash_t *h, const void* key, size_t nkey, - void (*iterfunc)(const void* key, size_t inkey, - const void* val, size_t inval, - void *arg), - void *arg); - -/** - * Get the total number of entries in this hash table. - * - * @param h the genhash - * - * @return the number of entries in the hash table - */ -MEMCACHED_PUBLIC_API -int genhash_size(genhash_t *h); - -/** - * Remove all items from a genhash. - * - * @param h the genhash - * - * @return the number of items removed - */ -MEMCACHED_PUBLIC_API -int genhash_clear(genhash_t *h); - -/** - * Get the total number of entries in this hash table that map to the given - * key. - * - * @param h the genhash - * @param k a key - * - * @return the number of entries keyed with the given key - */ -MEMCACHED_PUBLIC_API -int genhash_size_for_key(genhash_t *h, const void *k, size_t nkey); - -/** - * Convenient hash function for strings. - * - * @param k a null-terminated string key. - * - * @return a hash value for this string. - */ -MEMCACHED_PUBLIC_API -int genhash_string_hash(const void *k, size_t nkey); - -/** - * @} - */ -#ifdef __cplusplus -} -#endif /* __cplusplus */ -#endif /* GENHASH_H */ |