#ifndef BTREE_H
#define BTREE_H
#include "btree_types.h" // integer definitions
#include "btree_vfs.h" // bTreeVFS class
#include "btree_key.h" // bTree key functions
enum treeTypes { BT_CUSTOM, BT_PCHAR, BT_STRING, BT_SINGLE, BT_DOUBLE, BT_INT32, BT_INT64 };
typedef struct blockRun_t {
int32 AG;
uInt16 start;
uInt16 len;
} __attribute__((__packed__));
typedef blockRun_t inodeAddr;
typedef union {
int32 i;
uInt32 u;
float f;
double d;
void * p;
inodeAddr iAddr;
int64 offset;
} uPtr;
typedef struct bNodeData_t {
uPtr link;
union {
char str[1];
float f;
double d;
int32 i;
int64 x;
} key;
} __attribute__((__packed__));
typedef struct bTreeSearch {
uPtr value;
void * key;
int keySize;
}; // bTreeSearchRec
typedef struct bTreeInfo {
int64 magic;
uPtr root;
uPtr firstDeleted;
uInt32 nodes;
uInt32 height;
uInt32 keys;
uInt32 bNodeSize;
treeTypes treeType;
} __attribute__((__packed__));
class bTree {
protected:
compareKeyFunc compareKey;
copyKeyProc copyKey;
keySizeFunc keySize;
bTreeInfo * info;
bTreeVFS * vfs;
bool memoryTree;
bool treeChanged;
int align(int);
public:
bTree(char *, uInt32, treeTypes, bTreeVFS *);
void InstallUserFunctions(compareKeyFunc, copyKeyProc, keySizeFunc);
virtual ~bTree(void);
};// bTree
#endif