add pointer to b_tree as a parameter to all callbacks

This commit is contained in:
2025-02-24 15:42:23 +00:00
parent 8571a4bfec
commit d4d26f53d6
3 changed files with 45 additions and 19 deletions

View File

@@ -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)
{
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(
@@ -118,7 +118,7 @@ static void node_set_nr_entries(
b_tree_node *node,
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(
@@ -126,7 +126,7 @@ static unsigned long node_get_child(
b_tree_node *node,
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(
@@ -135,7 +135,7 @@ static void node_set_child(
unsigned long index,
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(
@@ -143,7 +143,7 @@ static b_tree_node_entry *node_get_entry(
b_tree_node *node,
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(
@@ -152,7 +152,7 @@ static void node_set_entry(
unsigned long index,
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(
@@ -160,7 +160,7 @@ static void node_kill_entry(
b_tree_node *node,
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(
@@ -307,7 +307,7 @@ static int entry_compare(
const b_tree_node_entry *a,
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(

View File

@@ -23,18 +23,29 @@ struct b_tree_ops {
const b_tree_node *);
long (*tree_alloc_node)(struct b_tree *);
unsigned long (*node_get_nr_entries)(b_tree_node *);
void (*node_set_nr_entries)(b_tree_node *, unsigned long);
b_tree_node_entry *(*node_get_entry)(b_tree_node *, unsigned long);
unsigned long (*node_get_nr_entries)(struct b_tree *, b_tree_node *);
void (*node_set_nr_entries)(
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)(
struct b_tree *,
b_tree_node *,
unsigned long,
const b_tree_node_entry *);
void (*node_kill_entry)(b_tree_node *, unsigned long);
unsigned long (*node_get_child)(b_tree_node *, unsigned long);
void (*node_set_child)(b_tree_node *, unsigned long, unsigned long);
void (*node_kill_entry)(struct b_tree *, 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)(
const struct b_tree *,
const b_tree_node_entry *,
const b_tree_node_entry *);
};

View File

@@ -97,25 +97,32 @@ static long tree_alloc_node(struct b_tree *p)
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;
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;
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;
return (b_tree_node_entry *)&node->g_clusters[index];
}
static void node_set_entry(
struct b_tree *tree,
b_tree_node *n,
unsigned long index,
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));
}
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;
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;
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(
struct b_tree *tree,
b_tree_node *n,
unsigned long index,
unsigned long ptr)
@@ -150,6 +164,7 @@ static void node_set_child(
}
static int entry_compare(
const struct b_tree *tree,
const b_tree_node_entry *e0,
const b_tree_node_entry *e1)
{