Menu

[r126]: / framework / branches / cache_support / cache.h  Maximize  Restore  History

Download this file

63 lines (54 with data), 1.6 kB

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
#ifndef CACHE_H
#define CACHE_H
#include <pthread.h>
#include <boost/shared_ptr.hpp>
#include <boost/shared_array.hpp>
#include <string>
#include <list>
#include <map>
using boost::shared_ptr;
using boost::shared_array;
using namespace std;
class Base_Cache {
protected:
string deflate(string const &s);
public:
virtual string insert(string const &key, string const &input)
{
return deflate(input);
};
virtual bool fetch_string(string const &key,string &output) { return false; };
virtual bool fetch_gzip(string const &key,string &output) { return false; };
virtual void drop(string const &key) {};
virtual void drop_prefix(string const &prefix) {};
virtual ~Base_Cache(){};
};
class Memory_Cache : public Base_Cache
{
pthread_mutex_t lru_lock;
pthread_rwlock_t lock;
unsigned limit;
struct Container {
list<map<string,Container>::iterator>::iterator lru_ptr;
string compressed;
string text;
Container(string c,
string const &s) : compressed(c), text(s)
{};
};
typedef map<string,Container> map_t;
typedef map_t::iterator map_iterator_t;
map_t data;
list<map_iterator_t> lru;
map_iterator_t fetch(string const &key);
public:
Memory_Cache(int size) : limit(size) {};
virtual string insert(string const &key, string const &input);
virtual bool fetch_string(string const &key,string &output);
virtual bool fetch_gzip(string const &key,string &output);
virtual void drop(string const &key);
virtual void drop_prefix(string const &prefix);
virtual ~Memory_Cache() {};
};
extern shared_ptr<Base_Cache> global_cache;
#endif
MongoDB Logo MongoDB