summaryrefslogtreecommitdiff
path: root/src/main.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/main.c')
-rw-r--r--src/main.c59
1 files changed, 44 insertions, 15 deletions
diff --git a/src/main.c b/src/main.c
index e11b4eb..146a450 100644
--- a/src/main.c
+++ b/src/main.c
@@ -15,36 +15,65 @@ struct userdat {
enum gender gender;
};
+struct userdat_map {
+ unsigned id;
+ struct userdat *user;
+};
+
int userdat_cmp(const void *a, const void *b) {
- const struct userdat *ua = a;
- const struct userdat *ub = b;
+ const struct userdat_map *ua = a;
+ const struct userdat_map *ub = b;
- if (ua->age == ub->age) {
- if (ua->gender > ub->gender) { return BTREE_CMP_GT; }
- else if (ua->gender < ub->gender) { return BTREE_CMP_LT; }
- { return BTREE_CMP_EQ; }
+ if (ua->id == ub->id) return BTREE_CMP_EQ;
+ else if (ua->id < ub->id) return BTREE_CMP_LT;
- } else if (ua->age > ub->age) {
- return BTREE_CMP_GT;
- } return BTREE_CMP_LT;
+ return BTREE_CMP_GT;
}
int main() {
- struct userdat *retval;
+ struct userdat *retuser;
+ struct userdat_map *retval;
struct btree *tree;
- struct userdat jd = {"John Doe", 42, gender_male};
+ 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),
+ 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);
- btree_insert(tree, &jd);
+ btree_insert(tree, &ep);
+ btree_insert(tree, &fp);
+ btree_insert(tree, &gp);
+ btree_insert(tree, &hp);
- retval = btree_search(tree, &jd);
+ retval = btree_search(tree, &fp);
if (retval != NULL) {
- printf("Query: %s, age:%d, %c\n", retval->name, retval->age, (retval->gender == gender_male) ? 'M' : 'F' );
+ retuser = retval->user;
+ printf("Query: %s, age:%d, %c\n",
+ retuser->name,
+ retuser->age,
+ (retuser->gender == gender_male) ? 'M' : 'F' );
} else {
printf("Query: not found\n");
}