-
Notifications
You must be signed in to change notification settings - Fork 0
/
callback.h
120 lines (94 loc) · 2.26 KB
/
callback.h
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
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
#pragma once
#include <memory>
#include <cassert>
#include "cqueue.h"
#include "paxos.pb.h"
#include "utils.h"
namespace glog {
template <typename StorageType>
class ReadCallBack {
public:
ReadCallBack(StorageType& storage)
: storage_(storage)
{
}
std::unique_ptr<paxos::HardState>
operator()(uint64_t logid, uint64_t index)
{
assert(0 < index);
return storage_.Get(logid, index);
}
private:
StorageType& storage_;
};
template <typename StorageType>
class WriteCallBack {
public:
WriteCallBack(StorageType& storage)
: storage_(storage)
{
}
int operator()(const paxos::HardState& hs)
{
return storage_.Set(hs);
}
private:
StorageType& storage_;
};
class SendCallBack {
public:
SendCallBack(
CQueue<paxos::Message>& msg_queue)
: msg_queue_(msg_queue)
{
}
int operator()(const paxos::Message& rsp_msg)
{
assert(0 < rsp_msg.index());
logdebug("TESTINFO logid %" PRIu64 " index %" PRIu64 " send msg",
rsp_msg.logid(), rsp_msg.index());
msg_queue_.Push(std::make_unique<paxos::Message>(rsp_msg));
return 0;
}
private:
CQueue<paxos::Message>& msg_queue_;
};
//template <typename StorageType>
//class CallBack {
//
//public:
// CallBack(
// StorageType& storage,
// CQueue<std::unique_ptr<paxos::Message>>& msg_queue)
// : storage_(storage)
// , msg_queue_(msg_queue)
// {
//
// }
//
// int operator()(
// std::unique_ptr<paxos::HardState> hs,
// std::unique_ptr<paxos::Message> msg)
// {
// int ret = 0;
// if (nullptr != hs) {
// assert(0 < hs->index());
// ret = storage_.Set(*hs);
// logdebug("TEST index %" PRIu64 " store hs ret %d",
// hs->index(), ret);
// }
//
// if (0 == ret && nullptr != msg) {
// assert(0 < msg->index());
// logdebug("TEST index %" PRIu64 " send msg", msg->index());
// msg_queue_.Push(move(msg));
// }
//
// return ret;
// }
//
//private:
// StorageType& storage_;
// CQueue<std::unique_ptr<paxos::Message>>& msg_queue_;
//};
} // namespace glog