Bool fix.
[m6w6/libmemcached] / libmemcached / memcached.h
index 2a7dd3f01d29cb09dc15af184c92f9c6710d84e6..5b92d6356d6ea2d3c31a38d8ed461e88bf6aba3e 100644 (file)
@@ -10,8 +10,8 @@
  *
  */
 
-#ifndef __MEMCACHED_H__
-#define __MEMCACHED_H__
+#ifndef __LIBMEMCACHED_MEMCACHED_H__
+#define __LIBMEMCACHED_MEMCACHED_H__
 
 #include <stdlib.h>
 #include <inttypes.h>
@@ -29,6 +29,7 @@
 #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.
@@ -62,10 +86,13 @@ struct memcached_st {
   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;
@@ -78,11 +105,11 @@ struct memcached_st {
     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;
@@ -91,7 +118,6 @@ struct memcached_st {
   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;
@@ -103,15 +129,20 @@ struct memcached_st {
   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;
@@ -119,27 +150,106 @@ struct memcached_st {
   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)
@@ -147,10 +257,4 @@ static inline memcached_server_st *memcached_server_instance_fetch(memcached_st
   return &ptr->servers[server_key];
 }
 
-
-#ifdef __cplusplus
-}
-#endif
-
-
-#endif /* __MEMCACHED_H__ */
+#endif /* __LIBMEMCACHED_MEMCACHED_H__ */