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
,
21 const memcached_st
*memc
)
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
);
35 WATCHPOINT_ASSERT(memc
->options
.is_initialized
);
37 /* Saving malloc calls :) */
40 ptr
->options
.is_allocated
= false;
44 ptr
= libmemcached_malloc(memc
, sizeof(memcached_result_st
));
49 ptr
->options
.is_allocated
= true;
52 ptr
->options
.is_initialized
= true;
54 _result_init(ptr
, memc
);
57 memcached_string_create(memc
, &ptr
->value
, 0);
58 WATCHPOINT_ASSERT_INITIALIZED(&ptr
->value
);
59 WATCHPOINT_ASSERT(ptr
->value
.string
== NULL
);
64 void memcached_result_reset(memcached_result_st
*ptr
)
67 memcached_string_reset(&ptr
->value
);
70 ptr
->item_expiration
= 0;
73 void memcached_result_free(memcached_result_st
*ptr
)
78 memcached_string_free(&ptr
->value
);
80 if (memcached_is_allocated(ptr
))
82 WATCHPOINT_ASSERT(ptr
->root
); // Without a root, that means that result was not properly initialized.
83 libmemcached_free(ptr
->root
, ptr
);
87 ptr
->options
.is_initialized
= false;
91 memcached_return_t
memcached_result_set_value(memcached_result_st
*ptr
,
95 return memcached_string_append(&ptr
->value
, value
, length
);