aboutsummaryrefslogtreecommitdiff
path: root/v1/shape.c
diff options
context:
space:
mode:
Diffstat (limited to 'v1/shape.c')
-rw-r--r--v1/shape.c32
1 files changed, 32 insertions, 0 deletions
diff --git a/v1/shape.c b/v1/shape.c
new file mode 100644
index 0000000..eb5e399
--- /dev/null
+++ b/v1/shape.c
@@ -0,0 +1,32 @@
+#include <stdlib.h>
+#include "shape.h"
+
+struct shape
+{
+ void *obj;
+ shape_area_t area;
+ shape_destroy_t destroy;
+};
+
+double shape_area(struct shape *shape)
+{
+ return shape->area(shape->obj);
+}
+
+void shape_destroy(struct shape *shape)
+{
+ shape->destroy(shape->obj);
+ free(shape);
+}
+
+struct shape *shape_create(
+ void *obj,
+ shape_area_t area,
+ shape_destroy_t destroy)
+{
+ struct shape *shape = malloc(sizeof(shape));
+ shape->obj = obj;
+ shape->area = area;
+ shape->destroy = destroy;
+ return shape;
+} \ No newline at end of file