From 9869c3d4b398d6c19796ff5e4503060ba35568de Mon Sep 17 00:00:00 2001 From: Magnus Ahltorp Date: Fri, 13 May 2016 17:39:34 +0200 Subject: Make put_node_in_dirtynodes take a binary key and level --- c_src/permdb.c | 43 ++++++++++++++++++++++--------------------- 1 file changed, 22 insertions(+), 21 deletions(-) (limited to 'c_src') diff --git a/c_src/permdb.c b/c_src/permdb.c index 93eb02e..1163dc7 100644 --- a/c_src/permdb.c +++ b/c_src/permdb.c @@ -107,9 +107,9 @@ put_node_in_cache(permdb_object *state, const ps_string *key, node_object value) } static void -put_node_in_dirtynodes(permdb_object *state, - const ps_string *key, - node_object value) +put_node_in_dirtynodes_keypart(permdb_object *state, + const ps_string *key, + node_object value) { dprintf(CACHE, (stderr, "putting key %*s: ", PS_PRINTF(key))); dprinthex(CACHE, &value, sizeof(node_object)); @@ -182,7 +182,7 @@ datafile_add_header(buffered_file *file) void initial_node(permdb_object *state) { - put_node_in_dirtynodes(state, PS_STRING(""), nullnode); + put_node_in_dirtynodes_keypart(state, PS_STRING(""), nullnode); } int @@ -849,6 +849,18 @@ writedata(permdb_object *state, const unsigned char *key, return offset; } +static void +put_node_in_dirtynodes(permdb_object *state, + const unsigned char *key, + unsigned int level, + node_object leafnode) +{ + ps_string cachekey; + keypart(key, level, &cachekey); + put_node_in_dirtynodes_keypart(state, &cachekey, leafnode); +} + + /* * Adds a key-value pair KEY + DATA by * 1) updating the data file buffer with KEY and DATA, @@ -913,19 +925,13 @@ addvalue(permdb_object *state, const unsigned char *key, unsigned int keylength, addentry(&leafnode, keybits(olddatakey, level), buildentry(1, olddataoffset)); free(olddatakey); - { - ps_string cachekey; - keypart(key, level, &cachekey); - put_node_in_dirtynodes(state, &cachekey, leafnode); - } + put_node_in_dirtynodes(state, key, level, leafnode); level--; while (level > foundlevel) { node_object node = nullnode; addentry(&node, keybits(key, level), NODE_ENTRY_DIRTY_NODE); - ps_string cachekey; - keypart(key, level, &cachekey); - put_node_in_dirtynodes(state, &cachekey, node); + put_node_in_dirtynodes(state, key, level, node); level--; } replaceentry(&lastnode, keybits(key, foundlevel), @@ -934,20 +940,14 @@ addvalue(permdb_object *state, const unsigned char *key, unsigned int keylength, int level = (int) foundlevel; - { - ps_string cachekey; - keypart(key, (unsigned int) level, &cachekey); - put_node_in_dirtynodes(state, &cachekey, lastnode); - } + put_node_in_dirtynodes(state, key, (unsigned int) level, lastnode); level--; while (level >= 0) { node_object node = *(node_object *)utarray_eltptr(nodes, level); replaceentry(&node, keybits(key, (unsigned int) level), NODE_ENTRY_DIRTY_NODE); - ps_string cachekey; - keypart(key, (unsigned int) level, &cachekey); - put_node_in_dirtynodes(state, &cachekey, node); + put_node_in_dirtynodes(state, key, (unsigned int) level, node); level--; } @@ -1073,7 +1073,8 @@ committree(permdb_object *state) node_object parentnode = get_node_from_dirtynodes(state, parent); replaceentry(&parentnode, entrynumber, offset); - put_node_in_dirtynodes(state, parent, parentnode); + put_node_in_dirtynodes_keypart(state, parent, + parentnode); free(parent); } } -- cgit v1.1