Pattern matching and defaults for structs
[panamaz] / test-api / api.c
1
2 #include <stdio.h>
3 #include <string.h>
4 #include <stdlib.h>
5 #include "api.h"
6
7 static void funca(int a) {
8         printf("funca: %d\n", a);
9 }
10
11 static int funcb(int b) {
12         printf("funcb: %d\n", b);
13         return b * b;
14 }
15
16 static int funcc(float f) {
17         printf("funcc: %f\n", f);
18         return (int)f;
19 }
20
21 void *api_func(const char *name) {
22         printf("requesting function %s\n", name);
23
24         if (strcmp(name, "funca") == 0)
25                 return funca;
26         else if (strcmp(name, "funcb") == 0)
27                 return funcb;
28         else if (strcmp(name, "funcc") == 0)
29                 return funcc;
30         else
31                 return NULL;
32 }
33
34 void print_data(struct data *data) {
35         while (data) {
36                 printf("%p: a=%d b=%d c=%d d=%d", data, data->a, data->b, data->c, data->d);
37                 if (data->test_a)
38                         printf(" data->test_a()=%d", data->test_a());
39                 printf("\n");
40                 data = data->next;
41         }
42 }
43
44 struct api *api_create(void) {
45         struct api *api = malloc(sizeof(*api));
46
47         api->funca = funca;
48         api->funcb = funcb;
49         api->funcc = funcc;
50
51         return api;
52 }