mdbx++: refine mdbx::env::operate_parameters() and related.

This commit is contained in:
Леонид Юрьев (Leonid Yuriev) 2022-03-03 01:58:45 +03:00
parent 6d61b18325
commit 96c93ac2f1
2 changed files with 23 additions and 11 deletions

View File

@ -2984,6 +2984,8 @@ public:
/// \copydoc MDBX_COALESCE /// \copydoc MDBX_COALESCE
bool coalesce{false}; bool coalesce{false};
MDBX_CXX11_CONSTEXPR reclaiming_options() noexcept {} MDBX_CXX11_CONSTEXPR reclaiming_options() noexcept {}
MDBX_CXX11_CONSTEXPR
reclaiming_options(const reclaiming_options &) noexcept = default;
reclaiming_options(MDBX_env_flags_t) noexcept; reclaiming_options(MDBX_env_flags_t) noexcept;
}; };
@ -2999,6 +3001,8 @@ public:
/// \copydoc MDBX_NOMEMINIT /// \copydoc MDBX_NOMEMINIT
bool disable_clear_memory{false}; bool disable_clear_memory{false};
MDBX_CXX11_CONSTEXPR operate_options() noexcept {} MDBX_CXX11_CONSTEXPR operate_options() noexcept {}
MDBX_CXX11_CONSTEXPR
operate_options(const operate_options &) noexcept = default;
operate_options(MDBX_env_flags_t) noexcept; operate_options(MDBX_env_flags_t) noexcept;
}; };
@ -3016,6 +3020,17 @@ public:
env::operate_options options; env::operate_options options;
MDBX_CXX11_CONSTEXPR operate_parameters() noexcept {} MDBX_CXX11_CONSTEXPR operate_parameters() noexcept {}
MDBX_CXX11_CONSTEXPR
operate_parameters(
const unsigned max_maps, const unsigned max_readers = 0,
const env::mode mode = env::mode::write_mapped_io,
env::durability durability = env::durability::robust_synchronous,
const env::reclaiming_options &reclaiming = env::reclaiming_options(),
const env::operate_options &options = env::operate_options()) noexcept
: max_maps(max_maps), max_readers(max_readers), mode(mode),
durability(durability), reclaiming(reclaiming), options(options) {}
MDBX_CXX11_CONSTEXPR
operate_parameters(const operate_parameters &) noexcept = default;
MDBX_env_flags_t MDBX_env_flags_t
make_flags(bool accede = true, ///< \copydoc MDBX_ACCEDE make_flags(bool accede = true, ///< \copydoc MDBX_ACCEDE
bool use_subdirectory = bool use_subdirectory =
@ -3027,7 +3042,6 @@ public:
reclaiming_from_flags(MDBX_env_flags_t flags) noexcept; reclaiming_from_flags(MDBX_env_flags_t flags) noexcept;
inline static env::operate_options inline static env::operate_options
options_from_flags(MDBX_env_flags_t flags) noexcept; options_from_flags(MDBX_env_flags_t flags) noexcept;
operate_parameters(const env &);
}; };
/// \brief Returns current operation parameters. /// \brief Returns current operation parameters.
@ -3423,6 +3437,8 @@ public:
env::geometry geometry; env::geometry geometry;
mdbx_mode_t file_mode_bits{0640}; mdbx_mode_t file_mode_bits{0640};
bool use_subdirectory{false}; bool use_subdirectory{false};
MDBX_CXX11_CONSTEXPR create_parameters() noexcept = default;
create_parameters(const create_parameters &) noexcept = default;
}; };
/// \brief Create new or open existing database. /// \brief Create new or open existing database.
@ -4763,7 +4779,12 @@ inline size_t env::limits::transaction_size_max(intptr_t pagesize) {
} }
inline env::operate_parameters env::get_operation_parameters() const { inline env::operate_parameters env::get_operation_parameters() const {
return env::operate_parameters(*this); const auto flags = get_flags();
return operate_parameters(max_maps(), max_readers(),
operate_parameters::mode_from_flags(flags),
operate_parameters::durability_from_flags(flags),
operate_parameters::reclaiming_from_flags(flags),
operate_parameters::options_from_flags(flags));
} }
inline env::mode env::get_mode() const { inline env::mode env::get_mode() const {

View File

@ -1234,15 +1234,6 @@ env::operate_options::operate_options(MDBX_env_flags_t flags) noexcept
disable_readahead((flags & MDBX_NORDAHEAD) ? true : false), disable_readahead((flags & MDBX_NORDAHEAD) ? true : false),
disable_clear_memory((flags & MDBX_NOMEMINIT) ? true : false) {} disable_clear_memory((flags & MDBX_NOMEMINIT) ? true : false) {}
env::operate_parameters::operate_parameters(const env &env)
: max_maps(env.max_maps()), max_readers(env.max_readers()) {
const auto flags = env.get_flags();
mode = mode_from_flags(flags);
durability = durability_from_flags(flags);
reclaiming = reclaiming_from_flags(flags);
options = options_from_flags(flags);
}
bool env::is_pristine() const { bool env::is_pristine() const {
return get_stat().ms_mod_txnid == 0 && return get_stat().ms_mod_txnid == 0 &&
get_info().mi_recent_txnid == INITIAL_TXNID; get_info().mi_recent_txnid == INITIAL_TXNID;