blob: cbf451a3ebe30b10e24cf23e0db34216fadcf1be (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
|
#include <stdlib.h>
#include "square.h"
struct square
{
struct shape *shape;
double width;
};
/* Shape interface */
double shape_area_impl(struct shape *shape)
{
struct square *square = (struct square *)shape;
return square_area(square);
}
void shape_destroy_impl(struct shape *shape)
{
struct square *square = (struct square *)shape;
square_destroy(square);
}
struct shape *square_as_shape(struct square *square)
{
return square->shape;
}
/* End of shape interface */
struct square *square_create(double width)
{
struct square *square = malloc(sizeof(struct square));
square->width = width;
square->shape = shape_create(square, shape_area_impl, shape_destroy_impl);
return square;
}
double square_area(struct square *square)
{
return square->width * square->width;
}
void square_destroy(struct square *square)
{
free(square);
}
|