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