summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMagnus Ahltorp <map@kth.se>2016-05-13 17:39:34 +0200
committerMagnus Ahltorp <map@kth.se>2016-05-13 17:39:34 +0200
commit9869c3d4b398d6c19796ff5e4503060ba35568de (patch)
tree99cafd8bff9b9cd2767771e452d68b2e268b8e34
parentcc037396bf405ec942352ea834e137ea1b24e6af (diff)
Make put_node_in_dirtynodes take a binary key and level
-rw-r--r--c_src/permdb.c43
1 files changed, 22 insertions, 21 deletions
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);
}
}