#3 FINALY !!! objects-wiki.c compiles (with -Wall) and runs !
[svn/Cll1h/.git] / demos / objects / objects-sample.c
CommitLineData
b27abb8a 1#include <cll1h>
2
3def_community(Drawable_object,Actions);
4
5def_mem(Actions)
6{
7 void method(init) (Drawable_object self, ...);
8 void method(draw) (Drawable_object self);
9 int method(desc) (Drawable_object self,int something);
10};
11
12def_mem(Tri)
13{
14 interface(Actions);
15 int x1, y1, x2, y2, x3, y3;
16};
17
18def_mem(Rect)
19{
20 interface(Actions);
21 int x1, y1, x2, y2;
22};
23
24construct_obj(Tri,Actions);
25
26construct_obj(Rect,Actions);
27
28
29def_mem(Object_list)
30{
31 Drawable_object object;
32 list(Object_list);
33};
34
35Actions init_tri_interface(Actions this)
36{
37 this->init = init_tri;
38 this->draw = draw_tri;
39 this->desc = desc_tri;
40
41 return this;
42}
43
44Actions init_rect_interface(Actions this)
45{
46 this->init = init_tri;
47 this->draw = draw_rect;
48 this->desc = desc_rect;
49
50 return this;
51}
52
53void draw_tri(Drawable_object community)
54{
55 I_am(Tri);
56
57 printf("imagine I am drawing %d,%d - %d,%d - %d,%d\n",
58 self->x1,self->y1,self->x2,self->y2,self->x3,self->y3);
59};
60
61void draw_rect(Drawable_object community)
62{
63 I_am(Rect);
64
65 printf("imagine I am drawing %d,%d - %d,%d\n",
66 self->x1,self->y1,self->x2,self->y2);
67};
68
69int desc_tri(Drawable_object community,int something)
70{
71 I_am(Tri);
72
73 printf("I am triangle %d,%d - %d,%d - %d,%d, method draw called with argument: %d\n",
74 self->x1,self->y1,self->x2,self->y2,self->x3,self->y3,something);
75
76 return something;
77};
78
79int desc_rect(Drawable_object community,int something)
80{
81 I_am(Rect);
82
83 printf("I am rectangle %d,%d - %d,%d, method draw called with argument: %d\n",
84 self->x1,self->y1,self->x2,self->y2,something);
85
86 return something;
87};
88
89Tri init_tri(Drawable_object self, int x1, int y1, int x2, int y2, int x3, int y3)
90{
91 I_am(Tri);
92
93 self->x1 = x1;
94 self->y1 = y1;
95 self->x2 = x2;
96 self->y2 = y2;
97 self->x3 = x3;
98 self->y3 = y3;
99
100 return self;
101}
102
103Rect init_rect(Drawable_object self, int x1, int y1, int x2, int y2)
104{
105 I_am(Rect);
106
107 self->x1 = x1;
108 self->y1 = y1;
109 self->x2 = x2;
110 self->y2 = y2;
111
112 return self;
113}
114
115program
116{
117 Init_mem(tri_interface,Actions,init_tri_interface);
118 Init_mem(rect_interface,Actions,init_rect_interface);
119 Object_list all = NULL, one = get_mem(Object_list);
120
121 one->object = init_obj_as(Drawable_data, Rect, rect_interface, 0, 10, 1, 11);
122 append(one,all);
123 one->object = init_obj_as(Drawable_data, Tri, tri_interface, 0, 0, 0, 4, 3, 0);
124 append(one,all);
125 one->object = init_obj_as(Drawable_data, Rect, rect_interface, 10, 0, 11, 1);
126 append(one,all);
127
128 for_each(one,all)
129 {
130 printf("(return value %d)\n", _(one->object,desc));
131 _(one->object,draw);
132 }
133}
This page took 0.200409 seconds and 4 git commands to generate.