couchbase-memcached 1.2.8

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (539) hide show
  1. data.tar.gz.sig +2 -0
  2. data/BENCHMARKS +134 -0
  3. data/CHANGELOG +127 -0
  4. data/LICENSE +184 -0
  5. data/Manifest +535 -0
  6. data/README +118 -0
  7. data/Rakefile +83 -0
  8. data/TODO +4 -0
  9. data/couchbase-memcached.gemspec +33 -0
  10. data/ext/extconf-make.rb +25 -0
  11. data/ext/extconf.rb +91 -0
  12. data/ext/libmemcached-0.50/AUTHORS +11 -0
  13. data/ext/libmemcached-0.50/COPYING +33 -0
  14. data/ext/libmemcached-0.50/ChangeLog +392 -0
  15. data/ext/libmemcached-0.50/Makefile.am +114 -0
  16. data/ext/libmemcached-0.50/Makefile.in +4232 -0
  17. data/ext/libmemcached-0.50/NEWS +1 -0
  18. data/ext/libmemcached-0.50/README +43 -0
  19. data/ext/libmemcached-0.50/README.FIRST +31 -0
  20. data/ext/libmemcached-0.50/README.win32 +25 -0
  21. data/ext/libmemcached-0.50/THANKS +14 -0
  22. data/ext/libmemcached-0.50/TODO +11 -0
  23. data/ext/libmemcached-0.50/aclocal.m4 +1077 -0
  24. data/ext/libmemcached-0.50/clients/client_options.h +45 -0
  25. data/ext/libmemcached-0.50/clients/execute.cc +131 -0
  26. data/ext/libmemcached-0.50/clients/execute.h +30 -0
  27. data/ext/libmemcached-0.50/clients/generator.cc +96 -0
  28. data/ext/libmemcached-0.50/clients/generator.h +36 -0
  29. data/ext/libmemcached-0.50/clients/include.am +116 -0
  30. data/ext/libmemcached-0.50/clients/memaslap.c +908 -0
  31. data/ext/libmemcached-0.50/clients/memcapable.cc +2094 -0
  32. data/ext/libmemcached-0.50/clients/memcat.cc +242 -0
  33. data/ext/libmemcached-0.50/clients/memcp.cc +317 -0
  34. data/ext/libmemcached-0.50/clients/memdump.cc +183 -0
  35. data/ext/libmemcached-0.50/clients/memerror.cc +102 -0
  36. data/ext/libmemcached-0.50/clients/memflush.cc +154 -0
  37. data/ext/libmemcached-0.50/clients/memparse.cc +68 -0
  38. data/ext/libmemcached-0.50/clients/memrm.cc +177 -0
  39. data/ext/libmemcached-0.50/clients/memslap.cc +495 -0
  40. data/ext/libmemcached-0.50/clients/memstat.cc +349 -0
  41. data/ext/libmemcached-0.50/clients/ms_atomic.h +69 -0
  42. data/ext/libmemcached-0.50/clients/ms_conn.c +3413 -0
  43. data/ext/libmemcached-0.50/clients/ms_conn.h +241 -0
  44. data/ext/libmemcached-0.50/clients/ms_memslap.h +132 -0
  45. data/ext/libmemcached-0.50/clients/ms_setting.c +1068 -0
  46. data/ext/libmemcached-0.50/clients/ms_setting.h +181 -0
  47. data/ext/libmemcached-0.50/clients/ms_sigsegv.c +126 -0
  48. data/ext/libmemcached-0.50/clients/ms_sigsegv.h +34 -0
  49. data/ext/libmemcached-0.50/clients/ms_stats.c +307 -0
  50. data/ext/libmemcached-0.50/clients/ms_stats.h +69 -0
  51. data/ext/libmemcached-0.50/clients/ms_task.c +1114 -0
  52. data/ext/libmemcached-0.50/clients/ms_task.h +94 -0
  53. data/ext/libmemcached-0.50/clients/ms_thread.c +351 -0
  54. data/ext/libmemcached-0.50/clients/ms_thread.h +78 -0
  55. data/ext/libmemcached-0.50/clients/utilities.cc +231 -0
  56. data/ext/libmemcached-0.50/clients/utilities.h +64 -0
  57. data/ext/libmemcached-0.50/config.h.in +647 -0
  58. data/ext/libmemcached-0.50/config/autorun.sh +126 -0
  59. data/ext/libmemcached-0.50/config/compile +143 -0
  60. data/ext/libmemcached-0.50/config/config.guess +1517 -0
  61. data/ext/libmemcached-0.50/config/config.rpath +666 -0
  62. data/ext/libmemcached-0.50/config/config.sub +1760 -0
  63. data/ext/libmemcached-0.50/config/depcomp +630 -0
  64. data/ext/libmemcached-0.50/config/install-sh +520 -0
  65. data/ext/libmemcached-0.50/config/ltmain.sh +9642 -0
  66. data/ext/libmemcached-0.50/config/missing +376 -0
  67. data/ext/libmemcached-0.50/config/pandora-plugin +752 -0
  68. data/ext/libmemcached-0.50/config/uncrustify.cfg +1112 -0
  69. data/ext/libmemcached-0.50/configure +27103 -0
  70. data/ext/libmemcached-0.50/configure.ac +186 -0
  71. data/ext/libmemcached-0.50/docs/conf.py.in +354 -0
  72. data/ext/libmemcached-0.50/docs/include.am +240 -0
  73. data/ext/libmemcached-0.50/docs/man/hashkit_clone.3 +88 -0
  74. data/ext/libmemcached-0.50/docs/man/hashkit_crc32.3 +105 -0
  75. data/ext/libmemcached-0.50/docs/man/hashkit_create.3 +88 -0
  76. data/ext/libmemcached-0.50/docs/man/hashkit_fnv1_32.3 +105 -0
  77. data/ext/libmemcached-0.50/docs/man/hashkit_fnv1_64.3 +105 -0
  78. data/ext/libmemcached-0.50/docs/man/hashkit_fnv1a_32.3 +105 -0
  79. data/ext/libmemcached-0.50/docs/man/hashkit_fnv1a_64.3 +105 -0
  80. data/ext/libmemcached-0.50/docs/man/hashkit_free.3 +88 -0
  81. data/ext/libmemcached-0.50/docs/man/hashkit_functions.3 +105 -0
  82. data/ext/libmemcached-0.50/docs/man/hashkit_hsieh.3 +105 -0
  83. data/ext/libmemcached-0.50/docs/man/hashkit_is_allocated.3 +88 -0
  84. data/ext/libmemcached-0.50/docs/man/hashkit_jenkins.3 +105 -0
  85. data/ext/libmemcached-0.50/docs/man/hashkit_md5.3 +105 -0
  86. data/ext/libmemcached-0.50/docs/man/hashkit_murmur.3 +105 -0
  87. data/ext/libmemcached-0.50/docs/man/hashkit_value.3 +66 -0
  88. data/ext/libmemcached-0.50/docs/man/libhashkit.3 +57 -0
  89. data/ext/libmemcached-0.50/docs/man/libmemcached.3 +208 -0
  90. data/ext/libmemcached-0.50/docs/man/libmemcached_check_configuration.3 +293 -0
  91. data/ext/libmemcached-0.50/docs/man/libmemcached_configuration.3 +293 -0
  92. data/ext/libmemcached-0.50/docs/man/libmemcached_examples.3 +144 -0
  93. data/ext/libmemcached-0.50/docs/man/libmemcachedutil.3 +68 -0
  94. data/ext/libmemcached-0.50/docs/man/memaslap.1 +1222 -0
  95. data/ext/libmemcached-0.50/docs/man/memcached.3 +293 -0
  96. data/ext/libmemcached-0.50/docs/man/memcached_add.3 +132 -0
  97. data/ext/libmemcached-0.50/docs/man/memcached_add_by_key.3 +132 -0
  98. data/ext/libmemcached-0.50/docs/man/memcached_analyze.3 +77 -0
  99. data/ext/libmemcached-0.50/docs/man/memcached_append.3 +111 -0
  100. data/ext/libmemcached-0.50/docs/man/memcached_append_by_key.3 +111 -0
  101. data/ext/libmemcached-0.50/docs/man/memcached_behavior_get.3 +333 -0
  102. data/ext/libmemcached-0.50/docs/man/memcached_behavior_set.3 +333 -0
  103. data/ext/libmemcached-0.50/docs/man/memcached_callback_get.3 +159 -0
  104. data/ext/libmemcached-0.50/docs/man/memcached_callback_set.3 +159 -0
  105. data/ext/libmemcached-0.50/docs/man/memcached_cas.3 +91 -0
  106. data/ext/libmemcached-0.50/docs/man/memcached_cas_by_key.3 +91 -0
  107. data/ext/libmemcached-0.50/docs/man/memcached_clone.3 +99 -0
  108. data/ext/libmemcached-0.50/docs/man/memcached_create.3 +99 -0
  109. data/ext/libmemcached-0.50/docs/man/memcached_decrement.3 +124 -0
  110. data/ext/libmemcached-0.50/docs/man/memcached_decrement_with_initial.3 +124 -0
  111. data/ext/libmemcached-0.50/docs/man/memcached_delete.3 +83 -0
  112. data/ext/libmemcached-0.50/docs/man/memcached_delete_by_key.3 +83 -0
  113. data/ext/libmemcached-0.50/docs/man/memcached_destroy_sasl_auth_data.3 +95 -0
  114. data/ext/libmemcached-0.50/docs/man/memcached_dump.3 +77 -0
  115. data/ext/libmemcached-0.50/docs/man/memcached_fetch.3 +174 -0
  116. data/ext/libmemcached-0.50/docs/man/memcached_fetch_execute.3 +174 -0
  117. data/ext/libmemcached-0.50/docs/man/memcached_fetch_result.3 +174 -0
  118. data/ext/libmemcached-0.50/docs/man/memcached_flush_buffers.3 +72 -0
  119. data/ext/libmemcached-0.50/docs/man/memcached_free.3 +99 -0
  120. data/ext/libmemcached-0.50/docs/man/memcached_generate_hash.3 +85 -0
  121. data/ext/libmemcached-0.50/docs/man/memcached_generate_hash_value.3 +85 -0
  122. data/ext/libmemcached-0.50/docs/man/memcached_get.3 +174 -0
  123. data/ext/libmemcached-0.50/docs/man/memcached_get_by_key.3 +174 -0
  124. data/ext/libmemcached-0.50/docs/man/memcached_get_memory_allocators.3 +111 -0
  125. data/ext/libmemcached-0.50/docs/man/memcached_get_sasl_callbacks.3 +95 -0
  126. data/ext/libmemcached-0.50/docs/man/memcached_get_user_data.3 +79 -0
  127. data/ext/libmemcached-0.50/docs/man/memcached_increment.3 +124 -0
  128. data/ext/libmemcached-0.50/docs/man/memcached_increment_with_initial.3 +124 -0
  129. data/ext/libmemcached-0.50/docs/man/memcached_lib_version.3 +76 -0
  130. data/ext/libmemcached-0.50/docs/man/memcached_mget.3 +174 -0
  131. data/ext/libmemcached-0.50/docs/man/memcached_mget_by_key.3 +174 -0
  132. data/ext/libmemcached-0.50/docs/man/memcached_mget_execute.3 +174 -0
  133. data/ext/libmemcached-0.50/docs/man/memcached_mget_execute_by_key.3 +174 -0
  134. data/ext/libmemcached-0.50/docs/man/memcached_pool_behavior_get.3 +139 -0
  135. data/ext/libmemcached-0.50/docs/man/memcached_pool_behavior_set.3 +139 -0
  136. data/ext/libmemcached-0.50/docs/man/memcached_pool_create.3 +139 -0
  137. data/ext/libmemcached-0.50/docs/man/memcached_pool_destroy.3 +139 -0
  138. data/ext/libmemcached-0.50/docs/man/memcached_pool_pop.3 +139 -0
  139. data/ext/libmemcached-0.50/docs/man/memcached_pool_push.3 +139 -0
  140. data/ext/libmemcached-0.50/docs/man/memcached_pool_st.3 +139 -0
  141. data/ext/libmemcached-0.50/docs/man/memcached_prepend.3 +111 -0
  142. data/ext/libmemcached-0.50/docs/man/memcached_prepend_by_key.3 +111 -0
  143. data/ext/libmemcached-0.50/docs/man/memcached_quit.3 +74 -0
  144. data/ext/libmemcached-0.50/docs/man/memcached_replace.3 +132 -0
  145. data/ext/libmemcached-0.50/docs/man/memcached_replace_by_key.3 +132 -0
  146. data/ext/libmemcached-0.50/docs/man/memcached_sasl_set_auth_data.3 +95 -0
  147. data/ext/libmemcached-0.50/docs/man/memcached_server_add.3 +141 -0
  148. data/ext/libmemcached-0.50/docs/man/memcached_server_count.3 +141 -0
  149. data/ext/libmemcached-0.50/docs/man/memcached_server_cursor.3 +141 -0
  150. data/ext/libmemcached-0.50/docs/man/memcached_server_list.3 +141 -0
  151. data/ext/libmemcached-0.50/docs/man/memcached_server_list_append.3 +111 -0
  152. data/ext/libmemcached-0.50/docs/man/memcached_server_list_count.3 +111 -0
  153. data/ext/libmemcached-0.50/docs/man/memcached_server_list_free.3 +111 -0
  154. data/ext/libmemcached-0.50/docs/man/memcached_server_push.3 +141 -0
  155. data/ext/libmemcached-0.50/docs/man/memcached_servers_parse.3 +111 -0
  156. data/ext/libmemcached-0.50/docs/man/memcached_set.3 +132 -0
  157. data/ext/libmemcached-0.50/docs/man/memcached_set_by_key.3 +132 -0
  158. data/ext/libmemcached-0.50/docs/man/memcached_set_memory_allocators.3 +111 -0
  159. data/ext/libmemcached-0.50/docs/man/memcached_set_sasl_callbacks.3 +95 -0
  160. data/ext/libmemcached-0.50/docs/man/memcached_set_user_data.3 +79 -0
  161. data/ext/libmemcached-0.50/docs/man/memcached_stat.3 +116 -0
  162. data/ext/libmemcached-0.50/docs/man/memcached_stat_execute.3 +116 -0
  163. data/ext/libmemcached-0.50/docs/man/memcached_stat_get_keys.3 +116 -0
  164. data/ext/libmemcached-0.50/docs/man/memcached_stat_get_value.3 +116 -0
  165. data/ext/libmemcached-0.50/docs/man/memcached_stat_servername.3 +116 -0
  166. data/ext/libmemcached-0.50/docs/man/memcached_strerror.3 +69 -0
  167. data/ext/libmemcached-0.50/docs/man/memcached_verbosity.3 +66 -0
  168. data/ext/libmemcached-0.50/docs/man/memcached_version.3 +76 -0
  169. data/ext/libmemcached-0.50/docs/man/memcapable.1 +92 -0
  170. data/ext/libmemcached-0.50/docs/man/memcat.1 +71 -0
  171. data/ext/libmemcached-0.50/docs/man/memcp.1 +77 -0
  172. data/ext/libmemcached-0.50/docs/man/memdump.1 +66 -0
  173. data/ext/libmemcached-0.50/docs/man/memerror.1 +65 -0
  174. data/ext/libmemcached-0.50/docs/man/memflush.1 +73 -0
  175. data/ext/libmemcached-0.50/docs/man/memrm.1 +72 -0
  176. data/ext/libmemcached-0.50/docs/man/memslap.1 +59 -0
  177. data/ext/libmemcached-0.50/docs/man/memstat.1 +70 -0
  178. data/ext/libmemcached-0.50/example/include.am +24 -0
  179. data/ext/libmemcached-0.50/example/interface_v0.c +594 -0
  180. data/ext/libmemcached-0.50/example/interface_v1.c +411 -0
  181. data/ext/libmemcached-0.50/example/memcached_light.c +474 -0
  182. data/ext/libmemcached-0.50/example/memcached_light.h +7 -0
  183. data/ext/libmemcached-0.50/example/storage.c +172 -0
  184. data/ext/libmemcached-0.50/example/storage.h +27 -0
  185. data/ext/libmemcached-0.50/example/storage_innodb.c +535 -0
  186. data/ext/libmemcached-0.50/libhashkit/algorithm.cc +69 -0
  187. data/ext/libmemcached-0.50/libhashkit/algorithm.h +96 -0
  188. data/ext/libmemcached-0.50/libhashkit/behavior.cc +9 -0
  189. data/ext/libmemcached-0.50/libhashkit/behavior.h +26 -0
  190. data/ext/libmemcached-0.50/libhashkit/common.h +33 -0
  191. data/ext/libmemcached-0.50/libhashkit/configure.h.in +19 -0
  192. data/ext/libmemcached-0.50/libhashkit/crc32.cc +86 -0
  193. data/ext/libmemcached-0.50/libhashkit/digest.cc +62 -0
  194. data/ext/libmemcached-0.50/libhashkit/digest.h +30 -0
  195. data/ext/libmemcached-0.50/libhashkit/fnv.cc +75 -0
  196. data/ext/libmemcached-0.50/libhashkit/function.cc +156 -0
  197. data/ext/libmemcached-0.50/libhashkit/function.h +44 -0
  198. data/ext/libmemcached-0.50/libhashkit/hashkit.cc +100 -0
  199. data/ext/libmemcached-0.50/libhashkit/hashkit.h +95 -0
  200. data/ext/libmemcached-0.50/libhashkit/hashkit.hpp +97 -0
  201. data/ext/libmemcached-0.50/libhashkit/hsieh.cc +70 -0
  202. data/ext/libmemcached-0.50/libhashkit/include.am +69 -0
  203. data/ext/libmemcached-0.50/libhashkit/jenkins.cc +214 -0
  204. data/ext/libmemcached-0.50/libhashkit/ketama.cc +164 -0
  205. data/ext/libmemcached-0.50/libhashkit/md5.cc +367 -0
  206. data/ext/libmemcached-0.50/libhashkit/murmur.cc +77 -0
  207. data/ext/libmemcached-0.50/libhashkit/one_at_a_time.cc +34 -0
  208. data/ext/libmemcached-0.50/libhashkit/str_algorithm.cc +58 -0
  209. data/ext/libmemcached-0.50/libhashkit/str_algorithm.h +48 -0
  210. data/ext/libmemcached-0.50/libhashkit/strerror.cc +25 -0
  211. data/ext/libmemcached-0.50/libhashkit/strerror.h +23 -0
  212. data/ext/libmemcached-0.50/libhashkit/types.h +90 -0
  213. data/ext/libmemcached-0.50/libhashkit/visibility.h +48 -0
  214. data/ext/libmemcached-0.50/libmemcached/allocators.cc +119 -0
  215. data/ext/libmemcached-0.50/libmemcached/allocators.h +87 -0
  216. data/ext/libmemcached-0.50/libmemcached/analyze.cc +110 -0
  217. data/ext/libmemcached-0.50/libmemcached/analyze.h +66 -0
  218. data/ext/libmemcached-0.50/libmemcached/array.c +128 -0
  219. data/ext/libmemcached-0.50/libmemcached/array.h +75 -0
  220. data/ext/libmemcached-0.50/libmemcached/auto.cc +383 -0
  221. data/ext/libmemcached-0.50/libmemcached/auto.h +111 -0
  222. data/ext/libmemcached-0.50/libmemcached/basic_string.h +55 -0
  223. data/ext/libmemcached-0.50/libmemcached/behavior.cc +590 -0
  224. data/ext/libmemcached-0.50/libmemcached/behavior.h +86 -0
  225. data/ext/libmemcached-0.50/libmemcached/byteorder.cc +90 -0
  226. data/ext/libmemcached-0.50/libmemcached/byteorder.h +52 -0
  227. data/ext/libmemcached-0.50/libmemcached/callback.cc +160 -0
  228. data/ext/libmemcached-0.50/libmemcached/callback.h +61 -0
  229. data/ext/libmemcached-0.50/libmemcached/common.h +182 -0
  230. data/ext/libmemcached-0.50/libmemcached/configure.h.in +52 -0
  231. data/ext/libmemcached-0.50/libmemcached/connect.cc +626 -0
  232. data/ext/libmemcached-0.50/libmemcached/constants.h +167 -0
  233. data/ext/libmemcached-0.50/libmemcached/delete.cc +266 -0
  234. data/ext/libmemcached-0.50/libmemcached/delete.h +57 -0
  235. data/ext/libmemcached-0.50/libmemcached/do.cc +100 -0
  236. data/ext/libmemcached-0.50/libmemcached/do.hpp +49 -0
  237. data/ext/libmemcached-0.50/libmemcached/dump.cc +107 -0
  238. data/ext/libmemcached-0.50/libmemcached/dump.h +51 -0
  239. data/ext/libmemcached-0.50/libmemcached/error.cc +419 -0
  240. data/ext/libmemcached-0.50/libmemcached/error.h +61 -0
  241. data/ext/libmemcached-0.50/libmemcached/error.hpp +87 -0
  242. data/ext/libmemcached-0.50/libmemcached/exception.hpp +63 -0
  243. data/ext/libmemcached-0.50/libmemcached/fetch.cc +267 -0
  244. data/ext/libmemcached-0.50/libmemcached/fetch.h +53 -0
  245. data/ext/libmemcached-0.50/libmemcached/flush.cc +149 -0
  246. data/ext/libmemcached-0.50/libmemcached/flush.h +49 -0
  247. data/ext/libmemcached-0.50/libmemcached/flush_buffers.cc +66 -0
  248. data/ext/libmemcached-0.50/libmemcached/flush_buffers.h +49 -0
  249. data/ext/libmemcached-0.50/libmemcached/get.cc +842 -0
  250. data/ext/libmemcached-0.50/libmemcached/get.h +135 -0
  251. data/ext/libmemcached-0.50/libmemcached/hash.cc +178 -0
  252. data/ext/libmemcached-0.50/libmemcached/hash.h +68 -0
  253. data/ext/libmemcached-0.50/libmemcached/hosts.cc +516 -0
  254. data/ext/libmemcached-0.50/libmemcached/include.am +183 -0
  255. data/ext/libmemcached-0.50/libmemcached/initialize_query.cc +70 -0
  256. data/ext/libmemcached-0.50/libmemcached/initialize_query.h +51 -0
  257. data/ext/libmemcached-0.50/libmemcached/internal.h +46 -0
  258. data/ext/libmemcached-0.50/libmemcached/io.cc +920 -0
  259. data/ext/libmemcached-0.50/libmemcached/io.h +119 -0
  260. data/ext/libmemcached-0.50/libmemcached/is.h +48 -0
  261. data/ext/libmemcached-0.50/libmemcached/key.cc +23 -0
  262. data/ext/libmemcached-0.50/libmemcached/libmemcached_probes.d +30 -0
  263. data/ext/libmemcached-0.50/libmemcached/libmemcached_probes.h +118 -0
  264. data/ext/libmemcached-0.50/libmemcached/memcached.cc +437 -0
  265. data/ext/libmemcached-0.50/libmemcached/memcached.h +214 -0
  266. data/ext/libmemcached-0.50/libmemcached/memcached.hpp +799 -0
  267. data/ext/libmemcached-0.50/libmemcached/memcached/README.txt +7 -0
  268. data/ext/libmemcached-0.50/libmemcached/memcached/protocol_binary.h +726 -0
  269. data/ext/libmemcached-0.50/libmemcached/memcached/vbucket.h +26 -0
  270. data/ext/libmemcached-0.50/libmemcached/memcached_util.h +44 -0
  271. data/ext/libmemcached-0.50/libmemcached/memory.h +79 -0
  272. data/ext/libmemcached-0.50/libmemcached/options.cc +178 -0
  273. data/ext/libmemcached-0.50/libmemcached/options.h +49 -0
  274. data/ext/libmemcached-0.50/libmemcached/options.hpp +56 -0
  275. data/ext/libmemcached-0.50/libmemcached/options/context.h +151 -0
  276. data/ext/libmemcached-0.50/libmemcached/options/include.am +19 -0
  277. data/ext/libmemcached-0.50/libmemcached/options/parser.am +0 -0
  278. data/ext/libmemcached-0.50/libmemcached/options/parser.cc +2324 -0
  279. data/ext/libmemcached-0.50/libmemcached/options/parser.h +122 -0
  280. data/ext/libmemcached-0.50/libmemcached/options/scanner.cc +3203 -0
  281. data/ext/libmemcached-0.50/libmemcached/options/scanner.h +479 -0
  282. data/ext/libmemcached-0.50/libmemcached/options/server.h +60 -0
  283. data/ext/libmemcached-0.50/libmemcached/options/symbol.h +57 -0
  284. data/ext/libmemcached-0.50/libmemcached/parse.cc +110 -0
  285. data/ext/libmemcached-0.50/libmemcached/parse.h +23 -0
  286. data/ext/libmemcached-0.50/libmemcached/platform.h +56 -0
  287. data/ext/libmemcached-0.50/libmemcached/prefix_key.cc +65 -0
  288. data/ext/libmemcached-0.50/libmemcached/prefix_key.h +49 -0
  289. data/ext/libmemcached-0.50/libmemcached/protocol/ascii_handler.c +963 -0
  290. data/ext/libmemcached-0.50/libmemcached/protocol/ascii_handler.h +40 -0
  291. data/ext/libmemcached-0.50/libmemcached/protocol/binary_handler.c +1121 -0
  292. data/ext/libmemcached-0.50/libmemcached/protocol/binary_handler.h +47 -0
  293. data/ext/libmemcached-0.50/libmemcached/protocol/cache.c +149 -0
  294. data/ext/libmemcached-0.50/libmemcached/protocol/cache.h +116 -0
  295. data/ext/libmemcached-0.50/libmemcached/protocol/callback.h +418 -0
  296. data/ext/libmemcached-0.50/libmemcached/protocol/common.h +163 -0
  297. data/ext/libmemcached-0.50/libmemcached/protocol/include.am +26 -0
  298. data/ext/libmemcached-0.50/libmemcached/protocol/pedantic.c +202 -0
  299. data/ext/libmemcached-0.50/libmemcached/protocol/protocol_handler.c +365 -0
  300. data/ext/libmemcached-0.50/libmemcached/protocol_handler.h +215 -0
  301. data/ext/libmemcached-0.50/libmemcached/purge.cc +90 -0
  302. data/ext/libmemcached-0.50/libmemcached/quit.cc +139 -0
  303. data/ext/libmemcached-0.50/libmemcached/quit.h +55 -0
  304. data/ext/libmemcached-0.50/libmemcached/response.cc +619 -0
  305. data/ext/libmemcached-0.50/libmemcached/response.h +57 -0
  306. data/ext/libmemcached-0.50/libmemcached/result.cc +173 -0
  307. data/ext/libmemcached-0.50/libmemcached/result.h +100 -0
  308. data/ext/libmemcached-0.50/libmemcached/return.h +98 -0
  309. data/ext/libmemcached-0.50/libmemcached/sasl.c +408 -0
  310. data/ext/libmemcached-0.50/libmemcached/sasl.h +86 -0
  311. data/ext/libmemcached-0.50/libmemcached/server.cc +351 -0
  312. data/ext/libmemcached-0.50/libmemcached/server.h +169 -0
  313. data/ext/libmemcached-0.50/libmemcached/server_list.cc +88 -0
  314. data/ext/libmemcached-0.50/libmemcached/server_list.h +77 -0
  315. data/ext/libmemcached-0.50/libmemcached/stats.cc +623 -0
  316. data/ext/libmemcached-0.50/libmemcached/stats.h +96 -0
  317. data/ext/libmemcached-0.50/libmemcached/storage.cc +567 -0
  318. data/ext/libmemcached-0.50/libmemcached/storage.h +133 -0
  319. data/ext/libmemcached-0.50/libmemcached/strerror.cc +189 -0
  320. data/ext/libmemcached-0.50/libmemcached/strerror.h +50 -0
  321. data/ext/libmemcached-0.50/libmemcached/string.cc +253 -0
  322. data/ext/libmemcached-0.50/libmemcached/string.h +121 -0
  323. data/ext/libmemcached-0.50/libmemcached/touch.cc +106 -0
  324. data/ext/libmemcached-0.50/libmemcached/touch.h +59 -0
  325. data/ext/libmemcached-0.50/libmemcached/types.h +117 -0
  326. data/ext/libmemcached-0.50/libmemcached/util.h +40 -0
  327. data/ext/libmemcached-0.50/libmemcached/util/flush.cc +61 -0
  328. data/ext/libmemcached-0.50/libmemcached/util/flush.h +50 -0
  329. data/ext/libmemcached-0.50/libmemcached/util/include.am +34 -0
  330. data/ext/libmemcached-0.50/libmemcached/util/ping.cc +62 -0
  331. data/ext/libmemcached-0.50/libmemcached/util/ping.h +49 -0
  332. data/ext/libmemcached-0.50/libmemcached/util/pool.cc +392 -0
  333. data/ext/libmemcached-0.50/libmemcached/util/pool.h +78 -0
  334. data/ext/libmemcached-0.50/libmemcached/util/version.cc +87 -0
  335. data/ext/libmemcached-0.50/libmemcached/util/version.h +53 -0
  336. data/ext/libmemcached-0.50/libmemcached/verbosity.cc +97 -0
  337. data/ext/libmemcached-0.50/libmemcached/verbosity.h +50 -0
  338. data/ext/libmemcached-0.50/libmemcached/version.cc +214 -0
  339. data/ext/libmemcached-0.50/libmemcached/version.h +52 -0
  340. data/ext/libmemcached-0.50/libmemcached/virtual_bucket.c +118 -0
  341. data/ext/libmemcached-0.50/libmemcached/virtual_bucket.h +59 -0
  342. data/ext/libmemcached-0.50/libmemcached/visibility.h +51 -0
  343. data/ext/libmemcached-0.50/libmemcached/watchpoint.h +110 -0
  344. data/ext/libmemcached-0.50/libtest/callbacks.h +21 -0
  345. data/ext/libmemcached-0.50/libtest/collection.h +19 -0
  346. data/ext/libmemcached-0.50/libtest/common.h +50 -0
  347. data/ext/libmemcached-0.50/libtest/core.h +11 -0
  348. data/ext/libmemcached-0.50/libtest/error.h +18 -0
  349. data/ext/libmemcached-0.50/libtest/failed.h +52 -0
  350. data/ext/libmemcached-0.50/libtest/framework.cc +57 -0
  351. data/ext/libmemcached-0.50/libtest/framework.h +137 -0
  352. data/ext/libmemcached-0.50/libtest/get.h +22 -0
  353. data/ext/libmemcached-0.50/libtest/include.am +52 -0
  354. data/ext/libmemcached-0.50/libtest/runner.h +19 -0
  355. data/ext/libmemcached-0.50/libtest/server.c +355 -0
  356. data/ext/libmemcached-0.50/libtest/server.h +43 -0
  357. data/ext/libmemcached-0.50/libtest/stats.h +30 -0
  358. data/ext/libmemcached-0.50/libtest/strerror.h +14 -0
  359. data/ext/libmemcached-0.50/libtest/test.cc +319 -0
  360. data/ext/libmemcached-0.50/libtest/test.h +162 -0
  361. data/ext/libmemcached-0.50/libtest/test.hpp +46 -0
  362. data/ext/libmemcached-0.50/libtest/visibility.h +69 -0
  363. data/ext/libmemcached-0.50/m4/ac_cxx_header_stdcxx_98.m4 +83 -0
  364. data/ext/libmemcached-0.50/m4/acx_pthread.m4 +271 -0
  365. data/ext/libmemcached-0.50/m4/byteorder.m4 +19 -0
  366. data/ext/libmemcached-0.50/m4/deprecated.m4 +17 -0
  367. data/ext/libmemcached-0.50/m4/eagain.m4 +28 -0
  368. data/ext/libmemcached-0.50/m4/enable_utillib.m4 +16 -0
  369. data/ext/libmemcached-0.50/m4/gettext.m4 +379 -0
  370. data/ext/libmemcached-0.50/m4/hsieh.m4 +18 -0
  371. data/ext/libmemcached-0.50/m4/iconv.m4 +214 -0
  372. data/ext/libmemcached-0.50/m4/lib-ld.m4 +110 -0
  373. data/ext/libmemcached-0.50/m4/lib-link.m4 +767 -0
  374. data/ext/libmemcached-0.50/m4/lib-prefix.m4 +221 -0
  375. data/ext/libmemcached-0.50/m4/libtool.m4 +7851 -0
  376. data/ext/libmemcached-0.50/m4/ltoptions.m4 +369 -0
  377. data/ext/libmemcached-0.50/m4/ltsugar.m4 +123 -0
  378. data/ext/libmemcached-0.50/m4/ltversion.m4 +23 -0
  379. data/ext/libmemcached-0.50/m4/lt~obsolete.m4 +98 -0
  380. data/ext/libmemcached-0.50/m4/memaslap.m4 +9 -0
  381. data/ext/libmemcached-0.50/m4/memcached.m4 +31 -0
  382. data/ext/libmemcached-0.50/m4/murmur.m4 +18 -0
  383. data/ext/libmemcached-0.50/m4/pandora_64bit.m4 +60 -0
  384. data/ext/libmemcached-0.50/m4/pandora_bison.m4 +33 -0
  385. data/ext/libmemcached-0.50/m4/pandora_canonical.m4 +418 -0
  386. data/ext/libmemcached-0.50/m4/pandora_check_compiler_version.m4 +37 -0
  387. data/ext/libmemcached-0.50/m4/pandora_check_cxx_standard.m4 +23 -0
  388. data/ext/libmemcached-0.50/m4/pandora_cinttypes.m4 +39 -0
  389. data/ext/libmemcached-0.50/m4/pandora_clock_gettime.m4 +15 -0
  390. data/ext/libmemcached-0.50/m4/pandora_compile_stdcxx_0x.m4 +103 -0
  391. data/ext/libmemcached-0.50/m4/pandora_cstdint.m4 +38 -0
  392. data/ext/libmemcached-0.50/m4/pandora_cxx_demangle.m4 +27 -0
  393. data/ext/libmemcached-0.50/m4/pandora_enable_dtrace.m4 +60 -0
  394. data/ext/libmemcached-0.50/m4/pandora_ensure_gcc_version.m4 +62 -0
  395. data/ext/libmemcached-0.50/m4/pandora_extensions.m4 +16 -0
  396. data/ext/libmemcached-0.50/m4/pandora_fdatasync.m4 +25 -0
  397. data/ext/libmemcached-0.50/m4/pandora_flex.m4 +33 -0
  398. data/ext/libmemcached-0.50/m4/pandora_have_better_malloc.m4 +66 -0
  399. data/ext/libmemcached-0.50/m4/pandora_have_boost.m4 +93 -0
  400. data/ext/libmemcached-0.50/m4/pandora_have_gcc_atomics.m4 +37 -0
  401. data/ext/libmemcached-0.50/m4/pandora_have_innodb.m4 +41 -0
  402. data/ext/libmemcached-0.50/m4/pandora_have_libaio.m4 +56 -0
  403. data/ext/libmemcached-0.50/m4/pandora_have_libavahi.m4 +41 -0
  404. data/ext/libmemcached-0.50/m4/pandora_have_libbdb.m4 +40 -0
  405. data/ext/libmemcached-0.50/m4/pandora_have_libboost_date_time.m4 +46 -0
  406. data/ext/libmemcached-0.50/m4/pandora_have_libboost_filesystem.m4 +47 -0
  407. data/ext/libmemcached-0.50/m4/pandora_have_libboost_iostreams.m4 +49 -0
  408. data/ext/libmemcached-0.50/m4/pandora_have_libboost_options.m4 +47 -0
  409. data/ext/libmemcached-0.50/m4/pandora_have_libboost_regex.m4 +54 -0
  410. data/ext/libmemcached-0.50/m4/pandora_have_libboost_test.m4 +45 -0
  411. data/ext/libmemcached-0.50/m4/pandora_have_libboost_thread.m4 +54 -0
  412. data/ext/libmemcached-0.50/m4/pandora_have_libcassandra.m4 +44 -0
  413. data/ext/libmemcached-0.50/m4/pandora_have_libcurl.m4 +62 -0
  414. data/ext/libmemcached-0.50/m4/pandora_have_libdl.m4 +51 -0
  415. data/ext/libmemcached-0.50/m4/pandora_have_libdrizzle.m4 +61 -0
  416. data/ext/libmemcached-0.50/m4/pandora_have_libevent.m4 +66 -0
  417. data/ext/libmemcached-0.50/m4/pandora_have_libgearman.m4 +41 -0
  418. data/ext/libmemcached-0.50/m4/pandora_have_libgtest.m4 +47 -0
  419. data/ext/libmemcached-0.50/m4/pandora_have_libhaildb.m4 +43 -0
  420. data/ext/libmemcached-0.50/m4/pandora_have_libhashkit.m4 +42 -0
  421. data/ext/libmemcached-0.50/m4/pandora_have_libinnodb.m4 +64 -0
  422. data/ext/libmemcached-0.50/m4/pandora_have_libldap.m4 +73 -0
  423. data/ext/libmemcached-0.50/m4/pandora_have_libmemcached.m4 +106 -0
  424. data/ext/libmemcached-0.50/m4/pandora_have_libmysqlclient.m4 +146 -0
  425. data/ext/libmemcached-0.50/m4/pandora_have_libndbclient.m4 +80 -0
  426. data/ext/libmemcached-0.50/m4/pandora_have_libpcre.m4 +73 -0
  427. data/ext/libmemcached-0.50/m4/pandora_have_libpq.m4 +46 -0
  428. data/ext/libmemcached-0.50/m4/pandora_have_libpqxx.m4 +44 -0
  429. data/ext/libmemcached-0.50/m4/pandora_have_libsqlite3.m4 +42 -0
  430. data/ext/libmemcached-0.50/m4/pandora_have_libtokyocabinet.m4 +54 -0
  431. data/ext/libmemcached-0.50/m4/pandora_have_libuuid.m4 +55 -0
  432. data/ext/libmemcached-0.50/m4/pandora_have_libvbucket.m4 +40 -0
  433. data/ext/libmemcached-0.50/m4/pandora_have_libxml2.m4 +52 -0
  434. data/ext/libmemcached-0.50/m4/pandora_have_libz.m4 +51 -0
  435. data/ext/libmemcached-0.50/m4/pandora_have_protobuf.m4 +82 -0
  436. data/ext/libmemcached-0.50/m4/pandora_have_sasl.m4 +133 -0
  437. data/ext/libmemcached-0.50/m4/pandora_have_thrift.m4 +45 -0
  438. data/ext/libmemcached-0.50/m4/pandora_header_assert.m4 +23 -0
  439. data/ext/libmemcached-0.50/m4/pandora_header_stdcxx_98.m4 +83 -0
  440. data/ext/libmemcached-0.50/m4/pandora_intltool.m4 +225 -0
  441. data/ext/libmemcached-0.50/m4/pandora_libtool.m4 +25 -0
  442. data/ext/libmemcached-0.50/m4/pandora_optimize.m4 +75 -0
  443. data/ext/libmemcached-0.50/m4/pandora_platform.m4 +117 -0
  444. data/ext/libmemcached-0.50/m4/pandora_plugins.m4 +62 -0
  445. data/ext/libmemcached-0.50/m4/pandora_print_callstack.m4 +61 -0
  446. data/ext/libmemcached-0.50/m4/pandora_pthread.m4 +258 -0
  447. data/ext/libmemcached-0.50/m4/pandora_python3_devel.m4 +236 -0
  448. data/ext/libmemcached-0.50/m4/pandora_run_cpplint.m4 +8 -0
  449. data/ext/libmemcached-0.50/m4/pandora_sasl.m4 +133 -0
  450. data/ext/libmemcached-0.50/m4/pandora_shared_ptr.m4 +59 -0
  451. data/ext/libmemcached-0.50/m4/pandora_stack_direction.m4 +39 -0
  452. data/ext/libmemcached-0.50/m4/pandora_stl_hash.m4 +94 -0
  453. data/ext/libmemcached-0.50/m4/pandora_swig.m4 +39 -0
  454. data/ext/libmemcached-0.50/m4/pandora_use_pipe.m4 +36 -0
  455. data/ext/libmemcached-0.50/m4/pandora_vc_build.m4 +168 -0
  456. data/ext/libmemcached-0.50/m4/pandora_version.m4 +11 -0
  457. data/ext/libmemcached-0.50/m4/pandora_visibility.m4 +75 -0
  458. data/ext/libmemcached-0.50/m4/pandora_warnings.m4 +447 -0
  459. data/ext/libmemcached-0.50/m4/pandora_with_gettext.m4 +44 -0
  460. data/ext/libmemcached-0.50/m4/pandora_with_lua.m4 +55 -0
  461. data/ext/libmemcached-0.50/m4/pandora_with_memcached.m4 +41 -0
  462. data/ext/libmemcached-0.50/m4/pandora_with_perl.m4 +81 -0
  463. data/ext/libmemcached-0.50/m4/pandora_with_php.m4 +56 -0
  464. data/ext/libmemcached-0.50/m4/pandora_with_python.m4 +37 -0
  465. data/ext/libmemcached-0.50/m4/pandora_with_python3.m4 +44 -0
  466. data/ext/libmemcached-0.50/m4/pandora_with_r.m4 +33 -0
  467. data/ext/libmemcached-0.50/m4/pandora_with_ruby.m4 +79 -0
  468. data/ext/libmemcached-0.50/m4/pandora_with_valgrind.m4 +17 -0
  469. data/ext/libmemcached-0.50/m4/pkg.m4 +157 -0
  470. data/ext/libmemcached-0.50/m4/po.m4 +449 -0
  471. data/ext/libmemcached-0.50/m4/progtest.m4 +92 -0
  472. data/ext/libmemcached-0.50/m4/protocol_binary.m4 +36 -0
  473. data/ext/libmemcached-0.50/m4/setsockopt.m4 +73 -0
  474. data/ext/libmemcached-0.50/m4/socket_send_flags.m4 +66 -0
  475. data/ext/libmemcached-0.50/poll/include.am +8 -0
  476. data/ext/libmemcached-0.50/poll/poll.c +77 -0
  477. data/ext/libmemcached-0.50/poll/poll.h +45 -0
  478. data/ext/libmemcached-0.50/support/include.am +11 -0
  479. data/ext/libmemcached-0.50/support/libmemcached-fc.spec.in +105 -0
  480. data/ext/libmemcached-0.50/support/libmemcached.pc.in +10 -0
  481. data/ext/libmemcached-0.50/support/libmemcached.spec.in +281 -0
  482. data/ext/libmemcached-0.50/support/set_benchmark.sh +5 -0
  483. data/ext/libmemcached-0.50/tests/atomsmasher.cc +295 -0
  484. data/ext/libmemcached-0.50/tests/basic.cc +134 -0
  485. data/ext/libmemcached-0.50/tests/basic.h +66 -0
  486. data/ext/libmemcached-0.50/tests/cpp_example.cc +195 -0
  487. data/ext/libmemcached-0.50/tests/deprecated.cc +72 -0
  488. data/ext/libmemcached-0.50/tests/deprecated.h +49 -0
  489. data/ext/libmemcached-0.50/tests/error_conditions.cc +63 -0
  490. data/ext/libmemcached-0.50/tests/error_conditions.h +48 -0
  491. data/ext/libmemcached-0.50/tests/hash_plus.cc +225 -0
  492. data/ext/libmemcached-0.50/tests/hash_results.h +127 -0
  493. data/ext/libmemcached-0.50/tests/hashkit_functions.cc +619 -0
  494. data/ext/libmemcached-0.50/tests/include.am +342 -0
  495. data/ext/libmemcached-0.50/tests/ketama_test_cases.h +121 -0
  496. data/ext/libmemcached-0.50/tests/ketama_test_cases_spy.h +118 -0
  497. data/ext/libmemcached-0.50/tests/libmemcached_world.h +205 -0
  498. data/ext/libmemcached-0.50/tests/mem_functions.cc +6648 -0
  499. data/ext/libmemcached-0.50/tests/mem_udp.cc +510 -0
  500. data/ext/libmemcached-0.50/tests/output_plus.res +5 -0
  501. data/ext/libmemcached-0.50/tests/parser.cc +599 -0
  502. data/ext/libmemcached-0.50/tests/parser.h +109 -0
  503. data/ext/libmemcached-0.50/tests/plus.cpp +240 -0
  504. data/ext/libmemcached-0.50/tests/pool.cc +78 -0
  505. data/ext/libmemcached-0.50/tests/pool.h +49 -0
  506. data/ext/libmemcached-0.50/tests/print.cc +58 -0
  507. data/ext/libmemcached-0.50/tests/print.h +51 -0
  508. data/ext/libmemcached-0.50/tests/replication.cc +333 -0
  509. data/ext/libmemcached-0.50/tests/replication.h +64 -0
  510. data/ext/libmemcached-0.50/tests/start.cc +29 -0
  511. data/ext/libmemcached-0.50/tests/string.cc +174 -0
  512. data/ext/libmemcached-0.50/tests/string.h +67 -0
  513. data/ext/libmemcached-0.50/tests/virtual_buckets.cc +143 -0
  514. data/ext/libmemcached-0.50/tests/virtual_buckets.h +51 -0
  515. data/ext/libmemcached-0.50/win32/include.am +11 -0
  516. data/ext/libmemcached-0.50/win32/wrappers.h +55 -0
  517. data/ext/rlibmemcached.i +263 -0
  518. data/ext/rlibmemcached_wrap.c +16732 -0
  519. data/lib/memcached.rb +32 -0
  520. data/lib/memcached/auth.rb +16 -0
  521. data/lib/memcached/behaviors.rb +77 -0
  522. data/lib/memcached/exceptions.rb +84 -0
  523. data/lib/memcached/experimental.rb +48 -0
  524. data/lib/memcached/memcached.rb +660 -0
  525. data/lib/memcached/rails.rb +133 -0
  526. data/test/profile/benchmark.rb +245 -0
  527. data/test/profile/c_profiler.rb +14 -0
  528. data/test/profile/exercise.rb +185 -0
  529. data/test/profile/rb_profiler.rb +21 -0
  530. data/test/profile/valgrind.rb +10 -0
  531. data/test/setup.rb +30 -0
  532. data/test/teardown.rb +0 -0
  533. data/test/test_helper.rb +19 -0
  534. data/test/unit/binding_test.rb +8 -0
  535. data/test/unit/memcached_experimental_test.rb +274 -0
  536. data/test/unit/memcached_test.rb +1293 -0
  537. data/test/unit/rails_test.rb +122 -0
  538. metadata +650 -0
  539. metadata.gz.sig +0 -0
@@ -0,0 +1,214 @@
1
+ /* vim:expandtab:shiftwidth=2:tabstop=2:smarttab:
2
+ *
3
+ * Libmemcached library
4
+ *
5
+ * Copyright (C) 2011 Data Differential, http://datadifferential.com/
6
+ * Copyright (C) 2006-2009 Brian Aker All rights reserved.
7
+ *
8
+ * Redistribution and use in source and binary forms, with or without
9
+ * modification, are permitted provided that the following conditions are
10
+ * met:
11
+ *
12
+ * * Redistributions of source code must retain the above copyright
13
+ * notice, this list of conditions and the following disclaimer.
14
+ *
15
+ * * Redistributions in binary form must reproduce the above
16
+ * copyright notice, this list of conditions and the following disclaimer
17
+ * in the documentation and/or other materials provided with the
18
+ * distribution.
19
+ *
20
+ * * The names of its contributors may not be used to endorse or
21
+ * promote products derived from this software without specific prior
22
+ * written permission.
23
+ *
24
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
25
+ * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
26
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
27
+ * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
28
+ * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
29
+ * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
30
+ * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
31
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
32
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
33
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
34
+ * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
35
+ *
36
+ */
37
+
38
+ #pragma once
39
+
40
+ #include <inttypes.h>
41
+ #include <stdlib.h>
42
+ #include <sys/types.h>
43
+
44
+
45
+ #if !defined(__cplusplus)
46
+ # include <stdbool.h>
47
+ #endif
48
+
49
+ #include <libmemcached/visibility.h>
50
+ #include <libmemcached/configure.h>
51
+ #include <libmemcached/platform.h>
52
+ #include <libmemcached/constants.h>
53
+ #include <libmemcached/return.h>
54
+ #include <libmemcached/types.h>
55
+ #include <libmemcached/string.h>
56
+ #include <libmemcached/array.h>
57
+ #include <libmemcached/error.h>
58
+ #include <libmemcached/stats.h>
59
+ #include <libhashkit/hashkit.h>
60
+
61
+ // Everything above this line must be in the order specified.
62
+ #include <libmemcached/allocators.h>
63
+ #include <libmemcached/analyze.h>
64
+ #include <libmemcached/auto.h>
65
+ #include <libmemcached/behavior.h>
66
+ #include <libmemcached/callback.h>
67
+ #include <libmemcached/delete.h>
68
+ #include <libmemcached/dump.h>
69
+ #include <libmemcached/fetch.h>
70
+ #include <libmemcached/flush.h>
71
+ #include <libmemcached/flush_buffers.h>
72
+ #include <libmemcached/get.h>
73
+ #include <libmemcached/touch.h>
74
+ #include <libmemcached/hash.h>
75
+ #include <libmemcached/options.h>
76
+ #include <libmemcached/parse.h>
77
+ #include <libmemcached/quit.h>
78
+ #include <libmemcached/result.h>
79
+ #include <libmemcached/server.h>
80
+ #include <libmemcached/server_list.h>
81
+ #include <libmemcached/storage.h>
82
+ #include <libmemcached/strerror.h>
83
+ #include <libmemcached/verbosity.h>
84
+ #include <libmemcached/version.h>
85
+ #include <libmemcached/sasl.h>
86
+
87
+ struct memcached_st {
88
+ /**
89
+ @note these are static and should not change without a call to behavior.
90
+ */
91
+ struct {
92
+ bool is_purging:1;
93
+ bool is_processing_input:1;
94
+ bool is_time_for_rebuild:1;
95
+ } state;
96
+
97
+ struct {
98
+ // Everything below here is pretty static.
99
+ bool auto_eject_hosts:1;
100
+ bool binary_protocol:1;
101
+ bool buffer_requests:1;
102
+ bool hash_with_prefix_key:1;
103
+ bool no_block:1; // Don't block
104
+ bool no_reply:1;
105
+ bool randomize_replica_read:1;
106
+ bool support_cas:1;
107
+ bool tcp_nodelay:1;
108
+ bool use_sort_hosts:1;
109
+ bool use_udp:1;
110
+ bool verify_key:1;
111
+ bool tcp_keepalive:1;
112
+ } flags;
113
+
114
+ memcached_server_distribution_t distribution;
115
+ hashkit_st hashkit;
116
+ uint32_t number_of_hosts;
117
+ memcached_server_st *servers;
118
+ memcached_server_st *last_disconnected_server;
119
+ int32_t snd_timeout;
120
+ int32_t rcv_timeout;
121
+ uint32_t server_failure_limit;
122
+ uint32_t io_msg_watermark;
123
+ uint32_t io_bytes_watermark;
124
+ uint32_t io_key_prefetch;
125
+ uint32_t tcp_keepidle;
126
+ int32_t poll_timeout;
127
+ int32_t connect_timeout;
128
+ int32_t retry_timeout;
129
+ int send_size;
130
+ int recv_size;
131
+ void *user_data;
132
+ uint64_t query_id;
133
+ uint32_t number_of_replicas;
134
+ memcached_result_st result;
135
+
136
+ struct {
137
+ bool weighted;
138
+ uint32_t continuum_count; // Ketama
139
+ uint32_t continuum_points_counter; // Ketama
140
+ time_t next_distribution_rebuild; // Ketama
141
+ memcached_continuum_item_st *continuum; // Ketama
142
+ } ketama;
143
+
144
+ struct memcached_virtual_bucket_t *virtual_bucket;
145
+
146
+ struct memcached_allocator_t allocators;
147
+
148
+ memcached_clone_fn on_clone;
149
+ memcached_cleanup_fn on_cleanup;
150
+ memcached_trigger_key_fn get_key_failure;
151
+ memcached_trigger_delete_key_fn delete_trigger;
152
+ memcached_callback_st *callbacks;
153
+ struct memcached_sasl_st sasl;
154
+ struct memcached_error_t *error_messages;
155
+ struct memcached_array_st *prefix_key;
156
+ struct {
157
+ uint32_t initial_pool_size;
158
+ uint32_t max_pool_size;
159
+ int32_t version; // This is used by pool and others to determine if the memcached_st is out of date.
160
+ struct memcached_array_st *filename;
161
+ } configure;
162
+ struct {
163
+ bool is_allocated:1;
164
+ } options;
165
+
166
+ unsigned int last_server_key;
167
+ };
168
+
169
+ #ifdef __cplusplus
170
+ extern "C" {
171
+ #endif
172
+
173
+ LIBMEMCACHED_API
174
+ void memcached_servers_reset(memcached_st *ptr);
175
+
176
+ LIBMEMCACHED_API
177
+ memcached_st *memcached_create(memcached_st *ptr);
178
+
179
+ LIBMEMCACHED_API
180
+ memcached_st *memcached(const char *string, size_t string_length);
181
+
182
+ LIBMEMCACHED_API
183
+ void memcached_free(memcached_st *ptr);
184
+
185
+ LIBMEMCACHED_API
186
+ memcached_return_t memcached_reset(memcached_st *ptr);
187
+
188
+ LIBMEMCACHED_API
189
+ void memcached_reset_last_disconnected_server(memcached_st *ptr);
190
+
191
+ LIBMEMCACHED_API
192
+ memcached_st *memcached_clone(memcached_st *clone, const memcached_st *ptr);
193
+
194
+ LIBMEMCACHED_API
195
+ void *memcached_get_user_data(const memcached_st *ptr);
196
+
197
+ LIBMEMCACHED_API
198
+ void *memcached_set_user_data(memcached_st *ptr, void *data);
199
+
200
+ LIBMEMCACHED_API
201
+ memcached_return_t memcached_push(memcached_st *destination, const memcached_st *source);
202
+
203
+ LIBMEMCACHED_API
204
+ memcached_server_instance_st memcached_server_instance_by_position(const memcached_st *ptr, uint32_t server_key);
205
+
206
+ LIBMEMCACHED_API
207
+ uint32_t memcached_server_count(const memcached_st *);
208
+
209
+ LIBMEMCACHED_API
210
+ uint64_t memcached_query_id(const memcached_st *);
211
+
212
+ #ifdef __cplusplus
213
+ } // extern "C"
214
+ #endif
@@ -0,0 +1,799 @@
1
+ /*
2
+ * Summary: C++ interface for memcached server
3
+ *
4
+ * Copy: See Copyright for the status of this software.
5
+ *
6
+ * Authors: Padraig O'Sullivan <osullivan.padraig@gmail.com>
7
+ * Patrick Galbraith <patg@patg.net>
8
+ */
9
+
10
+ /**
11
+ * @file memcached.hpp
12
+ * @brief Libmemcached C++ interface
13
+ */
14
+
15
+ #pragma once
16
+
17
+ #include <libmemcached/memcached.h>
18
+ #include <libmemcached/exception.hpp>
19
+
20
+ #include <string.h>
21
+
22
+ #include <sstream>
23
+ #include <string>
24
+ #include <vector>
25
+ #include <map>
26
+
27
+ namespace memcache
28
+ {
29
+
30
+ /**
31
+ * This is the core memcached library (if later, other objects
32
+ * are needed, they will be created from this class).
33
+ */
34
+ class Memcache
35
+ {
36
+ public:
37
+
38
+ Memcache()
39
+ {
40
+ memc= memcached("", 0);
41
+ }
42
+
43
+ Memcache(const std::string &config)
44
+ {
45
+ memc= memcached(config.c_str(), config.size());
46
+ }
47
+
48
+ Memcache(const std::string &hostname, in_port_t port)
49
+ {
50
+ memc= memcached("", 0);
51
+ if (memc)
52
+ memcached_server_add(memc, hostname.c_str(), port);
53
+ }
54
+
55
+ Memcache(memcached_st *clone)
56
+ {
57
+ memc= memcached_clone(NULL, clone);
58
+ }
59
+
60
+ Memcache(const Memcache &rhs)
61
+ {
62
+ memc= memcached_clone(NULL, rhs.getImpl());
63
+ }
64
+
65
+ Memcache &operator=(const Memcache &rhs)
66
+ {
67
+ if (this != &rhs)
68
+ {
69
+ memcached_free(memc);
70
+ memc= memcached_clone(NULL, rhs.getImpl());
71
+ }
72
+
73
+ return *this;
74
+ }
75
+
76
+ ~Memcache()
77
+ {
78
+ memcached_free(memc);
79
+ }
80
+
81
+ /**
82
+ * Get the internal memcached_st *
83
+ */
84
+ const memcached_st *getImpl() const
85
+ {
86
+ return memc;
87
+ }
88
+
89
+ /**
90
+ * Return an error string for the given return structure.
91
+ *
92
+ * @param[in] rc a memcached_return_t structure
93
+ * @return error string corresponding to given return code in the library.
94
+ */
95
+ const std::string getError(memcached_return_t rc) const
96
+ {
97
+ /* first parameter to strerror is unused */
98
+ return memcached_strerror(NULL, rc);
99
+ }
100
+
101
+
102
+ bool setBehavior(memcached_behavior_t flag, uint64_t data)
103
+ {
104
+ return (memcached_success(memcached_behavior_set(memc, flag, data)));
105
+ }
106
+
107
+ uint64_t getBehavior(memcached_behavior_t flag)
108
+ {
109
+ return memcached_behavior_get(memc, flag);
110
+ }
111
+
112
+ /**
113
+ * Configure the memcache object
114
+ *
115
+ * @param[in] in_config configuration
116
+ * @return true on success; false otherwise
117
+ */
118
+ bool configure(const std::string &configuration)
119
+ {
120
+ memcached_st *new_memc= memcached(configuration.c_str(), configuration.size());
121
+
122
+ if (new_memc)
123
+ {
124
+ memcached_free(memc);
125
+ memc= new_memc;
126
+
127
+ return true;
128
+ }
129
+
130
+ return false;
131
+ }
132
+
133
+ /**
134
+ * Add a server to the list of memcached servers to use.
135
+ *
136
+ * @param[in] server_name name of the server to add
137
+ * @param[in] port port number of server to add
138
+ * @return true on success; false otherwise
139
+ */
140
+ bool addServer(const std::string &server_name, in_port_t port)
141
+ {
142
+ return memcached_success(memcached_server_add(memc, server_name.c_str(), port));
143
+ }
144
+
145
+ /**
146
+ * Remove a server from the list of memcached servers to use.
147
+ *
148
+ * @param[in] server_name name of the server to remove
149
+ * @param[in] port port number of server to remove
150
+ * @return true on success; false otherwise
151
+ */
152
+ bool removeServer(const std::string &server_name, in_port_t port)
153
+ {
154
+ std::string tmp_str;
155
+ std::ostringstream strstm;
156
+ tmp_str.append(",");
157
+ tmp_str.append(server_name);
158
+ tmp_str.append(":");
159
+ strstm << port;
160
+ tmp_str.append(strstm.str());
161
+
162
+ //memcached_return_t rc= memcached_server_remove(server);
163
+
164
+ return false;
165
+ }
166
+
167
+ /**
168
+ * Fetches an individual value from the server. mget() must always
169
+ * be called before using this method.
170
+ *
171
+ * @param[in] key key of object to fetch
172
+ * @param[out] ret_val store returned object in this vector
173
+ * @return a memcached return structure
174
+ */
175
+ memcached_return_t fetch(std::string &key,
176
+ std::vector<char> &ret_val,
177
+ uint32_t &flags,
178
+ uint64_t &cas_value)
179
+ {
180
+ memcached_return_t rc;
181
+
182
+ memcached_result_st *result;
183
+ if ((result= memcached_fetch_result(memc, NULL, &rc)))
184
+ {
185
+ // Key
186
+ key.assign(memcached_result_key_value(result), memcached_result_key_length(result));
187
+
188
+ // Actual value, null terminated
189
+ ret_val.reserve(memcached_result_length(result) +1);
190
+ ret_val.assign(memcached_result_value(result),
191
+ memcached_result_value(result) +memcached_result_length(result));
192
+
193
+ // Misc
194
+ flags= memcached_result_flags(result);
195
+ cas_value= memcached_result_cas(result);
196
+ }
197
+ memcached_result_free(result);
198
+
199
+ return rc;
200
+ }
201
+
202
+ memcached_return_t fetch(std::string &key,
203
+ std::vector<char> &ret_val)
204
+ {
205
+ uint32_t flags= 0;
206
+ uint64_t cas_value= 0;
207
+
208
+ return fetch(key, ret_val, flags, cas_value);
209
+ }
210
+
211
+ /**
212
+ * Fetches an individual value from the server.
213
+ *
214
+ * @param[in] key key of object whose value to get
215
+ * @param[out] ret_val object that is retrieved is stored in
216
+ * this vector
217
+ * @return true on success; false otherwise
218
+ */
219
+ bool get(const std::string &key, std::vector<char> &ret_val)
220
+ {
221
+ uint32_t flags= 0;
222
+ memcached_return_t rc;
223
+ size_t value_length= 0;
224
+
225
+ char *value= memcached_get(memc, key.c_str(), key.length(),
226
+ &value_length, &flags, &rc);
227
+ if (value != NULL && ret_val.empty())
228
+ {
229
+ ret_val.reserve(value_length);
230
+ ret_val.assign(value, value + value_length);
231
+ free(value);
232
+ return true;
233
+ }
234
+
235
+ return false;
236
+ }
237
+
238
+ /**
239
+ * Fetches an individual from a server which is specified by
240
+ * the master_key parameter that is used for determining which
241
+ * server an object was stored in if key partitioning was
242
+ * used for storage.
243
+ *
244
+ * @param[in] master_key key that specifies server object is stored on
245
+ * @param[in] key key of object whose value to get
246
+ * @param[out] ret_val object that is retrieved is stored in
247
+ * this vector
248
+ * @return true on success; false otherwise
249
+ */
250
+ bool getByKey(const std::string &master_key,
251
+ const std::string &key,
252
+ std::vector<char> &ret_val)
253
+ {
254
+ uint32_t flags= 0;
255
+ memcached_return_t rc;
256
+ size_t value_length= 0;
257
+
258
+ char *value= memcached_get_by_key(memc,
259
+ master_key.c_str(), master_key.length(),
260
+ key.c_str(), key.length(),
261
+ &value_length, &flags, &rc);
262
+ if (value)
263
+ {
264
+ ret_val.reserve(value_length);
265
+ ret_val.assign(value, value + value_length);
266
+ free(value);
267
+ return true;
268
+ }
269
+ return false;
270
+ }
271
+
272
+ /**
273
+ * Selects multiple keys at once. This method always
274
+ * works asynchronously.
275
+ *
276
+ * @param[in] keys vector of keys to select
277
+ * @return true if all keys are found
278
+ */
279
+ bool mget(std::vector<std::string> &keys)
280
+ {
281
+ std::vector<const char *> real_keys;
282
+ std::vector<size_t> key_len;
283
+ /*
284
+ * Construct an array which will contain the length
285
+ * of each of the strings in the input vector. Also, to
286
+ * interface with the memcached C API, we need to convert
287
+ * the vector of std::string's to a vector of char *.
288
+ */
289
+ real_keys.reserve(keys.size());
290
+ key_len.reserve(keys.size());
291
+
292
+ std::vector<std::string>::iterator it= keys.begin();
293
+
294
+ while (it != keys.end())
295
+ {
296
+ real_keys.push_back(const_cast<char *>((*it).c_str()));
297
+ key_len.push_back((*it).length());
298
+ ++it;
299
+ }
300
+
301
+ /*
302
+ * If the std::vector of keys is empty then we cannot
303
+ * call memcached_mget as we will get undefined behavior.
304
+ */
305
+ if (not real_keys.empty())
306
+ {
307
+ return memcached_success(memcached_mget(memc, &real_keys[0], &key_len[0], real_keys.size()));
308
+ }
309
+
310
+ return false;
311
+ }
312
+
313
+ /**
314
+ * Writes an object to the server. If the object already exists, it will
315
+ * overwrite the existing object. This method always returns true
316
+ * when using non-blocking mode unless a network error occurs.
317
+ *
318
+ * @param[in] key key of object to write to server
319
+ * @param[in] value value of object to write to server
320
+ * @param[in] expiration time to keep the object stored in the server for
321
+ * @param[in] flags flags to store with the object
322
+ * @return true on succcess; false otherwise
323
+ */
324
+ bool set(const std::string &key,
325
+ const std::vector<char> &value,
326
+ time_t expiration,
327
+ uint32_t flags)
328
+ {
329
+ memcached_return_t rc= memcached_set(memc,
330
+ key.c_str(), key.length(),
331
+ &value[0], value.size(),
332
+ expiration, flags);
333
+ return (rc == MEMCACHED_SUCCESS || rc == MEMCACHED_BUFFERED);
334
+ }
335
+
336
+ /**
337
+ * Writes an object to a server specified by the master_key parameter.
338
+ * If the object already exists, it will overwrite the existing object.
339
+ *
340
+ * @param[in] master_key key that specifies server to write to
341
+ * @param[in] key key of object to write to server
342
+ * @param[in] value value of object to write to server
343
+ * @param[in] expiration time to keep the object stored in the server for
344
+ * @param[in] flags flags to store with the object
345
+ * @return true on succcess; false otherwise
346
+ */
347
+ bool setByKey(const std::string &master_key,
348
+ const std::string &key,
349
+ const std::vector<char> &value,
350
+ time_t expiration,
351
+ uint32_t flags)
352
+ {
353
+ return memcached_success(memcached_set_by_key(memc, master_key.c_str(),
354
+ master_key.length(),
355
+ key.c_str(), key.length(),
356
+ &value[0], value.size(),
357
+ expiration,
358
+ flags));
359
+ }
360
+
361
+ /**
362
+ * Writes a list of objects to the server. Objects are specified by
363
+ * 2 vectors - 1 vector of keys and 1 vector of values.
364
+ *
365
+ * @param[in] keys vector of keys of objects to write to server
366
+ * @param[in] values vector of values of objects to write to server
367
+ * @param[in] expiration time to keep the objects stored in server for
368
+ * @param[in] flags flags to store with the objects
369
+ * @return true on success; false otherwise
370
+ */
371
+ bool setAll(std::vector<std::string> &keys,
372
+ std::vector< std::vector<char> *> &values,
373
+ time_t expiration,
374
+ uint32_t flags)
375
+ {
376
+ bool retval= true;
377
+ std::vector<std::string>::iterator key_it= keys.begin();
378
+ std::vector< std::vector<char> *>::iterator val_it= values.begin();
379
+ while (key_it != keys.end())
380
+ {
381
+ retval= set((*key_it), *(*val_it), expiration, flags);
382
+ if (retval == false)
383
+ {
384
+ return retval;
385
+ }
386
+ ++key_it;
387
+ ++val_it;
388
+ }
389
+ return retval;
390
+ }
391
+
392
+ /**
393
+ * Writes a list of objects to the server. Objects are specified by
394
+ * a map of keys to values.
395
+ *
396
+ * @param[in] key_value_map map of keys and values to store in server
397
+ * @param[in] expiration time to keep the objects stored in server for
398
+ * @param[in] flags flags to store with the objects
399
+ * @return true on success; false otherwise
400
+ */
401
+ bool setAll(std::map<const std::string, std::vector<char> > &key_value_map,
402
+ time_t expiration,
403
+ uint32_t flags)
404
+ {
405
+ bool retval= true;
406
+ std::map<const std::string, std::vector<char> >::iterator it= key_value_map.begin();
407
+
408
+ while (it != key_value_map.end())
409
+ {
410
+ retval= set(it->first, it->second, expiration, flags);
411
+ if (retval == false)
412
+ {
413
+ // We should tell the user what the key that failed was
414
+ return false;
415
+ }
416
+ ++it;
417
+ }
418
+ return true;
419
+ }
420
+
421
+ /**
422
+ * Increment the value of the object associated with the specified
423
+ * key by the offset given. The resulting value is saved in the value
424
+ * parameter.
425
+ *
426
+ * @param[in] key key of object in server whose value to increment
427
+ * @param[in] offset amount to increment object's value by
428
+ * @param[out] value store the result of the increment here
429
+ * @return true on success; false otherwise
430
+ */
431
+ bool increment(const std::string &key, uint32_t offset, uint64_t *value)
432
+ {
433
+ return memcached_success(memcached_increment(memc, key.c_str(), key.length(), offset, value));
434
+ }
435
+
436
+ /**
437
+ * Decrement the value of the object associated with the specified
438
+ * key by the offset given. The resulting value is saved in the value
439
+ * parameter.
440
+ *
441
+ * @param[in] key key of object in server whose value to decrement
442
+ * @param[in] offset amount to increment object's value by
443
+ * @param[out] value store the result of the decrement here
444
+ * @return true on success; false otherwise
445
+ */
446
+ bool decrement(const std::string &key, uint32_t offset, uint64_t *value)
447
+ {
448
+ return memcached_success(memcached_decrement(memc, key.c_str(),
449
+ key.length(),
450
+ offset, value));
451
+ }
452
+
453
+
454
+ /**
455
+ * Add an object with the specified key and value to the server. This
456
+ * function returns false if the object already exists on the server.
457
+ *
458
+ * @param[in] key key of object to add
459
+ * @param[in] value of object to add
460
+ * @return true on success; false otherwise
461
+ */
462
+ bool add(const std::string &key, const std::vector<char> &value)
463
+ {
464
+ return memcached_success(memcached_add(memc, key.c_str(), key.length(),
465
+ &value[0], value.size(), 0, 0));
466
+ }
467
+
468
+ /**
469
+ * Add an object with the specified key and value to the server. This
470
+ * function returns false if the object already exists on the server. The
471
+ * server to add the object to is specified by the master_key parameter.
472
+ *
473
+ * @param[in[ master_key key of server to add object to
474
+ * @param[in] key key of object to add
475
+ * @param[in] value of object to add
476
+ * @return true on success; false otherwise
477
+ */
478
+ bool addByKey(const std::string &master_key,
479
+ const std::string &key,
480
+ const std::vector<char> &value)
481
+ {
482
+ return memcached_success(memcached_add_by_key(memc,
483
+ master_key.c_str(),
484
+ master_key.length(),
485
+ key.c_str(),
486
+ key.length(),
487
+ &value[0],
488
+ value.size(),
489
+ 0, 0));
490
+ }
491
+
492
+ /**
493
+ * Replaces an object on the server. This method only succeeds
494
+ * if the object is already present on the server.
495
+ *
496
+ * @param[in] key key of object to replace
497
+ * @param[in[ value value to replace object with
498
+ * @return true on success; false otherwise
499
+ */
500
+ bool replace(const std::string &key, const std::vector<char> &value)
501
+ {
502
+ return memcached_success(memcached_replace(memc, key.c_str(), key.length(),
503
+ &value[0], value.size(),
504
+ 0, 0));
505
+ }
506
+
507
+ /**
508
+ * Replaces an object on the server. This method only succeeds
509
+ * if the object is already present on the server. The server
510
+ * to replace the object on is specified by the master_key param.
511
+ *
512
+ * @param[in] master_key key of server to replace object on
513
+ * @param[in] key key of object to replace
514
+ * @param[in[ value value to replace object with
515
+ * @return true on success; false otherwise
516
+ */
517
+ bool replaceByKey(const std::string &master_key,
518
+ const std::string &key,
519
+ const std::vector<char> &value)
520
+ {
521
+ return memcached_success(memcached_replace_by_key(memc,
522
+ master_key.c_str(),
523
+ master_key.length(),
524
+ key.c_str(),
525
+ key.length(),
526
+ &value[0],
527
+ value.size(),
528
+ 0, 0));
529
+ }
530
+
531
+ /**
532
+ * Places a segment of data before the last piece of data stored.
533
+ *
534
+ * @param[in] key key of object whose value we will prepend data to
535
+ * @param[in] value data to prepend to object's value
536
+ * @return true on success; false otherwise
537
+ */
538
+ bool prepend(const std::string &key, const std::vector<char> &value)
539
+ {
540
+ return memcached_success(memcached_prepend(memc, key.c_str(), key.length(),
541
+ &value[0], value.size(), 0, 0));
542
+ }
543
+
544
+ /**
545
+ * Places a segment of data before the last piece of data stored. The
546
+ * server on which the object where we will be prepending data is stored
547
+ * on is specified by the master_key parameter.
548
+ *
549
+ * @param[in] master_key key of server where object is stored
550
+ * @param[in] key key of object whose value we will prepend data to
551
+ * @param[in] value data to prepend to object's value
552
+ * @return true on success; false otherwise
553
+ */
554
+ bool prependByKey(const std::string &master_key,
555
+ const std::string &key,
556
+ const std::vector<char> &value)
557
+ {
558
+ return memcached_success(memcached_prepend_by_key(memc,
559
+ master_key.c_str(),
560
+ master_key.length(),
561
+ key.c_str(),
562
+ key.length(),
563
+ &value[0],
564
+ value.size(),
565
+ 0,
566
+ 0));
567
+ }
568
+
569
+ /**
570
+ * Places a segment of data at the end of the last piece of data stored.
571
+ *
572
+ * @param[in] key key of object whose value we will append data to
573
+ * @param[in] value data to append to object's value
574
+ * @return true on success; false otherwise
575
+ */
576
+ bool append(const std::string &key, const std::vector<char> &value)
577
+ {
578
+ return memcached_success(memcached_append(memc,
579
+ key.c_str(),
580
+ key.length(),
581
+ &value[0],
582
+ value.size(),
583
+ 0, 0));
584
+ }
585
+
586
+ /**
587
+ * Places a segment of data at the end of the last piece of data stored. The
588
+ * server on which the object where we will be appending data is stored
589
+ * on is specified by the master_key parameter.
590
+ *
591
+ * @param[in] master_key key of server where object is stored
592
+ * @param[in] key key of object whose value we will append data to
593
+ * @param[in] value data to append to object's value
594
+ * @return true on success; false otherwise
595
+ */
596
+ bool appendByKey(const std::string &master_key,
597
+ const std::string &key,
598
+ const std::vector<char> &value)
599
+ {
600
+ return memcached_success(memcached_append_by_key(memc,
601
+ master_key.c_str(),
602
+ master_key.length(),
603
+ key.c_str(),
604
+ key.length(),
605
+ &value[0],
606
+ value.size(),
607
+ 0, 0));
608
+ }
609
+
610
+ /**
611
+ * Overwrite data in the server as long as the cas_arg value
612
+ * is still the same in the server.
613
+ *
614
+ * @param[in] key key of object in server
615
+ * @param[in] value value to store for object in server
616
+ * @param[in] cas_arg "cas" value
617
+ */
618
+ bool cas(const std::string &key,
619
+ const std::vector<char> &value,
620
+ uint64_t cas_arg)
621
+ {
622
+ return memcached_success(memcached_cas(memc, key.c_str(), key.length(),
623
+ &value[0], value.size(),
624
+ 0, 0, cas_arg));
625
+ }
626
+
627
+ /**
628
+ * Overwrite data in the server as long as the cas_arg value
629
+ * is still the same in the server. The server to use is
630
+ * specified by the master_key parameter.
631
+ *
632
+ * @param[in] master_key specifies server to operate on
633
+ * @param[in] key key of object in server
634
+ * @param[in] value value to store for object in server
635
+ * @param[in] cas_arg "cas" value
636
+ */
637
+ bool casByKey(const std::string &master_key,
638
+ const std::string &key,
639
+ const std::vector<char> &value,
640
+ uint64_t cas_arg)
641
+ {
642
+ return memcached_success(memcached_cas_by_key(memc,
643
+ master_key.c_str(),
644
+ master_key.length(),
645
+ key.c_str(),
646
+ key.length(),
647
+ &value[0],
648
+ value.size(),
649
+ 0, 0, cas_arg));
650
+ }
651
+
652
+ /**
653
+ * Delete an object from the server specified by the key given.
654
+ *
655
+ * @param[in] key key of object to delete
656
+ * @return true on success; false otherwise
657
+ */
658
+ bool remove(const std::string &key)
659
+ {
660
+ return memcached_success(memcached_delete(memc, key.c_str(), key.length(), 0));
661
+ }
662
+
663
+ /**
664
+ * Delete an object from the server specified by the key given.
665
+ *
666
+ * @param[in] key key of object to delete
667
+ * @param[in] expiration time to delete the object after
668
+ * @return true on success; false otherwise
669
+ */
670
+ bool remove(const std::string &key, time_t expiration)
671
+ {
672
+ return memcached_success(memcached_delete(memc,
673
+ key.c_str(),
674
+ key.length(),
675
+ expiration));
676
+ }
677
+
678
+ /**
679
+ * Delete an object from the server specified by the key given.
680
+ *
681
+ * @param[in] master_key specifies server to remove object from
682
+ * @param[in] key key of object to delete
683
+ * @return true on success; false otherwise
684
+ */
685
+ bool removeByKey(const std::string &master_key,
686
+ const std::string &key)
687
+ {
688
+ return memcached_success(memcached_delete_by_key(memc,
689
+ master_key.c_str(),
690
+ master_key.length(),
691
+ key.c_str(),
692
+ key.length(),
693
+ 0));
694
+ }
695
+
696
+ /**
697
+ * Delete an object from the server specified by the key given.
698
+ *
699
+ * @param[in] master_key specifies server to remove object from
700
+ * @param[in] key key of object to delete
701
+ * @param[in] expiration time to delete the object after
702
+ * @return true on success; false otherwise
703
+ */
704
+ bool removeByKey(const std::string &master_key,
705
+ const std::string &key,
706
+ time_t expiration)
707
+ {
708
+ return memcached_success(memcached_delete_by_key(memc,
709
+ master_key.c_str(),
710
+ master_key.length(),
711
+ key.c_str(),
712
+ key.length(),
713
+ expiration));
714
+ }
715
+
716
+ /**
717
+ * Wipe the contents of memcached servers.
718
+ *
719
+ * @param[in] expiration time to wait until wiping contents of
720
+ * memcached servers
721
+ * @return true on success; false otherwise
722
+ */
723
+ bool flush(time_t expiration= 0)
724
+ {
725
+ return memcached_success(memcached_flush(memc, expiration));
726
+ }
727
+
728
+ /**
729
+ * Get the library version string.
730
+ * @return std::string containing a copy of the library version string.
731
+ */
732
+ const std::string libVersion() const
733
+ {
734
+ const char *ver= memcached_lib_version();
735
+ const std::string version(ver);
736
+ return version;
737
+ }
738
+
739
+ /**
740
+ * Retrieve memcached statistics. Populate a std::map with the retrieved
741
+ * stats. Each server will map to another std::map of the key:value stats.
742
+ *
743
+ * @param[out] stats_map a std::map to be populated with the memcached
744
+ * stats
745
+ * @return true on success; false otherwise
746
+ */
747
+ bool getStats(std::map< std::string, std::map<std::string, std::string> >
748
+ &stats_map)
749
+ {
750
+ memcached_return_t rc;
751
+ memcached_stat_st *stats= memcached_stat(memc, NULL, &rc);
752
+
753
+ if (rc != MEMCACHED_SUCCESS &&
754
+ rc != MEMCACHED_SOME_ERRORS)
755
+ {
756
+ return false;
757
+ }
758
+
759
+ uint32_t server_count= memcached_server_count(memc);
760
+
761
+ /*
762
+ * For each memcached server, construct a std::map for its stats and add
763
+ * it to the std::map of overall stats.
764
+ */
765
+ for (uint32_t x= 0; x < server_count; x++)
766
+ {
767
+ memcached_server_instance_st instance=
768
+ memcached_server_instance_by_position(memc, x);
769
+ std::ostringstream strstm;
770
+ std::string server_name(memcached_server_name(instance));
771
+ server_name.append(":");
772
+ strstm << memcached_server_port(instance);
773
+ server_name.append(strstm.str());
774
+
775
+ std::map<std::string, std::string> server_stats;
776
+ char **list= NULL;
777
+ char **ptr= NULL;
778
+
779
+ list= memcached_stat_get_keys(memc, &stats[x], &rc);
780
+ for (ptr= list; *ptr; ptr++)
781
+ {
782
+ char *value= memcached_stat_get_value(memc, &stats[x], *ptr, &rc);
783
+ server_stats[*ptr]= value;
784
+ free(value);
785
+ }
786
+
787
+ stats_map[server_name]= server_stats;
788
+ free(list);
789
+ }
790
+
791
+ memcached_stat_free(memc, stats);
792
+ return true;
793
+ }
794
+
795
+ private:
796
+ memcached_st *memc;
797
+ };
798
+
799
+ }