add pointer to b_tree as a parameter to all callbacks
This commit is contained in:
16
src/b-tree.c
16
src/b-tree.c
@@ -110,7 +110,7 @@ static int node_write(struct b_tree *tree, long id, const b_tree_node *in)
|
|||||||
|
|
||||||
static unsigned long node_get_nr_entries(struct b_tree *tree, b_tree_node *node)
|
static unsigned long node_get_nr_entries(struct b_tree *tree, b_tree_node *node)
|
||||||
{
|
{
|
||||||
return tree->tree_ops->node_get_nr_entries(node);
|
return tree->tree_ops->node_get_nr_entries(tree, node);
|
||||||
}
|
}
|
||||||
|
|
||||||
static void node_set_nr_entries(
|
static void node_set_nr_entries(
|
||||||
@@ -118,7 +118,7 @@ static void node_set_nr_entries(
|
|||||||
b_tree_node *node,
|
b_tree_node *node,
|
||||||
unsigned long val)
|
unsigned long val)
|
||||||
{
|
{
|
||||||
tree->tree_ops->node_set_nr_entries(node, val);
|
tree->tree_ops->node_set_nr_entries(tree, node, val);
|
||||||
}
|
}
|
||||||
|
|
||||||
static unsigned long node_get_child(
|
static unsigned long node_get_child(
|
||||||
@@ -126,7 +126,7 @@ static unsigned long node_get_child(
|
|||||||
b_tree_node *node,
|
b_tree_node *node,
|
||||||
unsigned long index)
|
unsigned long index)
|
||||||
{
|
{
|
||||||
return tree->tree_ops->node_get_child(node, index);
|
return tree->tree_ops->node_get_child(tree, node, index);
|
||||||
}
|
}
|
||||||
|
|
||||||
static void node_set_child(
|
static void node_set_child(
|
||||||
@@ -135,7 +135,7 @@ static void node_set_child(
|
|||||||
unsigned long index,
|
unsigned long index,
|
||||||
unsigned long ptr)
|
unsigned long ptr)
|
||||||
{
|
{
|
||||||
tree->tree_ops->node_set_child(node, index, ptr);
|
tree->tree_ops->node_set_child(tree, node, index, ptr);
|
||||||
}
|
}
|
||||||
|
|
||||||
static b_tree_node_entry *node_get_entry(
|
static b_tree_node_entry *node_get_entry(
|
||||||
@@ -143,7 +143,7 @@ static b_tree_node_entry *node_get_entry(
|
|||||||
b_tree_node *node,
|
b_tree_node *node,
|
||||||
unsigned long index)
|
unsigned long index)
|
||||||
{
|
{
|
||||||
return tree->tree_ops->node_get_entry(node, index);
|
return tree->tree_ops->node_get_entry(tree, node, index);
|
||||||
}
|
}
|
||||||
|
|
||||||
static void node_set_entry(
|
static void node_set_entry(
|
||||||
@@ -152,7 +152,7 @@ static void node_set_entry(
|
|||||||
unsigned long index,
|
unsigned long index,
|
||||||
const b_tree_node_entry *entry)
|
const b_tree_node_entry *entry)
|
||||||
{
|
{
|
||||||
tree->tree_ops->node_set_entry(node, index, entry);
|
tree->tree_ops->node_set_entry(tree, node, index, entry);
|
||||||
}
|
}
|
||||||
|
|
||||||
static void node_kill_entry(
|
static void node_kill_entry(
|
||||||
@@ -160,7 +160,7 @@ static void node_kill_entry(
|
|||||||
b_tree_node *node,
|
b_tree_node *node,
|
||||||
unsigned long index)
|
unsigned long index)
|
||||||
{
|
{
|
||||||
tree->tree_ops->node_kill_entry(node, index);
|
tree->tree_ops->node_kill_entry(tree, node, index);
|
||||||
}
|
}
|
||||||
|
|
||||||
static void node_shift_entries(
|
static void node_shift_entries(
|
||||||
@@ -307,7 +307,7 @@ static int entry_compare(
|
|||||||
const b_tree_node_entry *a,
|
const b_tree_node_entry *a,
|
||||||
const b_tree_node_entry *b)
|
const b_tree_node_entry *b)
|
||||||
{
|
{
|
||||||
return tree->tree_ops->entry_compare(a, b);
|
return tree->tree_ops->entry_compare(tree, a, b);
|
||||||
}
|
}
|
||||||
|
|
||||||
static int node_put(
|
static int node_put(
|
||||||
|
|||||||
23
src/b-tree.h
23
src/b-tree.h
@@ -23,18 +23,29 @@ struct b_tree_ops {
|
|||||||
const b_tree_node *);
|
const b_tree_node *);
|
||||||
long (*tree_alloc_node)(struct b_tree *);
|
long (*tree_alloc_node)(struct b_tree *);
|
||||||
|
|
||||||
unsigned long (*node_get_nr_entries)(b_tree_node *);
|
unsigned long (*node_get_nr_entries)(struct b_tree *, b_tree_node *);
|
||||||
void (*node_set_nr_entries)(b_tree_node *, unsigned long);
|
void (*node_set_nr_entries)(
|
||||||
b_tree_node_entry *(*node_get_entry)(b_tree_node *, unsigned long);
|
struct b_tree *,
|
||||||
|
b_tree_node *,
|
||||||
|
unsigned long);
|
||||||
|
b_tree_node_entry *(
|
||||||
|
*node_get_entry)(struct b_tree *, b_tree_node *, unsigned long);
|
||||||
void (*node_set_entry)(
|
void (*node_set_entry)(
|
||||||
|
struct b_tree *,
|
||||||
b_tree_node *,
|
b_tree_node *,
|
||||||
unsigned long,
|
unsigned long,
|
||||||
const b_tree_node_entry *);
|
const b_tree_node_entry *);
|
||||||
void (*node_kill_entry)(b_tree_node *, unsigned long);
|
void (*node_kill_entry)(struct b_tree *, b_tree_node *, unsigned long);
|
||||||
unsigned long (*node_get_child)(b_tree_node *, unsigned long);
|
unsigned long (
|
||||||
void (*node_set_child)(b_tree_node *, unsigned long, unsigned long);
|
*node_get_child)(struct b_tree *, b_tree_node *, unsigned long);
|
||||||
|
void (*node_set_child)(
|
||||||
|
struct b_tree *,
|
||||||
|
b_tree_node *,
|
||||||
|
unsigned long,
|
||||||
|
unsigned long);
|
||||||
|
|
||||||
int (*entry_compare)(
|
int (*entry_compare)(
|
||||||
|
const struct b_tree *,
|
||||||
const b_tree_node_entry *,
|
const b_tree_node_entry *,
|
||||||
const b_tree_node_entry *);
|
const b_tree_node_entry *);
|
||||||
};
|
};
|
||||||
|
|||||||
@@ -97,25 +97,32 @@ static long tree_alloc_node(struct b_tree *p)
|
|||||||
return (long)len;
|
return (long)len;
|
||||||
}
|
}
|
||||||
|
|
||||||
static unsigned long node_get_nr_entries(b_tree_node *n)
|
static unsigned long node_get_nr_entries(struct b_tree *tree, b_tree_node *n)
|
||||||
{
|
{
|
||||||
struct ec3_cluster_group *node = (struct ec3_cluster_group *)n;
|
struct ec3_cluster_group *node = (struct ec3_cluster_group *)n;
|
||||||
return b_i16_btoh(node->g_nr_clusters);
|
return b_i16_btoh(node->g_nr_clusters);
|
||||||
}
|
}
|
||||||
|
|
||||||
static void node_set_nr_entries(b_tree_node *n, unsigned long val)
|
static void node_set_nr_entries(
|
||||||
|
struct b_tree *tree,
|
||||||
|
b_tree_node *n,
|
||||||
|
unsigned long val)
|
||||||
{
|
{
|
||||||
struct ec3_cluster_group *node = (struct ec3_cluster_group *)n;
|
struct ec3_cluster_group *node = (struct ec3_cluster_group *)n;
|
||||||
node->g_nr_clusters = b_i16_htob(val);
|
node->g_nr_clusters = b_i16_htob(val);
|
||||||
}
|
}
|
||||||
|
|
||||||
static b_tree_node_entry *node_get_entry(b_tree_node *n, unsigned long index)
|
static b_tree_node_entry *node_get_entry(
|
||||||
|
struct b_tree *tree,
|
||||||
|
b_tree_node *n,
|
||||||
|
unsigned long index)
|
||||||
{
|
{
|
||||||
struct ec3_cluster_group *node = (struct ec3_cluster_group *)n;
|
struct ec3_cluster_group *node = (struct ec3_cluster_group *)n;
|
||||||
return (b_tree_node_entry *)&node->g_clusters[index];
|
return (b_tree_node_entry *)&node->g_clusters[index];
|
||||||
}
|
}
|
||||||
|
|
||||||
static void node_set_entry(
|
static void node_set_entry(
|
||||||
|
struct b_tree *tree,
|
||||||
b_tree_node *n,
|
b_tree_node *n,
|
||||||
unsigned long index,
|
unsigned long index,
|
||||||
const b_tree_node_entry *entry)
|
const b_tree_node_entry *entry)
|
||||||
@@ -124,13 +131,19 @@ static void node_set_entry(
|
|||||||
memmove(&node->g_clusters[index], entry, sizeof(struct ec3_cluster));
|
memmove(&node->g_clusters[index], entry, sizeof(struct ec3_cluster));
|
||||||
}
|
}
|
||||||
|
|
||||||
static void node_kill_entry(b_tree_node *n, unsigned long index)
|
static void node_kill_entry(
|
||||||
|
struct b_tree *tree,
|
||||||
|
b_tree_node *n,
|
||||||
|
unsigned long index)
|
||||||
{
|
{
|
||||||
struct ec3_cluster_group *node = (struct ec3_cluster_group *)n;
|
struct ec3_cluster_group *node = (struct ec3_cluster_group *)n;
|
||||||
memset(&node->g_clusters[index], 0x0, sizeof(struct ec3_cluster));
|
memset(&node->g_clusters[index], 0x0, sizeof(struct ec3_cluster));
|
||||||
}
|
}
|
||||||
|
|
||||||
static unsigned long node_get_child(b_tree_node *n, unsigned long index)
|
static unsigned long node_get_child(
|
||||||
|
struct b_tree *tree,
|
||||||
|
b_tree_node *n,
|
||||||
|
unsigned long index)
|
||||||
{
|
{
|
||||||
struct ec3_cluster_group *node = (struct ec3_cluster_group *)n;
|
struct ec3_cluster_group *node = (struct ec3_cluster_group *)n;
|
||||||
b_i32 enc_child = node->g_child_offsets[index];
|
b_i32 enc_child = node->g_child_offsets[index];
|
||||||
@@ -139,6 +152,7 @@ static unsigned long node_get_child(b_tree_node *n, unsigned long index)
|
|||||||
}
|
}
|
||||||
|
|
||||||
static void node_set_child(
|
static void node_set_child(
|
||||||
|
struct b_tree *tree,
|
||||||
b_tree_node *n,
|
b_tree_node *n,
|
||||||
unsigned long index,
|
unsigned long index,
|
||||||
unsigned long ptr)
|
unsigned long ptr)
|
||||||
@@ -150,6 +164,7 @@ static void node_set_child(
|
|||||||
}
|
}
|
||||||
|
|
||||||
static int entry_compare(
|
static int entry_compare(
|
||||||
|
const struct b_tree *tree,
|
||||||
const b_tree_node_entry *e0,
|
const b_tree_node_entry *e0,
|
||||||
const b_tree_node_entry *e1)
|
const b_tree_node_entry *e1)
|
||||||
{
|
{
|
||||||
|
|||||||
Reference in New Issue
Block a user