From d2b545de1e0dddf1f50fa8b0097aed3cfe925976 Mon Sep 17 00:00:00 2001 From: 0scar Date: Tue, 5 Oct 2021 14:38:55 +0200 Subject: Update example --- src/main.c | 101 +++++++++++++++++++++++++++++++++++++++---------------------- 1 file changed, 64 insertions(+), 37 deletions(-) (limited to 'src/main.c') diff --git a/src/main.c b/src/main.c index 146a450..ef0561a 100644 --- a/src/main.c +++ b/src/main.c @@ -16,7 +16,7 @@ struct userdat { }; struct userdat_map { - unsigned id; + int id; struct userdat *user; }; @@ -30,46 +30,23 @@ int userdat_cmp(const void *a, const void *b) { return BTREE_CMP_GT; } -int main() { - struct userdat *retuser; - struct userdat_map *retval; - struct btree *tree; - struct userdat a = {"John Doe", 42, gender_male}; - struct userdat b = {"Michael jordan", 80, gender_male}; - struct userdat c = {"Jennifer Lawrence", 25, gender_female}; - struct userdat d = {"Taylor Switfy", 25, gender_female}; - struct userdat e = {"John Johnson", 54, gender_male}; - struct userdat f = {"Eddison", 130, gender_male}; - struct userdat g = {"Nicolas Tesla", 115, gender_male}; - struct userdat h = {"Bjarne Stroustrup", 83, gender_male}; - - struct userdat_map ap = {0, &a}; - struct userdat_map bp = {1, &b}; - struct userdat_map cp = {2, &c}; - struct userdat_map dp = {3, &d}; - struct userdat_map ep = {4, &e}; - struct userdat_map fp = {5, &f}; - struct userdat_map gp = {6, &g}; - struct userdat_map hp = {7, &h}; - - tree = btree_new(sizeof(struct userdat_map), - BTREE_DEGREE_DEFAULT, - &userdat_cmp); - - btree_insert(tree, &ap); - btree_insert(tree, &bp); - btree_insert(tree, &cp); - btree_insert(tree, &dp); +void userprint(const void *a) { + const struct userdat_map *ua = a; + const struct userdat *u = ua->user; - btree_insert(tree, &ep); - btree_insert(tree, &fp); - btree_insert(tree, &gp); - btree_insert(tree, &hp); + printf("[%d] %s, age:%d, %c\n", + ua->id, + u->name, + u->age, + (u->gender == gender_male) ? 'M' : 'F' ); +} - retval = btree_search(tree, &fp); +void userfind(struct btree* tree, struct userdat_map *usr) { + struct userdat_map *retval; + retval = btree_search(tree, usr); if (retval != NULL) { - retuser = retval->user; + struct userdat *retuser = retval->user; printf("Query: %s, age:%d, %c\n", retuser->name, retuser->age, @@ -77,6 +54,56 @@ int main() { } else { printf("Query: not found\n"); } +} + +#define USER(_id, varp, var, age, g, name) \ + struct userdat var = {name, age, g};\ + struct userdat_map *varp = malloc(sizeof(struct userdat_map));\ + varp->id=_id;varp->user=&var; + + +int main() { + struct btree *tree; + USER( 1, ap, a, 23, gender_male, "John Doe"); + USER( 2, bp, b, 69, gender_male, "Kim Hot"); + USER( 3, cp, c, 88, gender_male, "Ron Swanson"); + USER( 4, dp, d, 12, gender_male, "Nick"); + USER( 5, ep, e, 77, gender_male, "Jay"); + USER( 6, fp, f, 54, gender_male, "Boris"); + USER( 7, gp, g, 42, gender_male, "Vladimir"); + USER( 8, hp, h, 41, gender_male, "C-not-so-sharp"); + USER( 9, ip, i, 38, gender_male, "Jane Doe"); + USER( 10, jp, j, 32, gender_male, "Thomas pilgaard"); + USER( 11, kp, k, 9, gender_male, "Barrack Obama"); + USER( 12, lp, l, 99, gender_male, "Bin File"); + USER( 13, mp, m, 78, gender_male, "Fiske filletter"); + USER( 14, np, n, 71, gender_male, "Luke skywalker"); + + tree = btree_new(sizeof(struct userdat_map), + 2, /*BTREE_DEGREE_DEFAULT / 2,*/ + &userdat_cmp); + + btree_insert((struct btree*)tree, ap); + btree_insert((struct btree*)tree, bp); + btree_insert((struct btree*)tree, cp); + btree_insert((struct btree*)tree, dp); + btree_insert((struct btree*)tree, ep); + btree_insert((struct btree*)tree, fp); + btree_insert((struct btree*)tree, gp); + btree_insert((struct btree*)tree, hp); + btree_insert((struct btree*)tree, ip); + btree_insert((struct btree*)tree, jp); + btree_insert((struct btree*)tree, kp); + btree_insert((struct btree*)tree, lp); + btree_insert((struct btree*)tree, mp); + btree_insert((struct btree*)tree, np); + + userfind(tree, ap); + userfind(tree, ep); + userfind(tree, np); + + printf("Tree:\n"); + btree_print(tree, &userprint); btree_free(tree); -- cgit v1.3