diff --git a/main.c b/main.c index 54addf6..6fb1b3d 100644 --- a/main.c +++ b/main.c @@ -5,16 +5,13 @@ struct Post_s { char *author; char *body; + + void (^init)(); + void (^printf)(); + void (^dealloc)(); }; typedef struct Post_s Post; -Post *Post_alloc() { - Post *new = malloc(sizeof(Post)); - new->author = malloc(255); - new->body = malloc(1024); - return new; -} - void Post_init(Post *self) { *self->author = '\0'; *self->body = '\0'; @@ -25,14 +22,31 @@ void Post_printf(Post *self) { } void Post_dealloc(Post *self) { + Block_release(self->dealloc); + Block_release(self->printf); + Block_release(self->init); + free(self->body); free(self->author); free(self); } +Post *Post_alloc() { + Post *new = malloc(sizeof(Post)); + new->author = malloc(255); + new->body = malloc(1024); + + new->init = Block_copy( ^ { Post_init(new); }); + new->printf = Block_copy( ^ { Post_printf(new); }); + new->dealloc = Block_copy( ^ { Post_dealloc(new); }); + + return new; +} + int main(void) { Post *post = Post_alloc(); - Post_printf(post); - Post_dealloc(post); + post->init(); + post->printf(); + post->dealloc(); return 0; }