From 708954192219feead526f84c0c8bdb29088aeae0 Mon Sep 17 00:00:00 2001 From: Tavian Barnes Date: Fri, 6 Jun 2014 14:14:00 -0400 Subject: objects: Use a vtable to shrink object structs. --- libdimension/cone.c | 18 ++++++++++++++---- 1 file changed, 14 insertions(+), 4 deletions(-) (limited to 'libdimension/cone.c') diff --git a/libdimension/cone.c b/libdimension/cone.c index c83a260..b221380 100644 --- a/libdimension/cone.c +++ b/libdimension/cone.c @@ -89,6 +89,12 @@ dmnsn_cone_inside_fn(const dmnsn_object *object, dmnsn_vector point) && point.y > -1.0 && point.y < 1.0; } +/** Cone vtable. */ +static const dmnsn_object_vtable dmnsn_cone_vtable = { + .intersection_fn = dmnsn_cone_intersection_fn, + .inside_fn = dmnsn_cone_inside_fn, +}; + /** Cone cap type. */ typedef struct dmnsn_cone_cap { dmnsn_object object; @@ -122,6 +128,12 @@ dmnsn_cone_cap_inside_fn(const dmnsn_object *object, dmnsn_vector point) return false; } +/** Cone cap vtable. */ +static const dmnsn_object_vtable dmnsn_cone_cap_vtable = { + .intersection_fn = dmnsn_cone_cap_intersection_fn, + .inside_fn = dmnsn_cone_cap_inside_fn, +}; + /** Allocate a new cone cap. */ dmnsn_object * dmnsn_new_cone_cap(dmnsn_pool *pool, double r) @@ -131,8 +143,7 @@ dmnsn_new_cone_cap(dmnsn_pool *pool, double r) dmnsn_object *object = &cap->object; dmnsn_init_object(object); - object->intersection_fn = dmnsn_cone_cap_intersection_fn; - object->inside_fn = dmnsn_cone_cap_inside_fn; + object->vtable = &dmnsn_cone_cap_vtable; object->bounding_box.min = dmnsn_new_vector(-r, 0.0, -r); object->bounding_box.max = dmnsn_new_vector(+r, 0.0, +r); return object; @@ -148,8 +159,7 @@ dmnsn_new_cone(dmnsn_pool *pool, double r1, double r2, bool open) dmnsn_object *object = &cone->object; dmnsn_init_object(object); - object->intersection_fn = dmnsn_cone_intersection_fn; - object->inside_fn = dmnsn_cone_inside_fn; + object->vtable = &dmnsn_cone_vtable; double rmax = dmnsn_max(r1, r2); object->bounding_box.min = dmnsn_new_vector(-rmax, -1.0, -rmax); -- cgit v1.2.3