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) 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(

View File

@@ -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 *);
}; };

View File

@@ -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)
{ {