From: Takashi Sakamoto Date: Mon, 8 Jun 2020 14:10:10 +0000 (+0900) Subject: seq: event_cntr: add accesor APIs for the type of event pointed by index X-Git-Tag: v0.1.0~131 X-Git-Url: https://git.alsa-project.org/?a=commitdiff_plain;h=c658b6513d716eb3bc0c72f7e42796ce2cd7c64e;p=alsa-gobject.git seq: event_cntr: add accesor APIs for the type of event pointed by index Signed-off-by: Takashi Sakamoto --- diff --git a/src/seq/alsaseq.map b/src/seq/alsaseq.map index d0d9531..c94be67 100644 --- a/src/seq/alsaseq.map +++ b/src/seq/alsaseq.map @@ -174,6 +174,8 @@ ALSA_GOBJECT_0_0_0 { "alsaseq_event_cntr_new"; "alsaseq_event_cntr_count_events"; "alsaseq_event_cntr_calculate_pool_consumption"; + "alsaseq_event_cntr_get_event_type"; + "alsaseq_event_cntr_set_event_type"; local: *; }; diff --git a/src/seq/event-cntr.c b/src/seq/event-cntr.c index 26f47d8..0d34d31 100644 --- a/src/seq/event-cntr.c +++ b/src/seq/event-cntr.c @@ -131,6 +131,21 @@ static struct snd_seq_event *event_iterator_next(struct event_iterator *iter) return ev; } +static struct snd_seq_event *event_iterator_find(struct event_iterator *iter, + gsize index) +{ + struct snd_seq_event *ev; + gsize count = 0; + + while ((ev = event_iterator_next(iter))) { + if (index == count) + return ev; + ++count; + } + + return NULL; +} + /** * alsaseq_event_cntr_count_events: * @self: A #ALSASeqEventCntr. @@ -187,3 +202,64 @@ void alsaseq_event_cntr_calculate_pool_consumption(ALSASeqEventCntr *self, ++total; } } + +/** + * alsaseq_event_cntr_get_event_type: + * @self: A #ALSASeqEventCntr. + * @index: The index of event to refer to. + * @ev_type: (out): The type of event. + * @error: A #GError. + * + * Get the type of event pointed by the index. + */ +void alsaseq_event_cntr_get_event_type(ALSASeqEventCntr *self, gsize index, + ALSASeqEventType *ev_type, GError **error) +{ + ALSASeqEventCntrPrivate *priv; + struct event_iterator iter; + struct snd_seq_event *ev; + + g_return_if_fail(ALSASEQ_IS_EVENT_CNTR(self)); + priv = alsaseq_event_cntr_get_instance_private(self); + + event_iterator_init(&iter, priv->buf, priv->length, priv->allocated); + + ev = event_iterator_find(&iter, index); + if (ev == NULL) { + generate_error(error, ENOENT); + return; + } + + *ev_type = (ALSASeqEventType)ev->type; +} + +/** + * alsaseq_event_cntr_set_event_type: + * @self: A #ALSASeqEventCntr. + * @index: The index of event to set. + * @ev_type: A #ALSASeqEventType. + * @error: A #GError. + * + * Set the type to event pointed by the index; + */ +void alsaseq_event_cntr_set_event_type(ALSASeqEventCntr *self, + gsize index, ALSASeqEventType ev_type, + GError **error) +{ + ALSASeqEventCntrPrivate *priv; + struct event_iterator iter; + struct snd_seq_event *ev; + + g_return_if_fail(ALSASEQ_IS_EVENT_CNTR(self)); + priv = alsaseq_event_cntr_get_instance_private(self); + + event_iterator_init(&iter, priv->buf, priv->length, priv->allocated); + + ev = event_iterator_find(&iter, index); + if (ev == NULL) { + generate_error(error, ENOENT); + return; + } + + ev->type = (snd_seq_event_type_t)ev_type; +} diff --git a/src/seq/event-cntr.h b/src/seq/event-cntr.h index ed22651..e407fa7 100644 --- a/src/seq/event-cntr.h +++ b/src/seq/event-cntr.h @@ -5,6 +5,8 @@ #include #include +#include + G_BEGIN_DECLS #define ALSASEQ_TYPE_EVENT_CNTR (alsaseq_event_cntr_get_type()) @@ -52,6 +54,12 @@ void alsaseq_event_cntr_count_events(ALSASeqEventCntr *self, gsize *count); void alsaseq_event_cntr_calculate_pool_consumption(ALSASeqEventCntr *self, gsize count, gsize *cells, GError **error); +void alsaseq_event_cntr_get_event_type(ALSASeqEventCntr *self, gsize index, + ALSASeqEventType *ev_type, GError **error); +void alsaseq_event_cntr_set_event_type(ALSASeqEventCntr *self, + gsize index, ALSASeqEventType ev_type, + GError **error); + G_END_DECLS #endif diff --git a/tests/alsaseq-event-cntr b/tests/alsaseq-event-cntr index 19d19a1..7bd34fe 100644 --- a/tests/alsaseq-event-cntr +++ b/tests/alsaseq-event-cntr @@ -15,6 +15,8 @@ methods = ( 'new', 'count_events', 'calculate_pool_consumption', + 'get_event_type', + 'set_event_type', ) signals = ()