90 lines
2.3 KiB
C
90 lines
2.3 KiB
C
#ifndef __BTREE_H__
|
|
#define __BTREE_H__
|
|
|
|
#ifndef __BTREE_PRIVATE_H__
|
|
typedef void * btree_t;
|
|
typedef void * node_t;
|
|
#endif
|
|
|
|
/*
|
|
* Alocates and initializes a new b+tree structure
|
|
*/
|
|
extern btree_t BTreeNew (void);
|
|
|
|
/*
|
|
* Inserts in the b+tree the object with key key
|
|
*/
|
|
extern void BTreeInsert (btree_t *btree, double key, void *data);
|
|
|
|
/*
|
|
* Searchs the b+tree for the min key object returning it
|
|
*
|
|
* If nidx(node index) and bidx(branch index) is not NULL
|
|
* ...
|
|
*/
|
|
extern void * BTreeMin(btree_t btree, node_t *nidx, int *bidx);
|
|
|
|
/*
|
|
* Searchs the b+tree for the max key object returning it
|
|
*
|
|
* If nidx(node index) and bidx(branch index) is not NULL
|
|
* ...
|
|
*/
|
|
extern void * BTreeMax(btree_t btree, node_t *nidx, int *bidx);
|
|
|
|
/* Seach Kinds */
|
|
#define EQ 1 /* BTreeSearch(btree, key, EQ, NULL, NULL); */
|
|
#define LE 2
|
|
#define LT 3
|
|
/* First call: BTreeMin(btree, nidx, bidx);
|
|
Next Calls(until NULL is returned):
|
|
BTreeSearchNext(key_max, LT || LE, btree, nidx, bidx);*/
|
|
#define GE 4
|
|
#define GT 5
|
|
/* First call: BTreeSearch(btree, key_min, GE || GT, nidx, bidx);
|
|
Next Calls(until NULL is returned):
|
|
BTreeSearchNext(key_min, LT || LE, btree, nidx, bidx);*/
|
|
|
|
/* Range Searches
|
|
* First call: BTreeSearch(btree, key_min, GE || GT, nidx, bidx);
|
|
* Next Calls(until NULL is returned):
|
|
* BTreeSearchNext(key_max, LT || LE, btree, nidx, bidx);
|
|
*/
|
|
|
|
/*
|
|
* Searchs the b+tree for:
|
|
* if kind == EQ finds the key object returning it
|
|
* if kind == GE || GT finds the first valid key returning it
|
|
*
|
|
* Returns NULL on fail to find
|
|
*
|
|
* Other parameter to kind will fail
|
|
*
|
|
* If nidx(node index) and bidx(branch index) is not NULL it those values
|
|
*/
|
|
extern void * BTreeSearch(btree_t btree, double key, int kind,
|
|
node_t *nidx, int *bidx);
|
|
|
|
/*
|
|
* Searches next valid answers given nidx, bidx where set in previous call to
|
|
* BTreeMin or BTreeSearch
|
|
*
|
|
* It will return the valid key objects with kind LE or LT, NULL otherwise
|
|
*
|
|
* nidx(node index) and bidx(branch index) will also be set
|
|
*/
|
|
extern void * BTreeSearchNext (double key, int kind,
|
|
node_t *nidx, int *bidx);
|
|
|
|
/*
|
|
* Destroys b+tree, freeing all the memory allocated to it
|
|
*/
|
|
extern void BTreeDestroy (btree_t);
|
|
|
|
/*
|
|
* Debug function, prints b+tree
|
|
*/
|
|
extern void BTreePrint(btree_t);
|
|
|
|
#endif /*__BTREE_H__*/
|