summaryrefslogtreecommitdiffstats
path: root/include
diff options
context:
space:
mode:
authorXANTRONIX Development2022-03-17 11:33:22 -0400
committerXANTRONIX Development2022-03-17 11:33:22 -0400
commit9708b5b0e2b5de0e60fb6b0ef7925bc9375b85cf (patch)
treeaef908a56c0e77660d5102ba096addb1ff514223 /include
parentc424f18c451408aa1adb146008b713eac7669b62 (diff)
downloadxas-9708b5b0e2b5de0e60fb6b0ef7925bc9375b85cf.tar.gz
xas-9708b5b0e2b5de0e60fb6b0ef7925bc9375b85cf.tar.bz2
xas-9708b5b0e2b5de0e60fb6b0ef7925bc9375b85cf.zip
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
Diffstat (limited to 'include')
-rw-r--r--include/xas/object.h48
1 files changed, 38 insertions, 10 deletions
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 <xas/audio.h>
+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);