summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/main.c101
1 files changed, 64 insertions, 37 deletions
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);