mirror of
https://github.com/isar/libmdbx.git
synced 2025-06-23 01:42:36 +08:00
mdbx: добавление rkl_destructive_merge()
и унификация порядка dst/src аргументов rkl_merge()
.
This commit is contained in:
parent
bb5b6c5823
commit
49a9545903
@ -1195,7 +1195,7 @@ static int gc_rerere(MDBX_txn *txn, gcu_t *ctx) {
|
||||
return err;
|
||||
|
||||
if (!rkl_empty(&ctx->sequel)) {
|
||||
err = rkl_merge(&ctx->ready4reuse, &ctx->sequel, false);
|
||||
err = rkl_merge(&ctx->sequel, &ctx->ready4reuse, false);
|
||||
if (unlikely(err != MDBX_SUCCESS)) {
|
||||
if (err == MDBX_RESULT_TRUE) {
|
||||
ERROR("%s/%d: %s", "MDBX_PROBLEM", MDBX_PROBLEM, "unexpected duplicate(s) during rkl-merge");
|
||||
|
@ -393,7 +393,7 @@ txnid_t rkl_highest(const rkl_t *rkl) {
|
||||
return !solid_empty(rkl) ? rkl->solid_end - 1 : 0;
|
||||
}
|
||||
|
||||
int rkl_merge(rkl_t *dst, const rkl_t *src, bool ignore_duplicates) {
|
||||
int rkl_merge(const rkl_t *src, rkl_t *dst, bool ignore_duplicates) {
|
||||
if (src->list_length) {
|
||||
size_t i = src->list_length;
|
||||
do {
|
||||
@ -413,6 +413,12 @@ int rkl_merge(rkl_t *dst, const rkl_t *src, bool ignore_duplicates) {
|
||||
return MDBX_SUCCESS;
|
||||
}
|
||||
|
||||
int rkl_destructive_merge(rkl_t *src, rkl_t *dst, bool ignore_duplicates) {
|
||||
int err = rkl_merge(src, dst, ignore_duplicates);
|
||||
rkl_destroy(src);
|
||||
return err;
|
||||
}
|
||||
|
||||
rkl_iter_t rkl_iterator(const rkl_t *rkl, const bool reverse) {
|
||||
rkl_iter_t iter = {.rkl = rkl, .pos = reverse ? rkl_len(rkl) : 0, .solid_offset = 0};
|
||||
if (!solid_empty(rkl) && rkl->list_length) {
|
||||
|
@ -50,7 +50,8 @@ MDBX_MAYBE_UNUSED MDBX_NOTHROW_PURE_FUNCTION static inline txnid_t rkl_edge(cons
|
||||
}
|
||||
MDBX_MAYBE_UNUSED MDBX_INTERNAL __must_check_result int rkl_push(rkl_t *rkl, const txnid_t id);
|
||||
MDBX_MAYBE_UNUSED MDBX_INTERNAL txnid_t rkl_pop(rkl_t *rkl, const bool highest_not_lowest);
|
||||
MDBX_MAYBE_UNUSED MDBX_INTERNAL __must_check_result int rkl_merge(rkl_t *dst, const rkl_t *src, bool ignore_duplicates);
|
||||
MDBX_MAYBE_UNUSED MDBX_INTERNAL __must_check_result int rkl_merge(const rkl_t *src, rkl_t *dst, bool ignore_duplicates);
|
||||
MDBX_MAYBE_UNUSED MDBX_INTERNAL int rkl_destructive_merge(rkl_t *src, rkl_t *dst, bool ignore_duplicates);
|
||||
|
||||
/* Итератор для rkl.
|
||||
* Обеспечивает изоляцию внутреннего устройства rkl от остального кода, чем существенно его упрощает.
|
||||
|
Loading…
x
Reference in New Issue
Block a user