2 * Copyright (C) 2006-2009 Brian Aker
5 * Use and distribution licensed under the BSD license. See
6 * the COPYING file in the parent directory for full text.
8 * Summary: Functions to manipulate the result structure.
13 memcached_result_st are used to internally represent the return values from
14 memcached. We use a structure so that long term as identifiers are added
15 to memcached we will be able to absorb new attributes without having
16 to addjust the entire API.
20 static inline void _result_init(memcached_result_st
*self
,
24 self
->item_expiration
= 0;
31 memcached_result_st
*memcached_result_create(const memcached_st
*memc
,
32 memcached_result_st
*ptr
)
34 WATCHPOINT_ASSERT(memc
);
36 /* Saving malloc calls :) */
39 ptr
->options
.is_allocated
= false;
43 ptr
= libmemcached_malloc(memc
, sizeof(memcached_result_st
));
48 ptr
->options
.is_allocated
= true;
51 ptr
->options
.is_initialized
= true;
53 _result_init(ptr
, (memcached_st
*)memc
);
55 WATCHPOINT_SET(ptr
->value
.options
.is_initialized
= false);
56 memcached_string_create(memc
, &ptr
->value
, 0);
57 WATCHPOINT_ASSERT_INITIALIZED(&ptr
->value
);
58 WATCHPOINT_ASSERT(ptr
->value
.string
== NULL
);
63 void memcached_result_reset(memcached_result_st
*ptr
)
66 memcached_string_reset(&ptr
->value
);
69 ptr
->item_expiration
= 0;
72 void memcached_result_free(memcached_result_st
*ptr
)
77 memcached_string_free(&ptr
->value
);
79 if (memcached_is_allocated(ptr
))
81 WATCHPOINT_ASSERT(ptr
->root
); // Without a root, that means that result was not properly initialized.
82 libmemcached_free(ptr
->root
, ptr
);
86 ptr
->options
.is_initialized
= false;
90 memcached_return_t
memcached_result_set_value(memcached_result_st
*ptr
,
94 memcached_return_t rc
= memcached_string_append(&ptr
->value
, value
, length
);
96 if (rc
== MEMCACHED_MEMORY_ALLOCATION_FAILURE
)
98 memcached_set_errno(ptr
->root
, errno
, NULL
);
104 const char *memcached_result_key_value(const memcached_result_st
*self
)
106 return self
->key_length
? self
->item_key
: NULL
;
109 size_t memcached_result_key_length(const memcached_result_st
*self
)
111 return self
->key_length
;
114 const char *memcached_result_value(const memcached_result_st
*self
)
116 const memcached_string_st
*sptr
= &self
->value
;
117 return memcached_string_value(sptr
);
120 size_t memcached_result_length(const memcached_result_st
*self
)
122 const memcached_string_st
*sptr
= &self
->value
;
123 return memcached_string_length(sptr
);
126 uint32_t memcached_result_flags(const memcached_result_st
*self
)
128 return self
->item_flags
;
131 uint64_t memcached_result_cas(const memcached_result_st
*self
)
133 return self
->item_cas
;
136 void memcached_result_set_flags(memcached_result_st
*self
, uint32_t flags
)
138 self
->item_flags
= flags
;
141 void memcached_result_set_expiration(memcached_result_st
*self
, time_t expiration
)
143 self
->item_expiration
= expiration
;