snapshot v4/p10; fix update in place
This commit is contained in:
parent
62eafa3cd6
commit
139f02d76a
2 changed files with 15 additions and 16 deletions
|
@ -84,13 +84,13 @@ SKIPLIST_DECL(
|
||||||
},
|
},
|
||||||
/* update entry: rc, src, dest */
|
/* 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) {
|
if (new == NULL) {
|
||||||
rc = ENOMEM;
|
rc = ENOMEM;
|
||||||
} else {
|
} else {
|
||||||
strncpy(new, src->value, strlen(src->value));
|
strncpy(new, node->value, strlen(node->value));
|
||||||
free(dest->value);
|
free(node->value);
|
||||||
dest->value = new;
|
node->value = new;
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
/* archive an entry: rc, src, dest */
|
/* archive an entry: rc, src, dest */
|
||||||
|
@ -312,7 +312,6 @@ main()
|
||||||
for (i = 0; i < asz; i++) {
|
for (i = 0; i < asz; i++) {
|
||||||
numeral = int_to_roman_numeral(array[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], to_lower(numeral));
|
||||||
//rc = api_skip_put_sample(list, array[i], numeral);
|
|
||||||
CHECK;
|
CHECK;
|
||||||
#ifdef SNAPSHOTS
|
#ifdef SNAPSHOTS
|
||||||
if (i > TEST_ARRAY_SIZE + 1) {
|
if (i > TEST_ARRAY_SIZE + 1) {
|
||||||
|
@ -355,13 +354,13 @@ main()
|
||||||
CHECK;
|
CHECK;
|
||||||
if (api_skip_get_sample(list, 0) != NULL)
|
if (api_skip_get_sample(list, 0) != NULL)
|
||||||
perror("found a deleted item!");
|
perror("found a deleted item!");
|
||||||
int key = TEST_ARRAY_SIZE + 1;
|
// int key = TEST_ARRAY_SIZE + 1;
|
||||||
api_skip_del_sample(list, key);
|
// api_skip_del_sample(list, key);
|
||||||
CHECK;
|
// CHECK;
|
||||||
key = -(TEST_ARRAY_SIZE) - 1;
|
// key = -(TEST_ARRAY_SIZE) - 1;
|
||||||
numeral = int_to_roman_numeral(key);
|
// numeral = int_to_roman_numeral(key);
|
||||||
api_skip_del_sample(list, key);
|
// api_skip_del_sample(list, key);
|
||||||
CHECK;
|
// CHECK;
|
||||||
|
|
||||||
#ifdef DOT
|
#ifdef DOT
|
||||||
sprintf(msg, "deleted key: %d, value: %s", 0, numeral);
|
sprintf(msg, "deleted key: %d, value: %s", 0, numeral);
|
||||||
|
|
|
@ -279,7 +279,7 @@ __skip_read_rdtsc(void)
|
||||||
size_t slh_length, slh_height, slh_max_height; \
|
size_t slh_length, slh_height, slh_max_height; \
|
||||||
struct { \
|
struct { \
|
||||||
void (*free_entry)(decl##_node_t *); \
|
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 *); \
|
int (*archive_entry)(decl##_node_t *, const decl##_node_t *); \
|
||||||
size_t (*sizeof_entry)(decl##_node_t *); \
|
size_t (*sizeof_entry)(decl##_node_t *); \
|
||||||
int (*compare_entries)(struct decl *, decl##_node_t *, decl##_node_t *, void *); \
|
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`. \
|
* 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; \
|
update_entry_blk; \
|
||||||
return rc; \
|
return rc; \
|
||||||
} \
|
} \
|
||||||
|
@ -1118,7 +1118,7 @@ __skip_read_rdtsc(void)
|
||||||
return np; \
|
return np; \
|
||||||
} \
|
} \
|
||||||
\
|
\
|
||||||
slist->slh_fns.update_entry(dest, src); \
|
slist->slh_fns.update_entry(src); \
|
||||||
src->field.sle_gen = cur_gen; \
|
src->field.sle_gen = cur_gen; \
|
||||||
return rc; \
|
return rc; \
|
||||||
} \
|
} \
|
||||||
|
|
Loading…
Reference in a new issue