Menu

[r362]: / framework / trunk / process_cache.h  Maximize  Restore  History

Download this file

78 lines (66 with data), 2.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
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
#ifndef CPPCMS_PROC_CHACHE_H
#define CPPCMS_PROC_CHACHE_H
#include "base_cache.h"
#include "cache_interface.h"
#include "pthread.h"
#include <map>
#include <list>
#include <sys/types.h>
#include "shmem_allocator.h"
namespace cppcms {
class process_cache;
class process_cache_factory : public cache_factory{
process_cache *cache;
static ::pid_t owner_pid;
public:
static shmem_control *mem;
process_cache_factory(size_t memsize,char const *file);
virtual ~process_cache_factory();
virtual base_cache *get() const;
virtual void del(base_cache *p) const;
};
using namespace std;
class process_cache : public base_cache {
pthread_mutex_t lru_mutex;
pthread_rwlock_t access_lock;
typedef std::basic_string<char,std::char_traits<char>,shmem_allocator<char,process_cache_factory::mem> > shr_string;
struct container {
shr_string data;
typedef map<shr_string,container,std::less<shr_string>,
shmem_allocator<std::pair<shr_string,container>,process_cache_factory::mem > > primary_map;
typedef primary_map::iterator pointer;
typedef list<pointer,shmem_allocator<pointer,process_cache_factory::mem> > pointer_list;
pointer_list::iterator lru;
typedef multimap<shr_string,pointer,std::less<shr_string>,
shmem_allocator<std::pair<shr_string,pointer>,process_cache_factory::mem > > secondary_map;
list<secondary_map::iterator,shmem_allocator<secondary_map::iterator,process_cache_factory::mem> > triggers;
typedef multimap<time_t,pointer,std::less<time_t>,
shmem_allocator<std::pair<time_t,pointer>,process_cache_factory::mem > > timeout_map;
timeout_map::iterator timeout;
};
typedef container::pointer pointer;
container::primary_map primary;
container::secondary_map triggers;
typedef container::secondary_map::iterator triggers_ptr;
container::timeout_map timeout;
typedef container::timeout_map::iterator timeout_ptr;
container::pointer_list lru;
typedef container::pointer_list::iterator lru_ptr;
unsigned memsize;
shr_string *get(string const &key,set<string> *triggers);
void delete_node(pointer p);
int fd;
public:
process_cache(size_t memsize);
virtual bool fetch_page(string const &key,string &output,bool gzip);
virtual bool fetch(string const &key,archive &a,set<string> &tags);
virtual void rise(string const &trigger);
virtual void clear();
virtual void stats(unsigned &keys,unsigned &triggers);
virtual void store(string const &key,set<string> const &triggers,time_t timeout,archive const &a);
virtual ~process_cache();
void *operator new(size_t n);
void operator delete (void *p);
};
}
#endif
MongoDB Logo MongoDB