*
*/
-#ifndef __MEMCACHED_H__
-#define __MEMCACHED_H__
+#ifndef __LIBMEMCACHED_MEMCACHED_H__
+#define __LIBMEMCACHED_MEMCACHED_H__
#include <stdlib.h>
#include <inttypes.h>
#include <libmemcached/types.h>
#include <libmemcached/string.h>
#include <libmemcached/stats.h>
+#include <libhashkit/hashkit.h>
// Everything above this line must be in the order specified.
#include <libmemcached/allocators.h>
#include <libmemcached/analyze.h>
extern "C" {
#endif
+LIBMEMCACHED_API
+void memcached_servers_reset(memcached_st *ptr);
+
+LIBMEMCACHED_API
+memcached_st *memcached_create(memcached_st *ptr);
+
+LIBMEMCACHED_API
+void memcached_free(memcached_st *ptr);
+
+LIBMEMCACHED_API
+memcached_st *memcached_clone(memcached_st *clone, const memcached_st *ptr);
+
+LIBMEMCACHED_API
+void *memcached_get_user_data(const memcached_st *ptr);
+
+LIBMEMCACHED_API
+void *memcached_set_user_data(memcached_st *ptr, void *data);
+
+#ifdef __cplusplus
+} // extern "C"
+#endif
+
+
struct memcached_st {
/**
@note these are static and should not change without a call to behavior.
struct {
bool is_purging:1;
bool is_processing_input:1;
+ } state;
+ struct {
// Everything below here is pretty static.
bool auto_eject_hosts:1;
bool binary_protocol:1;
bool buffer_requests:1;
+ bool cork:1;
bool hash_with_prefix_key:1;
bool ketama_weighted:1;
bool no_block:1;
bool use_sort_hosts:1;
bool use_udp:1;
bool verify_key:1;
- bool cork:1;
} flags;
memcached_server_distribution_t distribution;
- memcached_hash_t hash;
+ hashkit_st hashkit;
uint32_t continuum_points_counter; // Ketama
+ uint32_t number_of_hosts;
memcached_server_st *servers;
memcached_server_st *last_disconnected_server;
int32_t snd_timeout;
uint32_t io_msg_watermark;
uint32_t io_bytes_watermark;
uint32_t io_key_prefetch;
- uint32_t number_of_hosts;
int cached_errno;
int32_t poll_timeout;
int32_t connect_timeout;
time_t next_distribution_rebuild; // Ketama
size_t prefix_key_length;
uint32_t number_of_replicas;
- memcached_hash_t distribution_hash;
+ hashkit_st distribution_hashkit;
memcached_result_st result;
memcached_continuum_item_st *continuum; // Ketama
+
+ struct _allocators_st {
+ memcached_calloc_fn calloc;
+ memcached_free_fn free;
+ memcached_malloc_fn malloc;
+ memcached_realloc_fn realloc;
+ void *context;
+ } allocators;
+
memcached_clone_fn on_clone;
memcached_cleanup_fn on_cleanup;
- memcached_free_fn call_free;
- memcached_malloc_fn call_malloc;
- memcached_realloc_fn call_realloc;
- memcached_calloc_fn call_calloc;
memcached_trigger_key_fn get_key_failure;
memcached_trigger_delete_key_fn delete_trigger;
memcached_callback_st *callbacks;
struct {
bool is_allocated:1;
} options;
-};
-LIBMEMCACHED_API
-void memcached_servers_reset(memcached_st *ptr);
+#ifdef __cplusplus
+ memcached_st() :
+ state(),
+ flags(),
+ distribution(),
+ hashkit(),
+ continuum_points_counter(),
+ number_of_hosts(),
+ servers(),
+ last_disconnected_server(),
+ snd_timeout(),
+ rcv_timeout(),
+ server_failure_limit(),
+ io_msg_watermark(),
+ io_bytes_watermark(),
+ io_key_prefetch(),
+ cached_errno(),
+ poll_timeout(),
+ connect_timeout(),
+ retry_timeout(),
+ continuum_count(),
+ send_size(),
+ recv_size(),
+ user_data(),
+ next_distribution_rebuild(),
+ prefix_key_length(),
+ number_of_replicas(),
+ distribution_hashkit(),
+ result(),
+ continuum(),
+ allocators(),
+ on_clone(),
+ on_cleanup(),
+ get_key_failure(),
+ delete_trigger(),
+ callbacks(),
+ prefix_key(),
+ options()
+ {
+ memcached_create(this);
+ }
-/* Public API */
+ ~memcached_st()
+ {
+ memcached_free(this);
+ }
-LIBMEMCACHED_API
-memcached_st *memcached_create(memcached_st *ptr);
+ memcached_st(const memcached_st& source) :
+ state(),
+ flags(),
+ distribution(),
+ hashkit(),
+ continuum_points_counter(),
+ number_of_hosts(),
+ servers(),
+ last_disconnected_server(),
+ snd_timeout(),
+ rcv_timeout(),
+ server_failure_limit(),
+ io_msg_watermark(),
+ io_bytes_watermark(),
+ io_key_prefetch(),
+ cached_errno(),
+ poll_timeout(),
+ connect_timeout(),
+ retry_timeout(),
+ continuum_count(),
+ send_size(),
+ recv_size(),
+ user_data(),
+ next_distribution_rebuild(),
+ prefix_key_length(),
+ number_of_replicas(),
+ distribution_hashkit(),
+ result(),
+ continuum(),
+ allocators(),
+ on_clone(),
+ on_cleanup(),
+ get_key_failure(),
+ delete_trigger(),
+ callbacks(),
+ prefix_key(),
+ options()
+ {
+ memcached_clone(this, &source);
+ }
-LIBMEMCACHED_API
-void memcached_free(memcached_st *ptr);
+ memcached_st& operator=(const memcached_st& source)
+ {
+ memcached_free(this);
+ memcached_clone(this, &source);
-LIBMEMCACHED_API
-memcached_st *memcached_clone(memcached_st *clone, memcached_st *ptr);
+ return *this;
+ }
-LIBMEMCACHED_API
-void *memcached_get_user_data(const memcached_st *ptr);
+#endif
+};
-LIBMEMCACHED_API
-void *memcached_set_user_data(memcached_st *ptr, void *data);
// Local Only Inline
static inline memcached_server_st *memcached_server_instance_fetch(memcached_st *ptr, uint32_t server_key)
return &ptr->servers[server_key];
}
-
-#ifdef __cplusplus
-}
-#endif
-
-
-#endif /* __MEMCACHED_H__ */
+#endif /* __LIBMEMCACHED_MEMCACHED_H__ */