snapshot v4/p14; fixes
This commit is contained in:
parent
0079415c34
commit
567df2edd1
|
@ -28,7 +28,6 @@
|
||||||
#define CHECK ((void)0)
|
#define CHECK ((void)0)
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* SKIPLIST EXAMPLE:
|
* SKIPLIST EXAMPLE:
|
||||||
*
|
*
|
||||||
|
@ -50,7 +49,7 @@ struct sample_node {
|
||||||
int key;
|
int key;
|
||||||
char *value;
|
char *value;
|
||||||
SKIPLIST_ENTRY(sample_node) entries;
|
SKIPLIST_ENTRY(sample_node) entries;
|
||||||
// TODO SKIPLIST_SNAPS(sample_node) snaps;
|
// TODO SKIPLIST_SNAPS(sample_node) snaps;
|
||||||
};
|
};
|
||||||
|
|
||||||
/*
|
/*
|
||||||
|
@ -69,9 +68,7 @@ SKIPLIST_DECL(
|
||||||
return 0;
|
return 0;
|
||||||
},
|
},
|
||||||
/* free entry: node */
|
/* free entry: node */
|
||||||
{
|
{ free(node->value); },
|
||||||
free(node->value);
|
|
||||||
},
|
|
||||||
/* update entry: rc, src, dest */
|
/* update entry: rc, src, dest */
|
||||||
{
|
{
|
||||||
char *new = calloc(strlen(node->value) + 1, sizeof(char));
|
char *new = calloc(strlen(node->value) + 1, sizeof(char));
|
||||||
|
@ -95,9 +92,7 @@ SKIPLIST_DECL(
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
/* size in bytes of the content stored in an entry: bytes */
|
/* size in bytes of the content stored in an entry: bytes */
|
||||||
{
|
{ bytes = strlen(node->value) + 1; })
|
||||||
bytes = strlen(node->value) + 1;
|
|
||||||
})
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Skiplists are ordered, we need a way to compare entries.
|
* Skiplists are ordered, we need a way to compare entries.
|
||||||
|
@ -164,7 +159,7 @@ SKIPLIST_DECL_ARCHIVE(sample, api_, entries)
|
||||||
*
|
*
|
||||||
* Turn your Skiplist into a hash table. TODO
|
* Turn your Skiplist into a hash table. TODO
|
||||||
*/
|
*/
|
||||||
//SKIPLIST_DECL_HASHTABLE(sample, api_, entries, snaps)
|
// SKIPLIST_DECL_HASHTABLE(sample, api_, entries, snaps)
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Optional: Check Skiplists at runtime
|
* Optional: Check Skiplists at runtime
|
||||||
|
@ -271,7 +266,7 @@ main()
|
||||||
if (list == NULL)
|
if (list == NULL)
|
||||||
return ENOMEM;
|
return ENOMEM;
|
||||||
|
|
||||||
rc = api_skip_init_sample(list, 12); //TODO -12
|
rc = api_skip_init_sample(list, 12); // TODO -12
|
||||||
if (rc)
|
if (rc)
|
||||||
return rc;
|
return rc;
|
||||||
api_skip_snapshots_init_sample(list);
|
api_skip_snapshots_init_sample(list);
|
||||||
|
@ -345,13 +340,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);
|
||||||
|
@ -360,8 +355,8 @@ main()
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#ifdef SNAPSHOTS
|
#ifdef SNAPSHOTS
|
||||||
api_skip_restore_snapshot_sample(list, snaps[snap_i - 1] );
|
// TODO api_skip_restore_snapshot_sample(list, snaps[snap_i - 1]);
|
||||||
api_skip_release_snapshots_sample(list);
|
// TODO api_skip_release_snapshots_sample(list);
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
assert(strcmp(api_skip_pos_sample(list, SKIP_GTE, -(TEST_ARRAY_SIZE)-1)->value, int_to_roman_numeral(-(TEST_ARRAY_SIZE))) == 0);
|
assert(strcmp(api_skip_pos_sample(list, SKIP_GTE, -(TEST_ARRAY_SIZE)-1)->value, int_to_roman_numeral(-(TEST_ARRAY_SIZE))) == 0);
|
||||||
|
|
|
@ -976,7 +976,8 @@ void __attribute__((format(printf, 4, 5))) __skip_diag_(const char *file, int li
|
||||||
int prefix##skip_remove_node_##decl(decl##_t *slist, decl##_node_t *query) \
|
int prefix##skip_remove_node_##decl(decl##_t *slist, decl##_node_t *query) \
|
||||||
{ \
|
{ \
|
||||||
static decl##_node_t apath[SKIPLIST_MAX_HEIGHT + 1]; \
|
static decl##_node_t apath[SKIPLIST_MAX_HEIGHT + 1]; \
|
||||||
size_t i, len, np = 0, height; \
|
int np = 0; \
|
||||||
|
size_t i, len, height; \
|
||||||
decl##_node_t *node, **path = (decl##_node_t **)&apath; \
|
decl##_node_t *node, **path = (decl##_node_t **)&apath; \
|
||||||
\
|
\
|
||||||
if (slist == NULL || query == NULL) \
|
if (slist == NULL || query == NULL) \
|
||||||
|
@ -1031,9 +1032,7 @@ void __attribute__((format(printf, 4, 5))) __skip_diag_(const char *file, int li
|
||||||
if (SKIPLIST_MAX_HEIGHT == 1) \
|
if (SKIPLIST_MAX_HEIGHT == 1) \
|
||||||
free(path); \
|
free(path); \
|
||||||
\
|
\
|
||||||
/* If we didn't preserve any nodes we can free this one. */ \
|
slist->slh_fns.free_entry(node); \
|
||||||
if (np == 0) \
|
|
||||||
slist->slh_fns.free_entry(node); \
|
|
||||||
\
|
\
|
||||||
/* Reduce the height of the header. */ \
|
/* Reduce the height of the header. */ \
|
||||||
i = 0; \
|
i = 0; \
|
||||||
|
|
Loading…
Reference in a new issue