Major clean-ups. Migrating to C++11.
[invirt/third/libt4.git] / lock_server_cache_rsm.h
1 #ifndef lock_server_cache_rsm_h
2 #define lock_server_cache_rsm_h
3
4 #include <string>
5
6 #include <map>
7 #include <vector>
8 #include "lock_protocol.h"
9 #include "rpc/rpc.h"
10 #include "rsm_state_transfer.h"
11 #include "rsm.h"
12 #include "rpc/fifo.h"
13 #include "lock.h"
14
15 using std::string;
16 using std::pair;
17 using std::list;
18 using std::map;
19
20 typedef string callback;
21 typedef pair<callback, lock_protocol::xid_t> holder;
22
23 class lock_state {
24 public:
25     lock_state();
26     bool held;
27     holder held_by;
28     list<holder> wanted_by;
29     map<callback, lock_protocol::xid_t> old_requests;
30     mutex m;
31     lock_state& operator=(const lock_state&);
32 };
33
34 typedef map<lock_protocol::lockid_t, lock_state> lock_map;
35
36 class lock_server_cache_rsm : public rsm_state_transfer {
37     private:
38         int nacquire;
39         mutex lock_table_lock;
40         lock_map lock_table;
41         lock_state &get_lock_state(lock_protocol::lockid_t lid);
42         fifo<lock_protocol::lockid_t> retry_fifo;
43         fifo<lock_protocol::lockid_t> revoke_fifo;
44         class rsm *rsm;
45     public:
46         lock_server_cache_rsm(class rsm *rsm = 0);
47         lock_protocol::status stat(lock_protocol::lockid_t, int &);
48         void revoker();
49         void retryer();
50         string marshal_state();
51         void unmarshal_state(string state);
52         int acquire(lock_protocol::lockid_t, string id, lock_protocol::xid_t, int &);
53         int release(lock_protocol::lockid_t, string id, lock_protocol::xid_t, int &);
54 };
55
56 #endif