mdbxmou 0.1.26
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.github/workflows/ci.yml +32 -0
- package/.github/workflows/publish.yml +27 -0
- package/.gitmodules +3 -0
- package/CMakeLists.txt +53 -0
- package/LICENSE +201 -0
- package/README.md +639 -0
- package/build.js +11 -0
- package/deps/libmdbx/.clang-format +3 -0
- package/deps/libmdbx/.cmake-format.yaml +3 -0
- package/deps/libmdbx/.le.ini +40 -0
- package/deps/libmdbx/CMakeLists.txt +1269 -0
- package/deps/libmdbx/COPYRIGHT +159 -0
- package/deps/libmdbx/ChangeLog.md +2786 -0
- package/deps/libmdbx/GNUmakefile +950 -0
- package/deps/libmdbx/LICENSE +177 -0
- package/deps/libmdbx/Makefile +16 -0
- package/deps/libmdbx/NOTICE +39 -0
- package/deps/libmdbx/README.md +863 -0
- package/deps/libmdbx/TODO.md +43 -0
- package/deps/libmdbx/cmake/compiler.cmake +1221 -0
- package/deps/libmdbx/cmake/profile.cmake +58 -0
- package/deps/libmdbx/cmake/utils.cmake +524 -0
- package/deps/libmdbx/conanfile.py +323 -0
- package/deps/libmdbx/docs/Doxyfile.in +2734 -0
- package/deps/libmdbx/docs/_preface.md +47 -0
- package/deps/libmdbx/docs/_restrictions.md +248 -0
- package/deps/libmdbx/docs/_starting.md +245 -0
- package/deps/libmdbx/docs/_toc.md +34 -0
- package/deps/libmdbx/docs/header.html +96 -0
- package/deps/libmdbx/example/CMakeLists.txt +6 -0
- package/deps/libmdbx/example/README.md +1 -0
- package/deps/libmdbx/example/example-mdbx.c +154 -0
- package/deps/libmdbx/example/sample-bdb.txt +77 -0
- package/deps/libmdbx/mdbx.h +6655 -0
- package/deps/libmdbx/mdbx.h++ +6428 -0
- package/deps/libmdbx/packages/buildroot/0001-package-libmdbx-new-package-library-database.patch +173 -0
- package/deps/libmdbx/src/alloy.c +54 -0
- package/deps/libmdbx/src/api-cold.c +543 -0
- package/deps/libmdbx/src/api-copy.c +912 -0
- package/deps/libmdbx/src/api-cursor.c +754 -0
- package/deps/libmdbx/src/api-dbi.c +315 -0
- package/deps/libmdbx/src/api-env.c +1434 -0
- package/deps/libmdbx/src/api-extra.c +165 -0
- package/deps/libmdbx/src/api-key-transform.c +197 -0
- package/deps/libmdbx/src/api-misc.c +286 -0
- package/deps/libmdbx/src/api-opts.c +575 -0
- package/deps/libmdbx/src/api-range-estimate.c +365 -0
- package/deps/libmdbx/src/api-txn-data.c +454 -0
- package/deps/libmdbx/src/api-txn.c +921 -0
- package/deps/libmdbx/src/atomics-ops.h +364 -0
- package/deps/libmdbx/src/atomics-types.h +97 -0
- package/deps/libmdbx/src/audit.c +109 -0
- package/deps/libmdbx/src/bits.md +34 -0
- package/deps/libmdbx/src/chk.c +1796 -0
- package/deps/libmdbx/src/cogs.c +309 -0
- package/deps/libmdbx/src/cogs.h +506 -0
- package/deps/libmdbx/src/coherency.c +170 -0
- package/deps/libmdbx/src/config.h.in +88 -0
- package/deps/libmdbx/src/cursor.c +2396 -0
- package/deps/libmdbx/src/cursor.h +391 -0
- package/deps/libmdbx/src/dbi.c +717 -0
- package/deps/libmdbx/src/dbi.h +142 -0
- package/deps/libmdbx/src/debug_begin.h +36 -0
- package/deps/libmdbx/src/debug_end.h +15 -0
- package/deps/libmdbx/src/dpl.c +486 -0
- package/deps/libmdbx/src/dpl.h +134 -0
- package/deps/libmdbx/src/dxb.c +1335 -0
- package/deps/libmdbx/src/env.c +607 -0
- package/deps/libmdbx/src/essentials.h +125 -0
- package/deps/libmdbx/src/gc-get.c +1345 -0
- package/deps/libmdbx/src/gc-put.c +970 -0
- package/deps/libmdbx/src/gc.h +40 -0
- package/deps/libmdbx/src/global.c +474 -0
- package/deps/libmdbx/src/internals.h +585 -0
- package/deps/libmdbx/src/layout-dxb.h +288 -0
- package/deps/libmdbx/src/layout-lck.h +289 -0
- package/deps/libmdbx/src/lck-posix.c +859 -0
- package/deps/libmdbx/src/lck-windows.c +607 -0
- package/deps/libmdbx/src/lck.c +174 -0
- package/deps/libmdbx/src/lck.h +110 -0
- package/deps/libmdbx/src/logging_and_debug.c +250 -0
- package/deps/libmdbx/src/logging_and_debug.h +159 -0
- package/deps/libmdbx/src/man1/mdbx_chk.1 +106 -0
- package/deps/libmdbx/src/man1/mdbx_copy.1 +95 -0
- package/deps/libmdbx/src/man1/mdbx_drop.1 +48 -0
- package/deps/libmdbx/src/man1/mdbx_dump.1 +101 -0
- package/deps/libmdbx/src/man1/mdbx_load.1 +105 -0
- package/deps/libmdbx/src/man1/mdbx_stat.1 +86 -0
- package/deps/libmdbx/src/mdbx.c++ +1837 -0
- package/deps/libmdbx/src/meta.c +656 -0
- package/deps/libmdbx/src/meta.h +168 -0
- package/deps/libmdbx/src/mvcc-readers.c +414 -0
- package/deps/libmdbx/src/node.c +365 -0
- package/deps/libmdbx/src/node.h +102 -0
- package/deps/libmdbx/src/ntdll.def +1246 -0
- package/deps/libmdbx/src/options.h +534 -0
- package/deps/libmdbx/src/osal.c +3485 -0
- package/deps/libmdbx/src/osal.h +587 -0
- package/deps/libmdbx/src/page-get.c +483 -0
- package/deps/libmdbx/src/page-iov.c +185 -0
- package/deps/libmdbx/src/page-iov.h +34 -0
- package/deps/libmdbx/src/page-ops.c +744 -0
- package/deps/libmdbx/src/page-ops.h +142 -0
- package/deps/libmdbx/src/pnl.c +236 -0
- package/deps/libmdbx/src/pnl.h +146 -0
- package/deps/libmdbx/src/preface.h +990 -0
- package/deps/libmdbx/src/proto.h +105 -0
- package/deps/libmdbx/src/refund.c +212 -0
- package/deps/libmdbx/src/sort.h +484 -0
- package/deps/libmdbx/src/spill.c +431 -0
- package/deps/libmdbx/src/spill.h +74 -0
- package/deps/libmdbx/src/table.c +107 -0
- package/deps/libmdbx/src/tls.c +551 -0
- package/deps/libmdbx/src/tls.h +43 -0
- package/deps/libmdbx/src/tools/chk.c +673 -0
- package/deps/libmdbx/src/tools/copy.c +166 -0
- package/deps/libmdbx/src/tools/drop.c +199 -0
- package/deps/libmdbx/src/tools/dump.c +515 -0
- package/deps/libmdbx/src/tools/load.c +831 -0
- package/deps/libmdbx/src/tools/stat.c +516 -0
- package/deps/libmdbx/src/tools/wingetopt.c +87 -0
- package/deps/libmdbx/src/tools/wingetopt.h +30 -0
- package/deps/libmdbx/src/tree-ops.c +1554 -0
- package/deps/libmdbx/src/tree-search.c +140 -0
- package/deps/libmdbx/src/txl.c +99 -0
- package/deps/libmdbx/src/txl.h +26 -0
- package/deps/libmdbx/src/txn.c +1083 -0
- package/deps/libmdbx/src/unaligned.h +205 -0
- package/deps/libmdbx/src/utils.c +32 -0
- package/deps/libmdbx/src/utils.h +76 -0
- package/deps/libmdbx/src/version.c.in +44 -0
- package/deps/libmdbx/src/walk.c +290 -0
- package/deps/libmdbx/src/walk.h +20 -0
- package/deps/libmdbx/src/windows-import.c +152 -0
- package/deps/libmdbx/src/windows-import.h +128 -0
- package/deps/libmdbx/test/CMakeLists.txt +317 -0
- package/deps/libmdbx/test/append.c++ +237 -0
- package/deps/libmdbx/test/base.h++ +92 -0
- package/deps/libmdbx/test/battery-tmux.sh +64 -0
- package/deps/libmdbx/test/cases.c++ +118 -0
- package/deps/libmdbx/test/chrono.c++ +134 -0
- package/deps/libmdbx/test/chrono.h++ +85 -0
- package/deps/libmdbx/test/config.c++ +643 -0
- package/deps/libmdbx/test/config.h++ +334 -0
- package/deps/libmdbx/test/copy.c++ +62 -0
- package/deps/libmdbx/test/dead.c++ +39 -0
- package/deps/libmdbx/test/dump-load.sh +40 -0
- package/deps/libmdbx/test/extra/crunched_delete.c++ +409 -0
- package/deps/libmdbx/test/extra/cursor_closing.c++ +410 -0
- package/deps/libmdbx/test/extra/dbi.c++ +229 -0
- package/deps/libmdbx/test/extra/doubtless_positioning.c++ +253 -0
- package/deps/libmdbx/test/extra/dupfix_addodd.c +94 -0
- package/deps/libmdbx/test/extra/dupfix_multiple.c++ +311 -0
- package/deps/libmdbx/test/extra/early_close_dbi.c++ +137 -0
- package/deps/libmdbx/test/extra/hex_base64_base58.c++ +118 -0
- package/deps/libmdbx/test/extra/maindb_ordinal.c++ +61 -0
- package/deps/libmdbx/test/extra/open.c++ +96 -0
- package/deps/libmdbx/test/extra/pcrf/README.md +2 -0
- package/deps/libmdbx/test/extra/pcrf/pcrf_test.c +380 -0
- package/deps/libmdbx/test/extra/probe.c++ +10 -0
- package/deps/libmdbx/test/extra/txn.c++ +407 -0
- package/deps/libmdbx/test/extra/upsert_alldups.c +193 -0
- package/deps/libmdbx/test/fork.c++ +263 -0
- package/deps/libmdbx/test/hill.c++ +447 -0
- package/deps/libmdbx/test/jitter.c++ +197 -0
- package/deps/libmdbx/test/keygen.c++ +393 -0
- package/deps/libmdbx/test/keygen.h++ +130 -0
- package/deps/libmdbx/test/log.c++ +358 -0
- package/deps/libmdbx/test/log.h++ +91 -0
- package/deps/libmdbx/test/main.c++ +706 -0
- package/deps/libmdbx/test/nested.c++ +318 -0
- package/deps/libmdbx/test/osal-unix.c++ +647 -0
- package/deps/libmdbx/test/osal-windows.c++ +440 -0
- package/deps/libmdbx/test/osal.h++ +41 -0
- package/deps/libmdbx/test/stochastic.sh +690 -0
- package/deps/libmdbx/test/stub/LICENSE +24 -0
- package/deps/libmdbx/test/stub/README.md +8 -0
- package/deps/libmdbx/test/stub/pthread_barrier.c +104 -0
- package/deps/libmdbx/test/stub/pthread_barrier.h +77 -0
- package/deps/libmdbx/test/test.c++ +1551 -0
- package/deps/libmdbx/test/test.h++ +298 -0
- package/deps/libmdbx/test/tmux.conf +3 -0
- package/deps/libmdbx/test/try.c++ +30 -0
- package/deps/libmdbx/test/ttl.c++ +240 -0
- package/deps/libmdbx/test/utils.c++ +203 -0
- package/deps/libmdbx/test/utils.h++ +326 -0
- package/deps/libmdbx/test/valgrind_suppress.txt +536 -0
- package/lib/mdbx_evn_async.js +211 -0
- package/lib/mdbx_worker.js +195 -0
- package/lib/nativemou.js +6 -0
- package/package.json +38 -0
- package/src/async/envmou_close.cpp +34 -0
- package/src/async/envmou_close.hpp +32 -0
- package/src/async/envmou_copy_to.cpp +29 -0
- package/src/async/envmou_copy_to.hpp +38 -0
- package/src/async/envmou_keys.cpp +201 -0
- package/src/async/envmou_keys.hpp +50 -0
- package/src/async/envmou_open.cpp +38 -0
- package/src/async/envmou_open.hpp +33 -0
- package/src/async/envmou_query.cpp +167 -0
- package/src/async/envmou_query.hpp +53 -0
- package/src/dbimou.cpp +522 -0
- package/src/dbimou.hpp +82 -0
- package/src/env_arg0.hpp +24 -0
- package/src/envmou.cpp +445 -0
- package/src/envmou.hpp +116 -0
- package/src/modulemou.cpp +113 -0
- package/src/querymou.cpp +177 -0
- package/src/querymou.hpp +93 -0
- package/src/txnmou.cpp +254 -0
- package/src/txnmou.hpp +122 -0
- package/src/typemou.hpp +239 -0
- package/src/valuemou.hpp +194 -0
- package/test/async.js +67 -0
- package/test/e3.js +38 -0
- package/test/e4.js +89 -0
- package/test/e5.js +162 -0
- package/test/test-batch-ops.js +243 -0
- package/test/test-cursor-mode.js +84 -0
- package/test/test-multi-mode.js +87 -0
|
@@ -0,0 +1,534 @@
|
|
|
1
|
+
/// \copyright SPDX-License-Identifier: Apache-2.0
|
|
2
|
+
/// \author Леонид Юрьев aka Leonid Yuriev <leo@yuriev.ru> \date 2015-2025
|
|
3
|
+
|
|
4
|
+
/*******************************************************************************
|
|
5
|
+
*******************************************************************************
|
|
6
|
+
*
|
|
7
|
+
* BUILD TIME
|
|
8
|
+
*
|
|
9
|
+
* #### ##### ##### # #### # # ####
|
|
10
|
+
* # # # # # # # # ## # #
|
|
11
|
+
* # # # # # # # # # # # ####
|
|
12
|
+
* # # ##### # # # # # # # #
|
|
13
|
+
* # # # # # # # # ## # #
|
|
14
|
+
* #### # # # #### # # ####
|
|
15
|
+
*
|
|
16
|
+
*
|
|
17
|
+
*/
|
|
18
|
+
|
|
19
|
+
#pragma once
|
|
20
|
+
|
|
21
|
+
#include "essentials.h"
|
|
22
|
+
|
|
23
|
+
/** \defgroup build_option Build options
|
|
24
|
+
* The libmdbx build options.
|
|
25
|
+
@{ */
|
|
26
|
+
|
|
27
|
+
/** Using fcntl(F_FULLFSYNC) with 5-10 times slowdown */
|
|
28
|
+
#define MDBX_OSX_WANNA_DURABILITY 0
|
|
29
|
+
/** Using fsync() with chance of data lost on power failure */
|
|
30
|
+
#define MDBX_OSX_WANNA_SPEED 1
|
|
31
|
+
|
|
32
|
+
#ifndef MDBX_APPLE_SPEED_INSTEADOF_DURABILITY
|
|
33
|
+
/** Choices \ref MDBX_OSX_WANNA_DURABILITY or \ref MDBX_OSX_WANNA_SPEED
|
|
34
|
+
* for OSX & iOS */
|
|
35
|
+
#define MDBX_APPLE_SPEED_INSTEADOF_DURABILITY MDBX_OSX_WANNA_DURABILITY
|
|
36
|
+
#endif /* MDBX_APPLE_SPEED_INSTEADOF_DURABILITY */
|
|
37
|
+
|
|
38
|
+
/** Controls checking PID against reuse DB environment after the fork() */
|
|
39
|
+
#ifndef MDBX_ENV_CHECKPID
|
|
40
|
+
#if defined(MADV_DONTFORK) || defined(_WIN32) || defined(_WIN64)
|
|
41
|
+
/* PID check could be omitted:
|
|
42
|
+
* - on Linux when madvise(MADV_DONTFORK) is available, i.e. after the fork()
|
|
43
|
+
* mapped pages will not be available for child process.
|
|
44
|
+
* - in Windows where fork() not available. */
|
|
45
|
+
#define MDBX_ENV_CHECKPID 0
|
|
46
|
+
#else
|
|
47
|
+
#define MDBX_ENV_CHECKPID 1
|
|
48
|
+
#endif
|
|
49
|
+
#define MDBX_ENV_CHECKPID_CONFIG "AUTO=" MDBX_STRINGIFY(MDBX_ENV_CHECKPID)
|
|
50
|
+
#elif !(MDBX_ENV_CHECKPID == 0 || MDBX_ENV_CHECKPID == 1)
|
|
51
|
+
#error MDBX_ENV_CHECKPID must be defined as 0 or 1
|
|
52
|
+
#else
|
|
53
|
+
#define MDBX_ENV_CHECKPID_CONFIG MDBX_STRINGIFY(MDBX_ENV_CHECKPID)
|
|
54
|
+
#endif /* MDBX_ENV_CHECKPID */
|
|
55
|
+
|
|
56
|
+
/** Controls checking transaction owner thread against misuse transactions from
|
|
57
|
+
* other threads. */
|
|
58
|
+
#ifndef MDBX_TXN_CHECKOWNER
|
|
59
|
+
#define MDBX_TXN_CHECKOWNER 1
|
|
60
|
+
#define MDBX_TXN_CHECKOWNER_CONFIG "AUTO=" MDBX_STRINGIFY(MDBX_TXN_CHECKOWNER)
|
|
61
|
+
#elif !(MDBX_TXN_CHECKOWNER == 0 || MDBX_TXN_CHECKOWNER == 1)
|
|
62
|
+
#error MDBX_TXN_CHECKOWNER must be defined as 0 or 1
|
|
63
|
+
#else
|
|
64
|
+
#define MDBX_TXN_CHECKOWNER_CONFIG MDBX_STRINGIFY(MDBX_TXN_CHECKOWNER)
|
|
65
|
+
#endif /* MDBX_TXN_CHECKOWNER */
|
|
66
|
+
|
|
67
|
+
/** Does a system have battery-backed Real-Time Clock or just a fake. */
|
|
68
|
+
#ifndef MDBX_TRUST_RTC
|
|
69
|
+
#if defined(__linux__) || defined(__gnu_linux__) || defined(__NetBSD__) || defined(__OpenBSD__)
|
|
70
|
+
#define MDBX_TRUST_RTC 0 /* a lot of embedded systems have a fake RTC */
|
|
71
|
+
#else
|
|
72
|
+
#define MDBX_TRUST_RTC 1
|
|
73
|
+
#endif
|
|
74
|
+
#define MDBX_TRUST_RTC_CONFIG "AUTO=" MDBX_STRINGIFY(MDBX_TRUST_RTC)
|
|
75
|
+
#elif !(MDBX_TRUST_RTC == 0 || MDBX_TRUST_RTC == 1)
|
|
76
|
+
#error MDBX_TRUST_RTC must be defined as 0 or 1
|
|
77
|
+
#else
|
|
78
|
+
#define MDBX_TRUST_RTC_CONFIG MDBX_STRINGIFY(MDBX_TRUST_RTC)
|
|
79
|
+
#endif /* MDBX_TRUST_RTC */
|
|
80
|
+
|
|
81
|
+
/** Controls online database auto-compactification during write-transactions. */
|
|
82
|
+
#ifndef MDBX_ENABLE_REFUND
|
|
83
|
+
#define MDBX_ENABLE_REFUND 1
|
|
84
|
+
#elif !(MDBX_ENABLE_REFUND == 0 || MDBX_ENABLE_REFUND == 1)
|
|
85
|
+
#error MDBX_ENABLE_REFUND must be defined as 0 or 1
|
|
86
|
+
#endif /* MDBX_ENABLE_REFUND */
|
|
87
|
+
|
|
88
|
+
/** Controls profiling of GC search and updates. */
|
|
89
|
+
#ifndef MDBX_ENABLE_PROFGC
|
|
90
|
+
#define MDBX_ENABLE_PROFGC 0
|
|
91
|
+
#elif !(MDBX_ENABLE_PROFGC == 0 || MDBX_ENABLE_PROFGC == 1)
|
|
92
|
+
#error MDBX_ENABLE_PROFGC must be defined as 0 or 1
|
|
93
|
+
#endif /* MDBX_ENABLE_PROFGC */
|
|
94
|
+
|
|
95
|
+
/** Controls gathering statistics for page operations. */
|
|
96
|
+
#ifndef MDBX_ENABLE_PGOP_STAT
|
|
97
|
+
#define MDBX_ENABLE_PGOP_STAT 1
|
|
98
|
+
#elif !(MDBX_ENABLE_PGOP_STAT == 0 || MDBX_ENABLE_PGOP_STAT == 1)
|
|
99
|
+
#error MDBX_ENABLE_PGOP_STAT must be defined as 0 or 1
|
|
100
|
+
#endif /* MDBX_ENABLE_PGOP_STAT */
|
|
101
|
+
|
|
102
|
+
/** Controls using Unix' mincore() to determine whether DB-pages
|
|
103
|
+
* are resident in memory. */
|
|
104
|
+
#ifndef MDBX_USE_MINCORE
|
|
105
|
+
#if defined(MINCORE_INCORE) || !(defined(_WIN32) || defined(_WIN64))
|
|
106
|
+
#define MDBX_USE_MINCORE 1
|
|
107
|
+
#else
|
|
108
|
+
#define MDBX_USE_MINCORE 0
|
|
109
|
+
#endif
|
|
110
|
+
#define MDBX_USE_MINCORE_CONFIG "AUTO=" MDBX_STRINGIFY(MDBX_USE_MINCORE)
|
|
111
|
+
#elif !(MDBX_USE_MINCORE == 0 || MDBX_USE_MINCORE == 1)
|
|
112
|
+
#error MDBX_USE_MINCORE must be defined as 0 or 1
|
|
113
|
+
#endif /* MDBX_USE_MINCORE */
|
|
114
|
+
|
|
115
|
+
/** Enables chunking long list of retired pages during huge transactions commit
|
|
116
|
+
* to avoid use sequences of pages. */
|
|
117
|
+
#ifndef MDBX_ENABLE_BIGFOOT
|
|
118
|
+
#define MDBX_ENABLE_BIGFOOT 1
|
|
119
|
+
#elif !(MDBX_ENABLE_BIGFOOT == 0 || MDBX_ENABLE_BIGFOOT == 1)
|
|
120
|
+
#error MDBX_ENABLE_BIGFOOT must be defined as 0 or 1
|
|
121
|
+
#endif /* MDBX_ENABLE_BIGFOOT */
|
|
122
|
+
|
|
123
|
+
/** Disable some checks to reduce an overhead and detection probability of
|
|
124
|
+
* database corruption to a values closer to the LMDB. */
|
|
125
|
+
#ifndef MDBX_DISABLE_VALIDATION
|
|
126
|
+
#define MDBX_DISABLE_VALIDATION 0
|
|
127
|
+
#elif !(MDBX_DISABLE_VALIDATION == 0 || MDBX_DISABLE_VALIDATION == 1)
|
|
128
|
+
#error MDBX_DISABLE_VALIDATION must be defined as 0 or 1
|
|
129
|
+
#endif /* MDBX_DISABLE_VALIDATION */
|
|
130
|
+
|
|
131
|
+
#ifndef MDBX_PNL_PREALLOC_FOR_RADIXSORT
|
|
132
|
+
#define MDBX_PNL_PREALLOC_FOR_RADIXSORT 1
|
|
133
|
+
#elif !(MDBX_PNL_PREALLOC_FOR_RADIXSORT == 0 || MDBX_PNL_PREALLOC_FOR_RADIXSORT == 1)
|
|
134
|
+
#error MDBX_PNL_PREALLOC_FOR_RADIXSORT must be defined as 0 or 1
|
|
135
|
+
#endif /* MDBX_PNL_PREALLOC_FOR_RADIXSORT */
|
|
136
|
+
|
|
137
|
+
#ifndef MDBX_DPL_PREALLOC_FOR_RADIXSORT
|
|
138
|
+
#define MDBX_DPL_PREALLOC_FOR_RADIXSORT 1
|
|
139
|
+
#elif !(MDBX_DPL_PREALLOC_FOR_RADIXSORT == 0 || MDBX_DPL_PREALLOC_FOR_RADIXSORT == 1)
|
|
140
|
+
#error MDBX_DPL_PREALLOC_FOR_RADIXSORT must be defined as 0 or 1
|
|
141
|
+
#endif /* MDBX_DPL_PREALLOC_FOR_RADIXSORT */
|
|
142
|
+
|
|
143
|
+
/** Controls dirty pages tracking, spilling and persisting in `MDBX_WRITEMAP`
|
|
144
|
+
* mode, i.e. disables in-memory database updating with consequent
|
|
145
|
+
* flush-to-disk/msync syscall.
|
|
146
|
+
*
|
|
147
|
+
* 0/OFF = Don't track dirty pages at all, don't spill ones, and use msync() to
|
|
148
|
+
* persist data. This is by-default on Linux and other systems where kernel
|
|
149
|
+
* provides properly LRU tracking and effective flushing on-demand.
|
|
150
|
+
*
|
|
151
|
+
* 1/ON = Tracking of dirty pages but with LRU labels for spilling and explicit
|
|
152
|
+
* persist ones by write(). This may be reasonable for goofy systems (Windows)
|
|
153
|
+
* which low performance of msync() and/or zany LRU tracking. */
|
|
154
|
+
#ifndef MDBX_AVOID_MSYNC
|
|
155
|
+
#if defined(_WIN32) || defined(_WIN64)
|
|
156
|
+
#define MDBX_AVOID_MSYNC 1
|
|
157
|
+
#else
|
|
158
|
+
#define MDBX_AVOID_MSYNC 0
|
|
159
|
+
#endif
|
|
160
|
+
#elif !(MDBX_AVOID_MSYNC == 0 || MDBX_AVOID_MSYNC == 1)
|
|
161
|
+
#error MDBX_AVOID_MSYNC must be defined as 0 or 1
|
|
162
|
+
#endif /* MDBX_AVOID_MSYNC */
|
|
163
|
+
|
|
164
|
+
/** Управляет механизмом поддержки разреженных наборов DBI-хендлов для снижения
|
|
165
|
+
* накладных расходов при запуске и обработке транзакций. */
|
|
166
|
+
#ifndef MDBX_ENABLE_DBI_SPARSE
|
|
167
|
+
#define MDBX_ENABLE_DBI_SPARSE 1
|
|
168
|
+
#elif !(MDBX_ENABLE_DBI_SPARSE == 0 || MDBX_ENABLE_DBI_SPARSE == 1)
|
|
169
|
+
#error MDBX_ENABLE_DBI_SPARSE must be defined as 0 or 1
|
|
170
|
+
#endif /* MDBX_ENABLE_DBI_SPARSE */
|
|
171
|
+
|
|
172
|
+
/** Управляет механизмом отложенного освобождения и поддержки пути быстрого
|
|
173
|
+
* открытия DBI-хендлов без захвата блокировок. */
|
|
174
|
+
#ifndef MDBX_ENABLE_DBI_LOCKFREE
|
|
175
|
+
#define MDBX_ENABLE_DBI_LOCKFREE 1
|
|
176
|
+
#elif !(MDBX_ENABLE_DBI_LOCKFREE == 0 || MDBX_ENABLE_DBI_LOCKFREE == 1)
|
|
177
|
+
#error MDBX_ENABLE_DBI_LOCKFREE must be defined as 0 or 1
|
|
178
|
+
#endif /* MDBX_ENABLE_DBI_LOCKFREE */
|
|
179
|
+
|
|
180
|
+
/** Controls sort order of internal page number lists.
|
|
181
|
+
* This mostly experimental/advanced option with not for regular MDBX users.
|
|
182
|
+
* \warning The database format depend on this option and libmdbx built with
|
|
183
|
+
* different option value are incompatible. */
|
|
184
|
+
#ifndef MDBX_PNL_ASCENDING
|
|
185
|
+
#define MDBX_PNL_ASCENDING 0
|
|
186
|
+
#elif !(MDBX_PNL_ASCENDING == 0 || MDBX_PNL_ASCENDING == 1)
|
|
187
|
+
#error MDBX_PNL_ASCENDING must be defined as 0 or 1
|
|
188
|
+
#endif /* MDBX_PNL_ASCENDING */
|
|
189
|
+
|
|
190
|
+
/** Avoid dependence from MSVC CRT and use ntdll.dll instead. */
|
|
191
|
+
#ifndef MDBX_WITHOUT_MSVC_CRT
|
|
192
|
+
#if defined(MDBX_BUILD_CXX) && !MDBX_BUILD_CXX
|
|
193
|
+
#define MDBX_WITHOUT_MSVC_CRT 1
|
|
194
|
+
#else
|
|
195
|
+
#define MDBX_WITHOUT_MSVC_CRT 0
|
|
196
|
+
#endif
|
|
197
|
+
#elif !(MDBX_WITHOUT_MSVC_CRT == 0 || MDBX_WITHOUT_MSVC_CRT == 1)
|
|
198
|
+
#error MDBX_WITHOUT_MSVC_CRT must be defined as 0 or 1
|
|
199
|
+
#endif /* MDBX_WITHOUT_MSVC_CRT */
|
|
200
|
+
|
|
201
|
+
/** Size of buffer used during copying a environment/database file. */
|
|
202
|
+
#ifndef MDBX_ENVCOPY_WRITEBUF
|
|
203
|
+
#define MDBX_ENVCOPY_WRITEBUF 1048576u
|
|
204
|
+
#elif MDBX_ENVCOPY_WRITEBUF < 65536u || MDBX_ENVCOPY_WRITEBUF > 1073741824u || MDBX_ENVCOPY_WRITEBUF % 65536u
|
|
205
|
+
#error MDBX_ENVCOPY_WRITEBUF must be defined in range 65536..1073741824 and be multiple of 65536
|
|
206
|
+
#endif /* MDBX_ENVCOPY_WRITEBUF */
|
|
207
|
+
|
|
208
|
+
/** Forces assertion checking. */
|
|
209
|
+
#ifndef MDBX_FORCE_ASSERTIONS
|
|
210
|
+
#define MDBX_FORCE_ASSERTIONS 0
|
|
211
|
+
#elif !(MDBX_FORCE_ASSERTIONS == 0 || MDBX_FORCE_ASSERTIONS == 1)
|
|
212
|
+
#error MDBX_FORCE_ASSERTIONS must be defined as 0 or 1
|
|
213
|
+
#endif /* MDBX_FORCE_ASSERTIONS */
|
|
214
|
+
|
|
215
|
+
/** Presumed malloc size overhead for each allocation
|
|
216
|
+
* to adjust allocations to be more aligned. */
|
|
217
|
+
#ifndef MDBX_ASSUME_MALLOC_OVERHEAD
|
|
218
|
+
#ifdef __SIZEOF_POINTER__
|
|
219
|
+
#define MDBX_ASSUME_MALLOC_OVERHEAD (__SIZEOF_POINTER__ * 2u)
|
|
220
|
+
#else
|
|
221
|
+
#define MDBX_ASSUME_MALLOC_OVERHEAD (sizeof(void *) * 2u)
|
|
222
|
+
#endif
|
|
223
|
+
#elif MDBX_ASSUME_MALLOC_OVERHEAD < 0 || MDBX_ASSUME_MALLOC_OVERHEAD > 64 || MDBX_ASSUME_MALLOC_OVERHEAD % 4
|
|
224
|
+
#error MDBX_ASSUME_MALLOC_OVERHEAD must be defined in range 0..64 and be multiple of 4
|
|
225
|
+
#endif /* MDBX_ASSUME_MALLOC_OVERHEAD */
|
|
226
|
+
|
|
227
|
+
/** If defined then enables integration with Valgrind,
|
|
228
|
+
* a memory analyzing tool. */
|
|
229
|
+
#ifndef ENABLE_MEMCHECK
|
|
230
|
+
#endif /* ENABLE_MEMCHECK */
|
|
231
|
+
|
|
232
|
+
/** If defined then enables use C11 atomics,
|
|
233
|
+
* otherwise detects ones availability automatically. */
|
|
234
|
+
#ifndef MDBX_HAVE_C11ATOMICS
|
|
235
|
+
#endif /* MDBX_HAVE_C11ATOMICS */
|
|
236
|
+
|
|
237
|
+
/** If defined then enables use the GCC's `__builtin_cpu_supports()`
|
|
238
|
+
* for runtime dispatching depending on the CPU's capabilities.
|
|
239
|
+
* \note Defining `MDBX_HAVE_BUILTIN_CPU_SUPPORTS` to `0` should avoided unless
|
|
240
|
+
* build for particular single-target platform, since on AMD64/x86 this disables
|
|
241
|
+
* dynamic choice (at runtime) of SSE2 / AVX2 / AVX512 instructions
|
|
242
|
+
* with fallback to non-accelerated baseline code. */
|
|
243
|
+
#ifndef MDBX_HAVE_BUILTIN_CPU_SUPPORTS
|
|
244
|
+
#if defined(__APPLE__) || defined(BIONIC)
|
|
245
|
+
/* Never use any modern features on Apple's or Google's OSes
|
|
246
|
+
* since a lot of troubles with compatibility and/or performance */
|
|
247
|
+
#define MDBX_HAVE_BUILTIN_CPU_SUPPORTS 0
|
|
248
|
+
#elif defined(__e2k__)
|
|
249
|
+
#define MDBX_HAVE_BUILTIN_CPU_SUPPORTS 0
|
|
250
|
+
#elif __has_builtin(__builtin_cpu_supports) || defined(__BUILTIN_CPU_SUPPORTS__) || \
|
|
251
|
+
(defined(__ia32__) && __GNUC_PREREQ(4, 8) && __GLIBC_PREREQ(2, 23))
|
|
252
|
+
#define MDBX_HAVE_BUILTIN_CPU_SUPPORTS 1
|
|
253
|
+
#else
|
|
254
|
+
#define MDBX_HAVE_BUILTIN_CPU_SUPPORTS 0
|
|
255
|
+
#endif
|
|
256
|
+
#elif !(MDBX_HAVE_BUILTIN_CPU_SUPPORTS == 0 || MDBX_HAVE_BUILTIN_CPU_SUPPORTS == 1)
|
|
257
|
+
#error MDBX_HAVE_BUILTIN_CPU_SUPPORTS must be defined as 0 or 1
|
|
258
|
+
#endif /* MDBX_HAVE_BUILTIN_CPU_SUPPORTS */
|
|
259
|
+
|
|
260
|
+
/** if enabled then instead of the returned error `MDBX_REMOTE`, only a warning is issued, when
|
|
261
|
+
* the database being opened in non-read-only mode is located in a file system exported via NFS. */
|
|
262
|
+
#ifndef MDBX_ENABLE_NON_READONLY_EXPORT
|
|
263
|
+
#define MDBX_ENABLE_NON_READONLY_EXPORT 0
|
|
264
|
+
#elif !(MDBX_ENABLE_NON_READONLY_EXPORT == 0 || MDBX_ENABLE_NON_READONLY_EXPORT == 1)
|
|
265
|
+
#error MDBX_ENABLE_NON_READONLY_EXPORT must be defined as 0 or 1
|
|
266
|
+
#endif /* MDBX_ENABLE_NON_READONLY_EXPORT */
|
|
267
|
+
|
|
268
|
+
//------------------------------------------------------------------------------
|
|
269
|
+
|
|
270
|
+
/** Win32 File Locking API for \ref MDBX_LOCKING */
|
|
271
|
+
#define MDBX_LOCKING_WIN32FILES -1
|
|
272
|
+
|
|
273
|
+
/** SystemV IPC semaphores for \ref MDBX_LOCKING */
|
|
274
|
+
#define MDBX_LOCKING_SYSV 5
|
|
275
|
+
|
|
276
|
+
/** POSIX-1 Shared anonymous semaphores for \ref MDBX_LOCKING */
|
|
277
|
+
#define MDBX_LOCKING_POSIX1988 1988
|
|
278
|
+
|
|
279
|
+
/** POSIX-2001 Shared Mutexes for \ref MDBX_LOCKING */
|
|
280
|
+
#define MDBX_LOCKING_POSIX2001 2001
|
|
281
|
+
|
|
282
|
+
/** POSIX-2008 Robust Mutexes for \ref MDBX_LOCKING */
|
|
283
|
+
#define MDBX_LOCKING_POSIX2008 2008
|
|
284
|
+
|
|
285
|
+
/** Advanced: Choices the locking implementation (autodetection by default). */
|
|
286
|
+
#if defined(_WIN32) || defined(_WIN64)
|
|
287
|
+
#define MDBX_LOCKING MDBX_LOCKING_WIN32FILES
|
|
288
|
+
#else
|
|
289
|
+
#ifndef MDBX_LOCKING
|
|
290
|
+
#if defined(_POSIX_THREAD_PROCESS_SHARED) && _POSIX_THREAD_PROCESS_SHARED >= 200112L && !defined(__FreeBSD__)
|
|
291
|
+
|
|
292
|
+
/* Some platforms define the EOWNERDEAD error code even though they
|
|
293
|
+
* don't support Robust Mutexes. If doubt compile with -MDBX_LOCKING=2001. */
|
|
294
|
+
#if defined(EOWNERDEAD) && _POSIX_THREAD_PROCESS_SHARED >= 200809L && \
|
|
295
|
+
((defined(_POSIX_THREAD_ROBUST_PRIO_INHERIT) && _POSIX_THREAD_ROBUST_PRIO_INHERIT > 0) || \
|
|
296
|
+
(defined(_POSIX_THREAD_ROBUST_PRIO_PROTECT) && _POSIX_THREAD_ROBUST_PRIO_PROTECT > 0) || \
|
|
297
|
+
defined(PTHREAD_MUTEX_ROBUST) || defined(PTHREAD_MUTEX_ROBUST_NP)) && \
|
|
298
|
+
(!defined(__GLIBC__) || __GLIBC_PREREQ(2, 10) /* troubles with Robust mutexes before 2.10 */)
|
|
299
|
+
#define MDBX_LOCKING MDBX_LOCKING_POSIX2008
|
|
300
|
+
#else
|
|
301
|
+
#define MDBX_LOCKING MDBX_LOCKING_POSIX2001
|
|
302
|
+
#endif
|
|
303
|
+
#elif defined(__sun) || defined(__SVR4) || defined(__svr4__)
|
|
304
|
+
#define MDBX_LOCKING MDBX_LOCKING_POSIX1988
|
|
305
|
+
#else
|
|
306
|
+
#define MDBX_LOCKING MDBX_LOCKING_SYSV
|
|
307
|
+
#endif
|
|
308
|
+
#define MDBX_LOCKING_CONFIG "AUTO=" MDBX_STRINGIFY(MDBX_LOCKING)
|
|
309
|
+
#else
|
|
310
|
+
#define MDBX_LOCKING_CONFIG MDBX_STRINGIFY(MDBX_LOCKING)
|
|
311
|
+
#endif /* MDBX_LOCKING */
|
|
312
|
+
#endif /* !Windows */
|
|
313
|
+
|
|
314
|
+
/** Advanced: Using POSIX OFD-locks (autodetection by default). */
|
|
315
|
+
#ifndef MDBX_USE_OFDLOCKS
|
|
316
|
+
#if ((defined(F_OFD_SETLK) && defined(F_OFD_SETLKW) && defined(F_OFD_GETLK)) || \
|
|
317
|
+
(defined(F_OFD_SETLK64) && defined(F_OFD_SETLKW64) && defined(F_OFD_GETLK64))) && \
|
|
318
|
+
!defined(MDBX_SAFE4QEMU) && !defined(__sun) /* OFD-lock are broken on Solaris */
|
|
319
|
+
#define MDBX_USE_OFDLOCKS 1
|
|
320
|
+
#else
|
|
321
|
+
#define MDBX_USE_OFDLOCKS 0
|
|
322
|
+
#endif
|
|
323
|
+
#define MDBX_USE_OFDLOCKS_CONFIG "AUTO=" MDBX_STRINGIFY(MDBX_USE_OFDLOCKS)
|
|
324
|
+
#elif !(MDBX_USE_OFDLOCKS == 0 || MDBX_USE_OFDLOCKS == 1)
|
|
325
|
+
#error MDBX_USE_OFDLOCKS must be defined as 0 or 1
|
|
326
|
+
#else
|
|
327
|
+
#define MDBX_USE_OFDLOCKS_CONFIG MDBX_STRINGIFY(MDBX_USE_OFDLOCKS)
|
|
328
|
+
#endif /* MDBX_USE_OFDLOCKS */
|
|
329
|
+
|
|
330
|
+
/** Advanced: Using sendfile() syscall (autodetection by default). */
|
|
331
|
+
#ifndef MDBX_USE_SENDFILE
|
|
332
|
+
#if ((defined(__linux__) || defined(__gnu_linux__)) && !defined(__ANDROID_API__)) || \
|
|
333
|
+
(defined(__ANDROID_API__) && __ANDROID_API__ >= 21)
|
|
334
|
+
#define MDBX_USE_SENDFILE 1
|
|
335
|
+
#else
|
|
336
|
+
#define MDBX_USE_SENDFILE 0
|
|
337
|
+
#endif
|
|
338
|
+
#elif !(MDBX_USE_SENDFILE == 0 || MDBX_USE_SENDFILE == 1)
|
|
339
|
+
#error MDBX_USE_SENDFILE must be defined as 0 or 1
|
|
340
|
+
#endif /* MDBX_USE_SENDFILE */
|
|
341
|
+
|
|
342
|
+
/** Advanced: Using copy_file_range() syscall (autodetection by default). */
|
|
343
|
+
#ifndef MDBX_USE_COPYFILERANGE
|
|
344
|
+
#if __GLIBC_PREREQ(2, 27) && defined(_GNU_SOURCE)
|
|
345
|
+
#define MDBX_USE_COPYFILERANGE 1
|
|
346
|
+
#else
|
|
347
|
+
#define MDBX_USE_COPYFILERANGE 0
|
|
348
|
+
#endif
|
|
349
|
+
#elif !(MDBX_USE_COPYFILERANGE == 0 || MDBX_USE_COPYFILERANGE == 1)
|
|
350
|
+
#error MDBX_USE_COPYFILERANGE must be defined as 0 or 1
|
|
351
|
+
#endif /* MDBX_USE_COPYFILERANGE */
|
|
352
|
+
|
|
353
|
+
//------------------------------------------------------------------------------
|
|
354
|
+
|
|
355
|
+
#ifndef MDBX_CPU_WRITEBACK_INCOHERENT
|
|
356
|
+
#if defined(__ia32__) || defined(__e2k__) || defined(__hppa) || defined(__hppa__) || defined(DOXYGEN)
|
|
357
|
+
#define MDBX_CPU_WRITEBACK_INCOHERENT 0
|
|
358
|
+
#else
|
|
359
|
+
#define MDBX_CPU_WRITEBACK_INCOHERENT 1
|
|
360
|
+
#endif
|
|
361
|
+
#elif !(MDBX_CPU_WRITEBACK_INCOHERENT == 0 || MDBX_CPU_WRITEBACK_INCOHERENT == 1)
|
|
362
|
+
#error MDBX_CPU_WRITEBACK_INCOHERENT must be defined as 0 or 1
|
|
363
|
+
#endif /* MDBX_CPU_WRITEBACK_INCOHERENT */
|
|
364
|
+
|
|
365
|
+
#ifndef MDBX_MMAP_INCOHERENT_FILE_WRITE
|
|
366
|
+
#ifdef __OpenBSD__
|
|
367
|
+
#define MDBX_MMAP_INCOHERENT_FILE_WRITE 1
|
|
368
|
+
#else
|
|
369
|
+
#define MDBX_MMAP_INCOHERENT_FILE_WRITE 0
|
|
370
|
+
#endif
|
|
371
|
+
#elif !(MDBX_MMAP_INCOHERENT_FILE_WRITE == 0 || MDBX_MMAP_INCOHERENT_FILE_WRITE == 1)
|
|
372
|
+
#error MDBX_MMAP_INCOHERENT_FILE_WRITE must be defined as 0 or 1
|
|
373
|
+
#endif /* MDBX_MMAP_INCOHERENT_FILE_WRITE */
|
|
374
|
+
|
|
375
|
+
#ifndef MDBX_MMAP_INCOHERENT_CPU_CACHE
|
|
376
|
+
#if defined(__mips) || defined(__mips__) || defined(__mips64) || defined(__mips64__) || defined(_M_MRX000) || \
|
|
377
|
+
defined(_MIPS_) || defined(__MWERKS__) || defined(__sgi)
|
|
378
|
+
/* MIPS has cache coherency issues. */
|
|
379
|
+
#define MDBX_MMAP_INCOHERENT_CPU_CACHE 1
|
|
380
|
+
#else
|
|
381
|
+
/* LY: assume no relevant mmap/dcache issues. */
|
|
382
|
+
#define MDBX_MMAP_INCOHERENT_CPU_CACHE 0
|
|
383
|
+
#endif
|
|
384
|
+
#elif !(MDBX_MMAP_INCOHERENT_CPU_CACHE == 0 || MDBX_MMAP_INCOHERENT_CPU_CACHE == 1)
|
|
385
|
+
#error MDBX_MMAP_INCOHERENT_CPU_CACHE must be defined as 0 or 1
|
|
386
|
+
#endif /* MDBX_MMAP_INCOHERENT_CPU_CACHE */
|
|
387
|
+
|
|
388
|
+
/** Assume system needs explicit syscall to sync/flush/write modified mapped
|
|
389
|
+
* memory. */
|
|
390
|
+
#ifndef MDBX_MMAP_NEEDS_JOLT
|
|
391
|
+
#if MDBX_MMAP_INCOHERENT_FILE_WRITE || MDBX_MMAP_INCOHERENT_CPU_CACHE || !(defined(__linux__) || defined(__gnu_linux__))
|
|
392
|
+
#define MDBX_MMAP_NEEDS_JOLT 1
|
|
393
|
+
#else
|
|
394
|
+
#define MDBX_MMAP_NEEDS_JOLT 0
|
|
395
|
+
#endif
|
|
396
|
+
#define MDBX_MMAP_NEEDS_JOLT_CONFIG "AUTO=" MDBX_STRINGIFY(MDBX_MMAP_NEEDS_JOLT)
|
|
397
|
+
#elif !(MDBX_MMAP_NEEDS_JOLT == 0 || MDBX_MMAP_NEEDS_JOLT == 1)
|
|
398
|
+
#error MDBX_MMAP_NEEDS_JOLT must be defined as 0 or 1
|
|
399
|
+
#endif /* MDBX_MMAP_NEEDS_JOLT */
|
|
400
|
+
|
|
401
|
+
#ifndef MDBX_64BIT_ATOMIC
|
|
402
|
+
#if MDBX_WORDBITS >= 64 || defined(DOXYGEN)
|
|
403
|
+
#define MDBX_64BIT_ATOMIC 1
|
|
404
|
+
#else
|
|
405
|
+
#define MDBX_64BIT_ATOMIC 0
|
|
406
|
+
#endif
|
|
407
|
+
#define MDBX_64BIT_ATOMIC_CONFIG "AUTO=" MDBX_STRINGIFY(MDBX_64BIT_ATOMIC)
|
|
408
|
+
#elif !(MDBX_64BIT_ATOMIC == 0 || MDBX_64BIT_ATOMIC == 1)
|
|
409
|
+
#error MDBX_64BIT_ATOMIC must be defined as 0 or 1
|
|
410
|
+
#else
|
|
411
|
+
#define MDBX_64BIT_ATOMIC_CONFIG MDBX_STRINGIFY(MDBX_64BIT_ATOMIC)
|
|
412
|
+
#endif /* MDBX_64BIT_ATOMIC */
|
|
413
|
+
|
|
414
|
+
#ifndef MDBX_64BIT_CAS
|
|
415
|
+
#if defined(__GCC_ATOMIC_LLONG_LOCK_FREE)
|
|
416
|
+
#if __GCC_ATOMIC_LLONG_LOCK_FREE > 1
|
|
417
|
+
#define MDBX_64BIT_CAS 1
|
|
418
|
+
#else
|
|
419
|
+
#define MDBX_64BIT_CAS 0
|
|
420
|
+
#endif
|
|
421
|
+
#elif defined(__CLANG_ATOMIC_LLONG_LOCK_FREE)
|
|
422
|
+
#if __CLANG_ATOMIC_LLONG_LOCK_FREE > 1
|
|
423
|
+
#define MDBX_64BIT_CAS 1
|
|
424
|
+
#else
|
|
425
|
+
#define MDBX_64BIT_CAS 0
|
|
426
|
+
#endif
|
|
427
|
+
#elif defined(ATOMIC_LLONG_LOCK_FREE)
|
|
428
|
+
#if ATOMIC_LLONG_LOCK_FREE > 1
|
|
429
|
+
#define MDBX_64BIT_CAS 1
|
|
430
|
+
#else
|
|
431
|
+
#define MDBX_64BIT_CAS 0
|
|
432
|
+
#endif
|
|
433
|
+
#elif defined(_MSC_VER) || defined(__APPLE__) || defined(DOXYGEN)
|
|
434
|
+
#define MDBX_64BIT_CAS 1
|
|
435
|
+
#elif !(MDBX_64BIT_CAS == 0 || MDBX_64BIT_CAS == 1)
|
|
436
|
+
#error MDBX_64BIT_CAS must be defined as 0 or 1
|
|
437
|
+
#else
|
|
438
|
+
#define MDBX_64BIT_CAS MDBX_64BIT_ATOMIC
|
|
439
|
+
#endif
|
|
440
|
+
#define MDBX_64BIT_CAS_CONFIG "AUTO=" MDBX_STRINGIFY(MDBX_64BIT_CAS)
|
|
441
|
+
#else
|
|
442
|
+
#define MDBX_64BIT_CAS_CONFIG MDBX_STRINGIFY(MDBX_64BIT_CAS)
|
|
443
|
+
#endif /* MDBX_64BIT_CAS */
|
|
444
|
+
|
|
445
|
+
#ifndef MDBX_UNALIGNED_OK
|
|
446
|
+
#if defined(__ALIGNED__) || defined(__SANITIZE_UNDEFINED__) || defined(ENABLE_UBSAN)
|
|
447
|
+
#define MDBX_UNALIGNED_OK 0 /* no unaligned access allowed */
|
|
448
|
+
#elif defined(__ARM_FEATURE_UNALIGNED)
|
|
449
|
+
#define MDBX_UNALIGNED_OK 4 /* ok unaligned for 32-bit words */
|
|
450
|
+
#elif defined(__e2k__) || defined(__elbrus__)
|
|
451
|
+
#if __iset__ > 4
|
|
452
|
+
#define MDBX_UNALIGNED_OK 8 /* ok unaligned for 64-bit words */
|
|
453
|
+
#else
|
|
454
|
+
#define MDBX_UNALIGNED_OK 4 /* ok unaligned for 32-bit words */
|
|
455
|
+
#endif
|
|
456
|
+
#elif defined(__ia32__)
|
|
457
|
+
#define MDBX_UNALIGNED_OK 8 /* ok unaligned for 64-bit words */
|
|
458
|
+
#elif __CLANG_PREREQ(5, 0) || __GNUC_PREREQ(5, 0)
|
|
459
|
+
/* expecting an optimization will well done, also this
|
|
460
|
+
* hushes false-positives from UBSAN (undefined behaviour sanitizer) */
|
|
461
|
+
#define MDBX_UNALIGNED_OK 0
|
|
462
|
+
#else
|
|
463
|
+
#define MDBX_UNALIGNED_OK 0 /* no unaligned access allowed */
|
|
464
|
+
#endif
|
|
465
|
+
#elif MDBX_UNALIGNED_OK == 1
|
|
466
|
+
#undef MDBX_UNALIGNED_OK
|
|
467
|
+
#define MDBX_UNALIGNED_OK 32 /* any unaligned access allowed */
|
|
468
|
+
#endif /* MDBX_UNALIGNED_OK */
|
|
469
|
+
|
|
470
|
+
#ifndef MDBX_CACHELINE_SIZE
|
|
471
|
+
#if defined(SYSTEM_CACHE_ALIGNMENT_SIZE)
|
|
472
|
+
#define MDBX_CACHELINE_SIZE SYSTEM_CACHE_ALIGNMENT_SIZE
|
|
473
|
+
#elif defined(__ia64__) || defined(__ia64) || defined(_M_IA64)
|
|
474
|
+
#define MDBX_CACHELINE_SIZE 128
|
|
475
|
+
#else
|
|
476
|
+
#define MDBX_CACHELINE_SIZE 64
|
|
477
|
+
#endif
|
|
478
|
+
#endif /* MDBX_CACHELINE_SIZE */
|
|
479
|
+
|
|
480
|
+
/* Max length of iov-vector passed to writev() call, used for auxilary writes */
|
|
481
|
+
#ifndef MDBX_AUXILARY_IOV_MAX
|
|
482
|
+
#define MDBX_AUXILARY_IOV_MAX 64
|
|
483
|
+
#endif
|
|
484
|
+
#if defined(IOV_MAX) && IOV_MAX < MDBX_AUXILARY_IOV_MAX
|
|
485
|
+
#undef MDBX_AUXILARY_IOV_MAX
|
|
486
|
+
#define MDBX_AUXILARY_IOV_MAX IOV_MAX
|
|
487
|
+
#endif /* MDBX_AUXILARY_IOV_MAX */
|
|
488
|
+
|
|
489
|
+
/* An extra/custom information provided during library build */
|
|
490
|
+
#ifndef MDBX_BUILD_METADATA
|
|
491
|
+
#define MDBX_BUILD_METADATA ""
|
|
492
|
+
#endif /* MDBX_BUILD_METADATA */
|
|
493
|
+
/** @} end of build options */
|
|
494
|
+
/*******************************************************************************
|
|
495
|
+
*******************************************************************************
|
|
496
|
+
******************************************************************************/
|
|
497
|
+
|
|
498
|
+
#ifndef DOXYGEN
|
|
499
|
+
|
|
500
|
+
/* In case the MDBX_DEBUG is undefined set it corresponding to NDEBUG */
|
|
501
|
+
#ifndef MDBX_DEBUG
|
|
502
|
+
#ifdef NDEBUG
|
|
503
|
+
#define MDBX_DEBUG 0
|
|
504
|
+
#else
|
|
505
|
+
#define MDBX_DEBUG 1
|
|
506
|
+
#endif
|
|
507
|
+
#endif
|
|
508
|
+
#if MDBX_DEBUG < 0 || MDBX_DEBUG > 2
|
|
509
|
+
#error "The MDBX_DEBUG must be defined to 0, 1 or 2"
|
|
510
|
+
#endif /* MDBX_DEBUG */
|
|
511
|
+
|
|
512
|
+
#else
|
|
513
|
+
|
|
514
|
+
/* !!! Actually this is a fake definitions for Doxygen !!! */
|
|
515
|
+
|
|
516
|
+
/** Controls enabling of debugging features.
|
|
517
|
+
*
|
|
518
|
+
* - `MDBX_DEBUG = 0` (by default) Disables any debugging features at all,
|
|
519
|
+
* including logging and assertion controls.
|
|
520
|
+
* Logging level and corresponding debug flags changing
|
|
521
|
+
* by \ref mdbx_setup_debug() will not have effect.
|
|
522
|
+
* - `MDBX_DEBUG > 0` Enables code for the debugging features (logging,
|
|
523
|
+
* assertions checking and internal audit).
|
|
524
|
+
* Simultaneously sets the default logging level
|
|
525
|
+
* to the `MDBX_DEBUG` value.
|
|
526
|
+
* Also enables \ref MDBX_DBG_AUDIT if `MDBX_DEBUG >= 2`.
|
|
527
|
+
*
|
|
528
|
+
* \ingroup build_option */
|
|
529
|
+
#define MDBX_DEBUG 0...2
|
|
530
|
+
|
|
531
|
+
/** Disables using of GNU libc extensions. */
|
|
532
|
+
#define MDBX_DISABLE_GNU_SOURCE 0 or 1
|
|
533
|
+
|
|
534
|
+
#endif /* DOXYGEN */
|