From 9708b5b0e2b5de0e60fb6b0ef7925bc9375b85cf Mon Sep 17 00:00:00 2001 From: XANTRONIX Development Date: Thu, 17 Mar 2022 11:33:22 -0400 Subject: Implement xas_object_call_table Changes: * Implement xas_object_call_table as a static structure to allow creating a static dispatch table on a per-compilation-unit basis * Refactor xas_object to provide a single pointer to a xas_object_call_table * Refactor all object implementations to use xas_object_call_table --- include/xas/object.h | 48 ++++++++++++++++++++++++++++++++++++++---------- 1 file changed, 38 insertions(+), 10 deletions(-) (limited to 'include') diff --git a/include/xas/object.h b/include/xas/object.h index 4d5b754..64d645b 100644 --- a/include/xas/object.h +++ b/include/xas/object.h @@ -3,12 +3,18 @@ #include +typedef struct _xas_object_coord { + float x, y, z; +} xas_object_coord; + typedef struct _xas_object xas_object; typedef int (*xas_object_start_callback)(xas_object *object, size_t index); typedef int (*xas_object_stop_callback)(xas_object *object, size_t index); +typedef int (*xas_object_set_type_callback)(xas_object *object, int type); + typedef int (*xas_object_set_gain_callback)(xas_object *object, float gain); typedef int (*xas_object_set_freq_callback)(xas_object *object, size_t freq); @@ -19,27 +25,43 @@ typedef int (*xas_object_set_entry_callback)(xas_object *object, typedef int (*xas_object_set_flags_callback)(xas_object *object, int flags); +typedef int (*xas_object_set_point_callback)(xas_object *object, + xas_object_coord point); + +typedef int (*xas_object_set_heading_callback)(xas_object *object, + xas_object_coord heading); + +typedef int (*xas_object_set_speed_callback)(xas_object *object, float speed); + typedef xas_audio_stream *(*xas_object_stream_new_callback)(xas_object *object); typedef void (*xas_object_destroy_callback)(xas_object *object); +typedef struct _xas_object_call_table { + xas_object_start_callback start; + xas_object_stop_callback stop; + xas_object_set_type_callback set_type; + xas_object_set_gain_callback set_gain; + xas_object_set_entry_callback set_entry; + xas_object_set_freq_callback set_freq; + xas_object_set_flags_callback set_flags; + xas_object_set_point_callback set_point; + xas_object_set_heading_callback set_heading; + xas_object_set_speed_callback set_speed; + xas_object_stream_new_callback stream_new; + xas_object_destroy_callback destroy; +} xas_object_call_table; + struct _xas_object { - xas_object_start_callback start; - xas_object_stop_callback stop; - xas_object_set_gain_callback set_gain; - xas_object_set_entry_callback set_entry; - xas_object_set_freq_callback set_freq; - xas_object_set_flags_callback set_flags; - xas_object_stream_new_callback stream_new; - xas_object_destroy_callback destroy; + xas_object_call_table *table; }; -void xas_object_init(xas_object *object); - int xas_object_start(xas_object *object, size_t index); int xas_object_stop(xas_object *object, size_t index); +int xas_object_set_type(xas_object *object, int type); + int xas_object_set_gain(xas_object *object, float gain); int xas_object_set_entry(xas_object *object, size_t index, size_t entry); @@ -48,6 +70,12 @@ int xas_object_set_freq(xas_object *object, size_t freq); int xas_object_set_flags(xas_object *object, int flags); +int xas_object_set_point(xas_object *object, xas_object_coord point); + +int xas_object_set_heading(xas_object *object, xas_object_coord heading); + +int xas_object_set_speed(xas_object *object, float speed); + xas_audio_stream *xas_object_stream_new(xas_object *object); void xas_object_destroy(xas_object *object); -- cgit v1.2.3