diff options
Diffstat (limited to 'v1/square.c')
-rw-r--r-- | v1/square.c | 48 |
1 files changed, 48 insertions, 0 deletions
diff --git a/v1/square.c b/v1/square.c new file mode 100644 index 0000000..cbf451a --- /dev/null +++ b/v1/square.c @@ -0,0 +1,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); +}
\ No newline at end of file |