X-Git-Url: https://git.m6w6.name/?a=blobdiff_plain;f=libmemcached%2Fmemcached.hpp;h=58fff4df7fcc0401f8b2c738bf32d51cf96cb5cb;hb=9fd31c03436acf24c593dc3a77c905eb137ef570;hp=cd6a18d179f69b6a9c8a5adca115a91d80c9fb77;hpb=b764fb28893e62e6616ae09545738c7ceec60f44;p=awesomized%2Flibmemcached diff --git a/libmemcached/memcached.hpp b/libmemcached/memcached.hpp index cd6a18d1..58fff4df 100644 --- a/libmemcached/memcached.hpp +++ b/libmemcached/memcached.hpp @@ -117,7 +117,17 @@ public: */ bool configure(const std::string &configuration) { - return memcached_success(memcached_parse_configuration(memc, configuration.c_str(), configuration.size())); + memcached_st *new_memc= memcached(configuration.c_str(), configuration.size()); + + if (new_memc) + { + memcached_free(memc); + memc= new_memc; + + return true; + } + + return false; } /** @@ -163,30 +173,41 @@ public: * @return a memcached return structure */ memcached_return_t fetch(std::string &key, - std::vector &ret_val) + std::vector &ret_val, + uint32_t &flags, + uint64_t &cas_value) { - char ret_key[MEMCACHED_MAX_KEY]; - size_t value_length= 0; - size_t key_length= 0; memcached_return_t rc; - uint32_t flags= 0; - char *value= memcached_fetch(memc, ret_key, &key_length, - &value_length, &flags, &rc); - if (value && ret_val.empty()) - { - ret_val.reserve(value_length); - ret_val.assign(value, value + value_length); - key.assign(ret_key, key_length); - free(value); - } - else if (value) + + memcached_result_st *result; + if ((result= memcached_fetch_result(memc, NULL, &rc))) { - free(value); + // Key + key.assign(memcached_result_key_value(result), memcached_result_key_length(result)); + + // Actual value, null terminated + ret_val.reserve(memcached_result_length(result) +1); + ret_val.assign(memcached_result_value(result), + memcached_result_value(result) +memcached_result_length(result)); + + // Misc + flags= memcached_result_flags(result); + cas_value= memcached_result_cas(result); } + memcached_result_free(result); return rc; } + memcached_return_t fetch(std::string &key, + std::vector &ret_val) + { + uint32_t flags= 0; + uint64_t cas_value= 0; + + return fetch(key, ret_val, flags, cas_value); + } + /** * Fetches an individual value from the server. * @@ -210,6 +231,7 @@ public: free(value); return true; } + return false; } @@ -698,7 +720,7 @@ public: * memcached servers * @return true on success; false otherwise */ - bool flush(time_t expiration) + bool flush(time_t expiration= 0) { return memcached_success(memcached_flush(memc, expiration)); }