snapshot v4/p10; fix update in place

This commit is contained in:
Gregory Burd 2024-03-29 22:57:41 -04:00
parent 62eafa3cd6
commit 139f02d76a
2 changed files with 15 additions and 16 deletions

View file

@ -84,13 +84,13 @@ SKIPLIST_DECL(
},
/* update entry: rc, src, dest */
{
char *new = calloc(strlen(src->value) + 1, sizeof(char));
char *new = calloc(strlen(node->value) + 1, sizeof(char));
if (new == NULL) {
rc = ENOMEM;
} else {
strncpy(new, src->value, strlen(src->value));
free(dest->value);
dest->value = new;
strncpy(new, node->value, strlen(node->value));
free(node->value);
node->value = new;
}
},
/* archive an entry: rc, src, dest */
@ -312,7 +312,6 @@ main()
for (i = 0; i < asz; i++) {
numeral = int_to_roman_numeral(array[i]);
rc = api_skip_put_sample(list, array[i], to_lower(numeral));
//rc = api_skip_put_sample(list, array[i], numeral);
CHECK;
#ifdef SNAPSHOTS
if (i > TEST_ARRAY_SIZE + 1) {
@ -355,13 +354,13 @@ main()
CHECK;
if (api_skip_get_sample(list, 0) != NULL)
perror("found a deleted item!");
int key = TEST_ARRAY_SIZE + 1;
api_skip_del_sample(list, key);
CHECK;
key = -(TEST_ARRAY_SIZE) - 1;
numeral = int_to_roman_numeral(key);
api_skip_del_sample(list, key);
CHECK;
// int key = TEST_ARRAY_SIZE + 1;
// api_skip_del_sample(list, key);
// CHECK;
// key = -(TEST_ARRAY_SIZE) - 1;
// numeral = int_to_roman_numeral(key);
// api_skip_del_sample(list, key);
// CHECK;
#ifdef DOT
sprintf(msg, "deleted key: %d, value: %s", 0, numeral);

View file

@ -279,7 +279,7 @@ __skip_read_rdtsc(void)
size_t slh_length, slh_height, slh_max_height; \
struct { \
void (*free_entry)(decl##_node_t *); \
int (*update_entry)(decl##_node_t *, decl##_node_t *); \
int (*update_entry)(decl##_node_t *); \
int (*archive_entry)(decl##_node_t *, const decl##_node_t *); \
size_t (*sizeof_entry)(decl##_node_t *); \
int (*compare_entries)(struct decl *, decl##_node_t *, decl##_node_t *, void *); \
@ -318,9 +318,9 @@ __skip_read_rdtsc(void)
* \
* Wraps the `update_entry_blk` code into `slh_fns.update_entry`. \
*/ \
static int __skip_update_entry_fn_##decl(decl##_node_t *dest, decl##_node_t *src) \
static int __skip_update_entry_fn_##decl(decl##_node_t *node) \
{ \
int rc = 0; \
int rc = 0; \
update_entry_blk; \
return rc; \
} \
@ -1118,7 +1118,7 @@ __skip_read_rdtsc(void)
return np; \
} \
\
slist->slh_fns.update_entry(dest, src); \
slist->slh_fns.update_entry(src); \
src->field.sle_gen = cur_gen; \
return rc; \
} \