ref_ptr<statement> fetch(std::string const &query) { ref_ptr<statement> st; statements_type::iterator p = statements.find(query); if(p==statements.end()) return st; st=p->second.stat; lru.erase(p->second.lru_ptr); statements.erase(p); size --; return st; }
void insert(ref_ptr<statement> st) { statements_type::iterator p; if((p=statements.find(st->sql_query()))!=statements.end()) { p->second.stat = st; lru.erase(p->second.lru_ptr); lru.push_front(p); p->second.lru_ptr = lru.begin(); } else { if(size > 0 && size >= max_size) { statements.erase(lru.back()); lru.pop_back(); size--; } std::pair<statements_type::iterator, bool> ins = statements.insert(std::make_pair(st->sql_query(), entry())); p = ins.first; p->second.stat = st; lru.push_front(p); p->second.lru_ptr = lru.begin(); size ++; } }