1 #include "netdictcache.h"
2 #include "netdictplugin.h"
12 NetDictResponse *get_cache_resp(const char *key);
13 void save_cache_resp(const char *key, NetDictResponse *resp);
15 static const unsigned int resp_pool_size = 50;
18 NetDictResponse *resp;
20 std::vector<RespElement *> resp_pool;
21 size_t cur_resp_pool_pos;
24 static std::map<std::string, RespCache> dictresp_map;
26 RespCache::RespCache()
28 resp_pool.resize(resp_pool_size);
29 for (size_t i = 0; i< resp_pool_size; i++) {
32 cur_resp_pool_pos = 0;
35 RespCache::~RespCache()
37 for (std::vector<RespElement *>::iterator i = resp_pool.begin(); i != resp_pool.end(); ++i) {
45 NetDictResponse *RespCache::get_cache_resp(const char *key)
47 for (std::vector<RespElement *>::iterator i = resp_pool.begin(); i != resp_pool.end(); ++i) {
49 if ((*i)->key == key) {
57 void RespCache::save_cache_resp(const char *key, NetDictResponse *resp)
59 if (resp_pool[cur_resp_pool_pos]) {
60 delete resp_pool[cur_resp_pool_pos]->resp;
61 delete resp_pool[cur_resp_pool_pos];
63 resp_pool[cur_resp_pool_pos] = new RespElement();
64 resp_pool[cur_resp_pool_pos]->key = key;
65 resp_pool[cur_resp_pool_pos]->resp = resp;
67 if (cur_resp_pool_pos == resp_pool_size) {
68 cur_resp_pool_pos = 0;
72 static RespCache &get_response_cache(const char *dict)
74 std::map<std::string, RespCache>::iterator i = dictresp_map.find(dict);
75 if (i == dictresp_map.end()) {
76 std::pair<std::map<std::string, RespCache>::iterator, bool> result;
77 result = dictresp_map.insert(std::pair<std::string, RespCache>(dict, RespCache()));
78 return result.first->second;
84 NetDictResponse *netdict_get_cache_resp(const char *dict, const char *key)
86 RespCache &resp_cache = get_response_cache(dict);
87 return resp_cache.get_cache_resp(key);
90 void netdict_save_cache_resp(const char *dict, const char *key, NetDictResponse *resp)
92 RespCache &resp_cache = get_response_cache(dict);
93 resp_cache.save_cache_resp(key, resp);