Ditto 1.1.3
with_read_txn.hpp
1#ifndef _DITTO_WITH_READ_TXN_
2#define _DITTO_WITH_READ_TXN_
3
4#include "internal_errors.hpp"
5
6#include "dittoffi.hpp"
7#include "safer_ffi_utils.hpp"
8
9#include <functional>
10
11namespace ditto {
12template <typename T>
13inline T with_read_txn(::CDitto *ditto,
14 std::function<T(CReadTransaction *)> f) {
15 CReadTransaction *txn = nullptr;
16 assert_lmdb_success(EXTRACT_RESULT(txn, ditto_read_transaction(ditto), .txn));
17 T value = f(txn);
18 ditto_read_transaction_free(txn);
19 return value;
20}
21
22template <>
23inline void with_read_txn(::CDitto *ditto,
24 std::function<void(CReadTransaction *)> f) {
25 CReadTransaction *txn = nullptr;
26 assert_lmdb_success(EXTRACT_RESULT(txn, ditto_read_transaction(ditto), .txn));
27 f(txn);
28 ditto_read_transaction_free(txn);
29}
30} // namespace ditto
31#endif