1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
|
/**
* Distributed under the Boost Software License, Version 1.0.
* See accompanying file LICENSE or copy at http://www.boost.org/LICENSE_1_0.txt
*/
#ifndef __BPLUS_NODE_H__
#define __BPLUS_NODE_H__
#include "bplus_tree_private.h"
#ifdef __cplusplus
extern "C"
{
#endif // ifdef __cplusplus
struct _BplusNode
{
size_t length;
BplusItem items[BPLUS_TREE_ORDER];
uint8_t is_leaf;
BplusNode* parent;
};
#define bplus_key_gt(bplus_tree_m, k1, k2) ((k1) > (k2))
#define bplus_key_gte(bplus_tree_m, k1, k2) ((k1) >= (k2))
#define bplus_key_lt(bplus_tree_m, k1, k2) ((k1) < (k2))
#define bplus_key_lte(bplus_tree_m, k1, k2) ((k1) <= (k2))
#define bplus_key_eq(bplus_tree_m, k1, k2) ((k1) == (k2))
#define bplus_key_neq(bplus_tree_m, k1, k2) ((k1) != (k2))
#define bplus_key_at(node_m, index_m) (((BplusNode*) node_m)->items[(index_m)].key)
#define bplus_key_first(node_m) bplus_key_at(node_m, 0)
#define bplus_key_last(node_m) bplus_key_at(node_m, (node_m)->length - 1)
#define bplus_value_at(node_m, index_m) (((BplusNode*) node_m)->items[(index_m)].value)
#define bplus_value_first(node_m) bplus_value_at(node_m, 0)
#define bplus_value_last(node_m) bplus_value_at(node_m, (node_m)->length - 1)
#define bplus_node_at(node_m, index_m) ((BplusNode*) bplus_value_at(node_m, index_m))
#define bplus_node_first(node_m) ((BplusNode*) bplus_value_first(node_m))
#define bplus_node_last(node_m) ((BplusNode*) bplus_value_last(node_m))
#define bplus_node_overfilled(node_m) ((node_m)->length > (BPLUS_TREE_ORDER - 1))
#define bplus_node_underfilled(node_m) ((node_m)->length <= 1)
BplusNode* bplus_node_new(BplusTree* tree);
BplusNode* bplus_node_new_right(BplusTree* tree, BplusNode* node_left);
void bplus_node_destroy(BplusTree* tree, BplusNode* node);
void bplus_node_init(BplusNode* node, gboolean is_leaf);
void bplus_node_move_and_resize_data(BplusTree const* tree, BplusNode* node, size_t const index_to, size_t const index_from);
#ifdef __cplusplus
}
#endif // ifdef __cplusplus
#endif // ifndef __BPLUS_NODE_H__
|