/root/bitcoin/src/support/events.h
Line | Count | Source (jump to first uncovered line) |
1 | | // Copyright (c) 2016-2018 The Bitcoin Core developers |
2 | | // Distributed under the MIT software license, see the accompanying |
3 | | // file COPYING or http://www.opensource.org/licenses/mit-license.php. |
4 | | |
5 | | #ifndef BITCOIN_SUPPORT_EVENTS_H |
6 | | #define BITCOIN_SUPPORT_EVENTS_H |
7 | | |
8 | | #include <ios> |
9 | | #include <memory> |
10 | | |
11 | | #include <event2/event.h> |
12 | | #include <event2/http.h> |
13 | | |
14 | | #define MAKE_RAII(type) \ |
15 | | /* deleter */\ |
16 | | struct type##_deleter {\ |
17 | 0 | void operator()(struct type* ob) {\ |
18 | 0 | type##_free(ob);\ |
19 | 0 | }\ Unexecuted instantiation: _ZN18event_base_deleterclEP10event_base Unexecuted instantiation: _ZN14evhttp_deleterclEP6evhttp Unexecuted instantiation: _ZN13event_deleterclEP5event Unexecuted instantiation: _ZN22evhttp_request_deleterclEP14evhttp_request Unexecuted instantiation: _ZN25evhttp_connection_deleterclEP17evhttp_connection |
20 | | };\ |
21 | | /* unique ptr typedef */\ |
22 | | typedef std::unique_ptr<struct type, type##_deleter> raii_##type |
23 | | |
24 | | MAKE_RAII(event_base); |
25 | | MAKE_RAII(event); |
26 | | MAKE_RAII(evhttp); |
27 | | MAKE_RAII(evhttp_request); |
28 | | MAKE_RAII(evhttp_connection); |
29 | | |
30 | 0 | inline raii_event_base obtain_event_base() { |
31 | 0 | auto result = raii_event_base(event_base_new()); |
32 | 0 | if (!result.get()) |
33 | 0 | throw std::runtime_error("cannot create event_base"); |
34 | 0 | return result; |
35 | 0 | } |
36 | | |
37 | 0 | inline raii_event obtain_event(struct event_base* base, evutil_socket_t s, short events, event_callback_fn cb, void* arg) { |
38 | 0 | return raii_event(event_new(base, s, events, cb, arg)); |
39 | 0 | } |
40 | | |
41 | 0 | inline raii_evhttp obtain_evhttp(struct event_base* base) { |
42 | 0 | return raii_evhttp(evhttp_new(base)); |
43 | 0 | } |
44 | | |
45 | 0 | inline raii_evhttp_request obtain_evhttp_request(void(*cb)(struct evhttp_request *, void *), void *arg) { |
46 | 0 | return raii_evhttp_request(evhttp_request_new(cb, arg)); |
47 | 0 | } |
48 | | |
49 | 0 | inline raii_evhttp_connection obtain_evhttp_connection_base(struct event_base* base, std::string host, uint16_t port) { |
50 | 0 | auto result = raii_evhttp_connection(evhttp_connection_base_new(base, nullptr, host.c_str(), port)); |
51 | 0 | if (!result.get()) |
52 | 0 | throw std::runtime_error("create connection failed"); |
53 | 0 | return result; |
54 | 0 | } |
55 | | |
56 | | #endif // BITCOIN_SUPPORT_EVENTS_H |