]> git.lizzy.rs Git - cclosure.git/blob - player.c
Fix obi-wan problem
[cclosure.git] / player.c
1 #include <stdio.h>
2 #include <stdlib.h>
3 #include "closure.h"
4 #include "player.h"
5
6 static bool player_adult(Player *self)
7 {
8         return self->age >= 18;
9 }
10
11 static void player_print(Player *self)
12 {
13         printf("Name: %s\nAge: %d\n", self->name, self->age);
14 }
15
16 static void player_birthday(Player *self)
17 {
18         self->age++;
19 }
20
21 static int player_compare(Player *other, Player *self)
22 {
23         return self->age - other->age;
24 }
25
26 static void player_delete(Player *self)
27 {
28         closure_destroy(self->closure);
29         free(self);
30 }
31
32 Player *player(char *name)
33 {
34         Player *self = malloc(sizeof *self);
35         self->name = name;
36         self->age = 0;
37
38         self->closure = closure_create(self, (ClosureParam[5]) {
39                 {&player_adult,    &self->adult,    0},
40                 {&player_print,    &self->print,    0},
41                 {&player_birthday, &self->birthday, 0},
42                 {&player_compare,  &self->compare,  1},
43                 {&player_delete,   &self->delete,   0},
44         }, 5);
45
46         return self;
47 }