mdbx++: Initial C++ API (some extra methods are not implemented).

Change-Id: I0478d0c94dcd12b52916e87815e5731817407c3c
This commit is contained in:
Leonid Yuriev
2020-08-22 20:19:46 +03:00
parent 89dba59ce2
commit 33b1cf2931
22 changed files with 4507 additions and 168 deletions

View File

@@ -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)

View File

@@ -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";

View File

@@ -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 {

View File

@@ -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"

View File

@@ -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;

View File

@@ -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))

View File

@@ -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 {