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;
|
return err;
|
||||||
|
|
||||||
if (!rkl_empty(&ctx->sequel)) {
|
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 (unlikely(err != MDBX_SUCCESS)) {
|
||||||
if (err == MDBX_RESULT_TRUE) {
|
if (err == MDBX_RESULT_TRUE) {
|
||||||
ERROR("%s/%d: %s", "MDBX_PROBLEM", MDBX_PROBLEM, "unexpected duplicate(s) during rkl-merge");
|
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;
|
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) {
|
if (src->list_length) {
|
||||||
size_t i = src->list_length;
|
size_t i = src->list_length;
|
||||||
do {
|
do {
|
||||||
@ -413,6 +413,12 @@ int rkl_merge(rkl_t *dst, const rkl_t *src, bool ignore_duplicates) {
|
|||||||
return MDBX_SUCCESS;
|
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 rkl_iterator(const rkl_t *rkl, const bool reverse) {
|
||||||
rkl_iter_t iter = {.rkl = rkl, .pos = reverse ? rkl_len(rkl) : 0, .solid_offset = 0};
|
rkl_iter_t iter = {.rkl = rkl, .pos = reverse ? rkl_len(rkl) : 0, .solid_offset = 0};
|
||||||
if (!solid_empty(rkl) && rkl->list_length) {
|
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 __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 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.
|
||||||
* Обеспечивает изоляцию внутреннего устройства rkl от остального кода, чем существенно его упрощает.
|
* Обеспечивает изоляцию внутреннего устройства rkl от остального кода, чем существенно его упрощает.
|
||||||
|
Loading…
x
Reference in New Issue
Block a user