This repository has been archived on 2023-08-20. You can view files and clone it, but cannot push or open issues or pull requests.
yap-6.3/packages/udi/b+tree/b+tree.h
2015-10-13 08:17:51 +01:00

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__*/