]> git.alsa-project.org Git - alsa-gobject.git/commitdiff
seq: event_cntr: add accesor APIs for the type of event pointed by index
authorTakashi Sakamoto <o-takashi@sakamocchi.jp>
Mon, 8 Jun 2020 14:10:10 +0000 (23:10 +0900)
committer坂本 貴史 <o-takashi@sakamocchi.jp>
Tue, 9 Jun 2020 00:16:09 +0000 (09:16 +0900)
Signed-off-by: Takashi Sakamoto <o-takashi@sakamocchi.jp>
src/seq/alsaseq.map
src/seq/event-cntr.c
src/seq/event-cntr.h
tests/alsaseq-event-cntr

index d0d953107ef2c563e488e4b7483e52c1a8b692de..c94be6793741cc7f7957df92184cb3089787cbe4 100644 (file)
@@ -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:
     *;
 };
index 26f47d87dec67f51ff13f8bf5d9c5039c57ee3bd..0d34d315800deb401880604877a31e5c0779a692 100644 (file)
@@ -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;
+}
index ed22651c7b38db1b843946e0c6aa79513beedf73..e407fa7510bb11da848b46a449165393e684bbef 100644 (file)
@@ -5,6 +5,8 @@
 #include <glib.h>
 #include <glib-object.h>
 
+#include <seq/alsaseq-enums.h>
+
 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
index 19d19a1edf65d82a46dcac682023d31701661f25..7bd34fe53443b28b4263b0420ede9bd4cd072ffd 100644 (file)
@@ -15,6 +15,8 @@ methods = (
     'new',
     'count_events',
     'calculate_pool_consumption',
+    'get_event_type',
+    'set_event_type',
 )
 signals = ()