-
Notifications
You must be signed in to change notification settings - Fork 2
/
db-identity.h
170 lines (154 loc) · 3.05 KB
/
db-identity.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
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
#ifndef DB_IDENTITY_H
#define DB_IDENTITY_H 1
#include <string>
#ifdef ENABLE_LMDB
#include <lmdb.h>
#endif
#ifdef ENABLE_MDBX
#include <mdbx.h>
#endif
#include "utillora.h"
#ifdef ENABLE_MDBX
#define MDB_SET_RANGE MDBX_SET_RANGE
#define MDB_FIRST MDBX_FIRST
#define MDB_NEXT MDBX_NEXT
#define MDB_PREV MDBX_PREV
#define MDB_SUCCESS MDBX_SUCCESS
#define MDB_NOTFOUND MDBX_NOTFOUND
#define MDB_BUSY MDBX_BUSY
#define MDB_cursor_op MDBX_cursor_op
#define MDB_env MDBX_env
#define MDB_dbi MDBX_dbi
#define MDB_txn MDBX_txn
#define MDB_cursor MDBX_cursor
#define MDB_val MDBX_val
#define mdb_env_create mdbx_env_create
#define mdb_env_open mdbx_env_open
#define mdb_env_close mdbx_env_close
#define mdb_txn_begin mdbx_txn_begin
#define mdb_txn_commit mdbx_txn_commit
#define mdb_txn_abort mdbx_txn_abort
#define mdb_strerror mdbx_strerror
#define mdb_dbi_open mdbx_dbi_open
#define mdb_dbi_close mdbx_dbi_close
#define mdb_put mdbx_put
#define mdb_del mdbx_del
#define mdb_cursor_open mdbx_cursor_open
#define mdb_cursor_get mdbx_cursor_get
#define mdb_cursor_del mdbx_cursor_del
#define MDB_envinfo MDBX_envinfo
#define mdb_env_info mdbx_env_info
#define mdb_env_set_mapsize mdbx_env_set_mapsize
#define me_mapsize mi_mapsize
#define mv_size iov_len
#define mv_data iov_base
#define MDB_MAP_FULL MDBX_MAP_FULL
#endif
#if defined ENABLE_MDBX or ENABLE_LMDB
/**
* @brief LMDB environment(transaction, cursor)
*/
class dbenv {
public:
MDB_env *env;
MDB_dbi dbi;
MDB_txn *txn;
MDB_cursor *cursor;
// open db options
std::string path;
int flags;
int mode;
dbenv(const std::string &path, int flags, int mode);
};
/**
* @brief Opens LMDB database file
* @param env created LMDB environment(transaction, cursor)
* @param config pass path, flags, file open mode
* @return true- success
*/
bool openDb
(
dbenv *env
);
/**
* @brief Close LMDB database file
* @param config pass path, flags, file open mode
* @return true- success
*/
bool closeDb
(
dbenv *env
);
// callback, return true - stop request, false- continue
typedef bool (*OnRecord)
(
void *env,
DEVADDR *key,
DEVICEID *data
);
/**
* @brief Store address to the LMDB
* @param env database env
* @return 0 - success
*/
int putAddr
(
dbenv *env,
DEVADDR &addr,
DEVICEID &deviceid
);
/**
* @brief Get address
* @param env database env
* @param DEVADDR Networh address
* @param onLog callback
* @param onLogEnv object passed to callback
*/
int getAddr
(
dbenv *env,
const DEVADDR &addr,
DEVICEID &retval
);
/**
* @return count
*/
size_t count(
dbenv *env
);
/**
* @brief List address
* @param env database env
* @param onRecord callback
* @param onRecordEnv object passed to callback
*/
int lsAddr
(
dbenv *env,
OnRecord onRecord,
void *onRecordEnv
);
/**
* @brief remove address from the LMDB
* @param env database env
* @param DEVADDR Networh address
*/
int rmAddr
(
dbenv *env,
const DEVADDR &addr
);
/**
* Return max (as integer) address
*/
uint32_t getMaxAddrInt(
dbenv *env
);
/**
* Return max network part of address found in the database
*/
uint32_t getMaxDevNwkAddr(
dbenv *env
);
#endif
#endif