mirror of
https://github.com/isar/libmdbx.git
synced 2025-08-23 09:04:26 +08:00
mdbx++: Initial C++ API (some extra methods are not implemented).
Change-Id: I0478d0c94dcd12b52916e87815e5731817407c3c
This commit is contained in:
@@ -27,30 +27,6 @@ add_executable(mdbx_test
|
||||
nested.cc
|
||||
)
|
||||
|
||||
list(FIND CMAKE_CXX_COMPILE_FEATURES cxx_std_20 HAS_CXX20)
|
||||
list(FIND CMAKE_CXX_COMPILE_FEATURES cxx_std_17 HAS_CXX17)
|
||||
list(FIND CMAKE_CXX_COMPILE_FEATURES cxx_std_14 HAS_CXX14)
|
||||
list(FIND CMAKE_CXX_COMPILE_FEATURES cxx_std_11 HAS_CXX11)
|
||||
if(NOT DEFINED MDBX_CXX_STANDARD)
|
||||
if(DEFINED CMAKE_CXX_STANDARD)
|
||||
set(MDBX_CXX_STANDARD ${CMAKE_CXX_STANDARD})
|
||||
elseif(NOT HAS_CXX20 LESS 0)
|
||||
set(MDBX_CXX_STANDARD 20)
|
||||
elseif(NOT HAS_CXX17 LESS 0)
|
||||
set(MDBX_CXX_STANDARD 17)
|
||||
elseif(NOT HAS_CXX14 LESS 0)
|
||||
set(MDBX_CXX_STANDARD 14)
|
||||
elseif(NOT HAS_CXX11 LESS 0)
|
||||
set(MDBX_CXX_STANDARD 11)
|
||||
endif()
|
||||
endif()
|
||||
if(MDBX_CXX_STANDARD)
|
||||
message(STATUS "Use C++${MDBX_CXX_STANDARD} for libmdbx")
|
||||
if(NOT SUBPROJECT OR NOT DEFINED CMAKE_CXX_STANDARD)
|
||||
set(CMAKE_CXX_STANDARD ${MDBX_CXX_STANDARD})
|
||||
endif()
|
||||
endif()
|
||||
|
||||
if(MDBX_CXX_STANDARD)
|
||||
set_target_properties(mdbx_test PROPERTIES
|
||||
CXX_STANDARD ${MDBX_CXX_STANDARD} CXX_STANDARD_REQUIRED ON)
|
||||
|
@@ -31,14 +31,15 @@ const char *test_strerror(int errnum) {
|
||||
return mdbx_strerror_r(errnum, buf, sizeof(buf));
|
||||
}
|
||||
|
||||
void __noreturn failure_perror(const char *what, int errnum) {
|
||||
__noreturn void failure_perror(const char *what, int errnum) {
|
||||
failure("%s failed: %s (%d)\n", what, test_strerror(errnum), errnum);
|
||||
}
|
||||
|
||||
//-----------------------------------------------------------------------------
|
||||
|
||||
static void mdbx_logger(MDBX_log_level_t priority, const char *function,
|
||||
int line, const char *msg, va_list args) {
|
||||
int line, const char *msg,
|
||||
va_list args) cxx17_noexcept {
|
||||
if (!function)
|
||||
function = "unknown";
|
||||
|
||||
|
@@ -17,9 +17,9 @@
|
||||
#include "base.h"
|
||||
#include "chrono.h"
|
||||
|
||||
void __noreturn usage(void);
|
||||
void __noreturn __printf_args(1, 2) failure(const char *fmt, ...);
|
||||
void __noreturn failure_perror(const char *what, int errnum);
|
||||
__noreturn void usage(void);
|
||||
__noreturn void __printf_args(1, 2) failure(const char *fmt, ...);
|
||||
__noreturn void failure_perror(const char *what, int errnum);
|
||||
const char *test_strerror(int errnum);
|
||||
|
||||
namespace logging {
|
||||
|
@@ -19,7 +19,7 @@
|
||||
#include <sys/time.h>
|
||||
#endif /* !Windows */
|
||||
|
||||
void __noreturn usage(void) {
|
||||
__noreturn void usage(void) {
|
||||
puts(
|
||||
"usage:\n"
|
||||
" --help or -h Show this text\n"
|
||||
|
@@ -16,6 +16,7 @@
|
||||
|
||||
#if !(defined(_WIN32) || defined(_WIN64))
|
||||
|
||||
#include <atomic>
|
||||
#include <pthread.h>
|
||||
#include <signal.h>
|
||||
#include <sys/mman.h>
|
||||
@@ -309,7 +310,7 @@ bool actor_config::osal_deserialize(const char *str, const char *end,
|
||||
|
||||
static pid_t overlord_pid;
|
||||
|
||||
static std::atomic<int> sigusr1_head, sigusr2_head;
|
||||
static std::atomic_int sigusr1_head, sigusr2_head;
|
||||
static void handler_SIGUSR(int signum) {
|
||||
switch (signum) {
|
||||
case SIGUSR1:
|
||||
@@ -337,7 +338,7 @@ bool osal_progress_push(bool active) {
|
||||
|
||||
static std::unordered_map<pid_t, actor_status> childs;
|
||||
|
||||
static std::atomic<int> sigalarm_head;
|
||||
static std::atomic_int sigalarm_head;
|
||||
static void handler_SIGCHLD(int signum) {
|
||||
if (signum == SIGALRM)
|
||||
++sigalarm_head;
|
||||
|
@@ -80,7 +80,7 @@ const char *keygencase2str(const keygen_case keycase) {
|
||||
|
||||
int testcase::oom_callback(MDBX_env *env, mdbx_pid_t pid, mdbx_tid_t tid,
|
||||
uint64_t txn, unsigned gap, size_t space,
|
||||
int retry) {
|
||||
int retry) cxx17_noexcept {
|
||||
|
||||
testcase *self = (testcase *)mdbx_env_get_userctx(env);
|
||||
|
||||
@@ -530,7 +530,8 @@ void testcase::db_table_close(MDBX_dbi handle) {
|
||||
void testcase::checkdata(const char *step, MDBX_dbi handle, MDBX_val key2check,
|
||||
MDBX_val expected_valued) {
|
||||
MDBX_val actual_value = expected_valued;
|
||||
int rc = mdbx_get_nearest(txn_guard.get(), handle, &key2check, &actual_value);
|
||||
int rc = mdbx_get_equal_or_great(txn_guard.get(), handle, &key2check,
|
||||
&actual_value);
|
||||
if (unlikely(rc != MDBX_SUCCESS))
|
||||
failure_perror(step, rc);
|
||||
if (!is_samedata(&actual_value, &expected_valued))
|
||||
|
@@ -167,7 +167,8 @@ protected:
|
||||
int remove(const keygen::buffer &akey, const keygen::buffer &adata);
|
||||
|
||||
static int oom_callback(MDBX_env *env, mdbx_pid_t pid, mdbx_tid_t tid,
|
||||
uint64_t txn, unsigned gap, size_t space, int retry);
|
||||
uint64_t txn, unsigned gap, size_t space,
|
||||
int retry) cxx17_noexcept;
|
||||
|
||||
MDBX_env_flags_t actual_env_mode{MDBX_ENV_DEFAULTS};
|
||||
bool is_nested_txn_available() const {
|
||||
|
Reference in New Issue
Block a user