Encapsulate diff size

This commit is contained in:
alessio
2024-11-07 13:13:29 +01:00
parent ccb7e3ecd5
commit 5d00cd48a8
3 changed files with 30 additions and 18 deletions

View File

@@ -15,6 +15,7 @@
#include <inttypes.h>
#include <stdbool.h>
#include <stddef.h>
#include <stdlib.h>
#include <isc/buffer.h>
@@ -124,6 +125,7 @@ dns_diff_init(isc_mem_t *mctx, dns_diff_t *diff) {
diff->mctx = mctx;
ISC_LIST_INIT(diff->tuples);
diff->magic = DNS_DIFF_MAGIC;
diff->size = 0;
}
void
@@ -134,17 +136,19 @@ dns_diff_clear(dns_diff_t *diff) {
ISC_LIST_UNLINK(diff->tuples, t, link);
dns_difftuple_free(&t);
}
diff->size = 0;
ENSURE(ISC_LIST_EMPTY(diff->tuples));
}
void
dns_diff_append(dns_diff_t *diff, dns_difftuple_t **tuplep) {
ISC_LIST_APPEND(diff->tuples, *tuplep, link);
diff->size += 1;
*tuplep = NULL;
}
bool
dns_diff_is_boundary(dns_diff_t *diff, dns_name_t *new_name) {
dns_diff_is_boundary(const dns_diff_t *diff, dns_name_t *new_name) {
if (ISC_LIST_EMPTY(diff->tuples)) {
return false;
}
@@ -153,6 +157,11 @@ dns_diff_is_boundary(dns_diff_t *diff, dns_name_t *new_name) {
return !dns_name_caseequal(&tail->name, new_name);
}
size_t
dns_diff_size(const dns_diff_t* diff) {
return diff->size;
}
/* XXX this is O(N) */
void
@@ -181,6 +190,9 @@ dns_diff_appendminimal(dns_diff_t *diff, dns_difftuple_t **tuplep) {
ot->ttl == (*tuplep)->ttl)
{
ISC_LIST_UNLINK(diff->tuples, ot, link);
INSIST(diff->size > 0);
diff->size -= 1;
if ((*tuplep)->op == ot->op) {
UNEXPECTED_ERROR("unexpected non-minimal diff");
} else {
@@ -193,6 +205,7 @@ dns_diff_appendminimal(dns_diff_t *diff, dns_difftuple_t **tuplep) {
if (*tuplep != NULL) {
ISC_LIST_APPEND(diff->tuples, *tuplep, link);
diff->size += 1;
*tuplep = NULL;
}
}
@@ -264,7 +277,7 @@ optotext(dns_diffop_t op) {
}
static isc_result_t
diff_apply(dns_diff_t *diff, dns_db_t *db, dns_dbversion_t *ver, bool warn) {
diff_apply(const dns_diff_t *diff, dns_db_t *db, dns_dbversion_t *ver, bool warn) {
dns_difftuple_t *t;
dns_dbnode_t *node = NULL;
isc_result_t result;
@@ -504,19 +517,19 @@ failure:
}
isc_result_t
dns_diff_apply(dns_diff_t *diff, dns_db_t *db, dns_dbversion_t *ver) {
dns_diff_apply(const dns_diff_t *diff, dns_db_t *db, dns_dbversion_t *ver) {
return (diff_apply(diff, db, ver, true));
}
isc_result_t
dns_diff_applysilently(dns_diff_t *diff, dns_db_t *db, dns_dbversion_t *ver) {
dns_diff_applysilently(const dns_diff_t *diff, dns_db_t *db, dns_dbversion_t *ver) {
return (diff_apply(diff, db, ver, false));
}
/* XXX this duplicates lots of code in diff_apply(). */
isc_result_t
dns_diff_load(dns_diff_t *diff, dns_rdatacallbacks_t *callbacks) {
dns_diff_load(const dns_diff_t *diff, dns_rdatacallbacks_t *callbacks) {
dns_difftuple_t *t;
isc_result_t result;
@@ -652,7 +665,7 @@ diff_tuple_tordataset(dns_difftuple_t *t, dns_rdata_t *rdata,
}
isc_result_t
dns_diff_print(dns_diff_t *diff, FILE *file) {
dns_diff_print(const dns_diff_t *diff, FILE *file) {
isc_result_t result;
dns_difftuple_t *t;
char *mem = NULL;