Merge in code for C++ compiling of libmemcached.
[awesomized/libmemcached] / libmemcached / callback.cc
1 /* LibMemcached
2 * Copyright (C) 2006-2009 Brian Aker
3 * All rights reserved.
4 *
5 * Use and distribution licensed under the BSD license. See
6 * the COPYING file in the parent directory for full text.
7 *
8 * Summary: Change any of the possible callbacks.
9 *
10 */
11
12 #include <libmemcached/common.h>
13 #include <sys/types.h>
14
15 #pragma GCC diagnostic ignored "-Wstrict-aliasing"
16
17 /*
18 These functions provide data and function callback support
19 */
20
21 memcached_return_t memcached_callback_set(memcached_st *ptr,
22 const memcached_callback_t flag,
23 void *data)
24 {
25 switch (flag)
26 {
27 case MEMCACHED_CALLBACK_PREFIX_KEY:
28 {
29 return memcached_set_prefix_key(ptr, (char*)data, data ? strlen((char*)data) : 0);
30 }
31 case MEMCACHED_CALLBACK_USER_DATA:
32 {
33 ptr->user_data= data;
34 break;
35 }
36 case MEMCACHED_CALLBACK_CLEANUP_FUNCTION:
37 {
38 memcached_cleanup_fn func= *(memcached_cleanup_fn *)&data;
39 ptr->on_cleanup= func;
40 break;
41 }
42 case MEMCACHED_CALLBACK_CLONE_FUNCTION:
43 {
44 memcached_clone_fn func= *(memcached_clone_fn *)&data;
45 ptr->on_clone= func;
46 break;
47 }
48 #ifdef MEMCACHED_ENABLE_DEPRECATED
49 case MEMCACHED_CALLBACK_MALLOC_FUNCTION:
50 {
51 memcached_malloc_function func= *(memcached_malloc_fn *)&data;
52 ptr->call_malloc= func;
53 break;
54 }
55 case MEMCACHED_CALLBACK_REALLOC_FUNCTION:
56 {
57 memcached_realloc_function func= *(memcached_realloc_fn *)&data;
58 ptr->call_realloc= func;
59 break;
60 }
61 case MEMCACHED_CALLBACK_FREE_FUNCTION:
62 {
63 memcached_free_function func= *(memcached_free_fn *)&data;
64 ptr->call_free= func;
65 break;
66 }
67 #endif
68 case MEMCACHED_CALLBACK_GET_FAILURE:
69 {
70 memcached_trigger_key_fn func= *(memcached_trigger_key_fn *)&data;
71 ptr->get_key_failure= func;
72 break;
73 }
74 case MEMCACHED_CALLBACK_DELETE_TRIGGER:
75 {
76 memcached_trigger_delete_key_fn func= *(memcached_trigger_delete_key_fn *)&data;
77 ptr->delete_trigger= func;
78 break;
79 }
80 case MEMCACHED_CALLBACK_MAX:
81 default:
82 return MEMCACHED_FAILURE;
83 }
84
85 return MEMCACHED_SUCCESS;
86 }
87
88 void *memcached_callback_get(memcached_st *ptr,
89 const memcached_callback_t flag,
90 memcached_return_t *error)
91 {
92 memcached_return_t local_error;
93
94 if (!error)
95 error = &local_error;
96
97 switch (flag)
98 {
99 case MEMCACHED_CALLBACK_PREFIX_KEY:
100 {
101 if (ptr->prefix_key)
102 {
103 *error= MEMCACHED_SUCCESS;
104 return (void *)memcached_array_string(ptr->prefix_key);
105 }
106 else
107 {
108 *error= MEMCACHED_FAILURE;
109 return NULL;
110 }
111 }
112 case MEMCACHED_CALLBACK_USER_DATA:
113 {
114 *error= ptr->user_data ? MEMCACHED_SUCCESS : MEMCACHED_FAILURE;
115 return (void *)ptr->user_data;
116 }
117 case MEMCACHED_CALLBACK_CLEANUP_FUNCTION:
118 {
119 *error= ptr->on_cleanup ? MEMCACHED_SUCCESS : MEMCACHED_FAILURE;
120 return *(void **)&ptr->on_cleanup;
121 }
122 case MEMCACHED_CALLBACK_CLONE_FUNCTION:
123 {
124 *error= ptr->on_clone ? MEMCACHED_SUCCESS : MEMCACHED_FAILURE;
125 return *(void **)&ptr->on_clone;
126 }
127 #ifdef MEMCACHED_ENABLE_DEPRECATED
128 case MEMCACHED_CALLBACK_MALLOC_FUNCTION:
129 {
130 *error= ptr->call_malloc ? MEMCACHED_SUCCESS : MEMCACHED_FAILURE;
131 return *(void **)&ptr->call_malloc;
132 }
133 case MEMCACHED_CALLBACK_REALLOC_FUNCTION:
134 {
135 *error= ptr->call_realloc ? MEMCACHED_SUCCESS : MEMCACHED_FAILURE;
136 return *(void **)&ptr->call_realloc;
137 }
138 case MEMCACHED_CALLBACK_FREE_FUNCTION:
139 {
140 *error= ptr->call_free ? MEMCACHED_SUCCESS : MEMCACHED_FAILURE;
141 return *(void **)&ptr->call_free;
142 }
143 #endif
144 case MEMCACHED_CALLBACK_GET_FAILURE:
145 {
146 *error= ptr->get_key_failure ? MEMCACHED_SUCCESS : MEMCACHED_FAILURE;
147 return *(void **)&ptr->get_key_failure;
148 }
149 case MEMCACHED_CALLBACK_DELETE_TRIGGER:
150 {
151 *error= ptr->delete_trigger ? MEMCACHED_SUCCESS : MEMCACHED_FAILURE;
152 return *(void **)&ptr->delete_trigger;
153 }
154 case MEMCACHED_CALLBACK_MAX:
155 default:
156 WATCHPOINT_ASSERT(0);
157 *error= MEMCACHED_FAILURE;
158 return NULL;
159 }
160 }