|
Revision 72, 0.8 KB
(checked in by aqua, 4 years ago)
|
|
ok... it works -_-;;;
|
| Line | |
|---|
| 1 | /* |
|---|
| 2 | * ADT of Btree |
|---|
| 3 | */ |
|---|
| 4 | |
|---|
| 5 | #define BLOCK_SIZE 4096 |
|---|
| 6 | #define KEY_SIZE 160 |
|---|
| 7 | #define ENTRY_SIZE (KEY_SIZE+8) |
|---|
| 8 | #define ENTRY_PER_NODE ((BLOCK_SIZE-16)/ENTRY_SIZE) |
|---|
| 9 | |
|---|
| 10 | /* sizeof(btree_entry) == NODE_SIZE */ |
|---|
| 11 | typedef struct { |
|---|
| 12 | char key[KEY_SIZE]; /* key */ |
|---|
| 13 | int value; /* var */ |
|---|
| 14 | int child; /* offset of next child */ |
|---|
| 15 | } btree_entry; |
|---|
| 16 | |
|---|
| 17 | /* sizeof(btree_node) < BLOCK_SIZE */ |
|---|
| 18 | typedef struct { |
|---|
| 19 | int n; /* number of entries */ |
|---|
| 20 | int prev_node; /* offset of previous node */ |
|---|
| 21 | int next_node; /* offset of next node */ |
|---|
| 22 | int child; /* offset of first child */ |
|---|
| 23 | btree_entry entry[ENTRY_PER_NODE]; |
|---|
| 24 | } btree_node; |
|---|
| 25 | |
|---|
| 26 | typedef struct { |
|---|
| 27 | int fd; /* btree file pointer */ |
|---|
| 28 | int root; /* offset of root node */ |
|---|
| 29 | int depth; /* depth of tree */ |
|---|
| 30 | int (*compare)( btree_entry* l, btree_entry* r ); |
|---|
| 31 | } btree; |
|---|
| 32 | |
|---|
| 33 | //btree* btree_open( char* btree_file ); |
|---|
| 34 | void btree_insert( btree* tree, char* key ); |
|---|