OSDN Git Service

control: add snd_ctl_elem_id_compare() function
authorJaroslav Kysela <perex@perex.cz>
Fri, 26 Feb 2021 19:30:58 +0000 (20:30 +0100)
committerJaroslav Kysela <perex@perex.cz>
Fri, 26 Feb 2021 20:08:28 +0000 (21:08 +0100)
Compare two control element identifiers like strcmp().

Signed-off-by: Jaroslav Kysela <perex@perex.cz>
include/control.h
src/control/control.c

index 390a83e..40ac2e9 100644 (file)
@@ -424,6 +424,7 @@ int snd_ctl_elem_id_malloc(snd_ctl_elem_id_t **ptr);
 void snd_ctl_elem_id_free(snd_ctl_elem_id_t *obj);
 void snd_ctl_elem_id_clear(snd_ctl_elem_id_t *obj);
 void snd_ctl_elem_id_copy(snd_ctl_elem_id_t *dst, const snd_ctl_elem_id_t *src);
+int snd_ctl_elem_id_compare(snd_ctl_elem_id_t *id1, const snd_ctl_elem_id_t *id2);
 unsigned int snd_ctl_elem_id_get_numid(const snd_ctl_elem_id_t *obj);
 snd_ctl_elem_iface_t snd_ctl_elem_id_get_interface(const snd_ctl_elem_id_t *obj);
 unsigned int snd_ctl_elem_id_get_device(const snd_ctl_elem_id_t *obj);
index 359fe07..4c7d80f 100644 (file)
@@ -1819,6 +1819,32 @@ void snd_ctl_elem_id_copy(snd_ctl_elem_id_t *dst, const snd_ctl_elem_id_t *src)
 }
 
 /**
+ * \brief compare one #snd_ctl_elem_id_t to another
+ * \param id1 pointer to first id
+ * \param id2 pointer to second id
+ * \retval zero when values are identical, -1 first id
+ */
+int snd_ctl_elem_id_compare(snd_ctl_elem_id_t *id1, const snd_ctl_elem_id_t *id2)
+{
+       int d;
+
+       assert(id1 && id2);
+       d = id1->iface - id2->iface;
+       if (d != 0)
+               return d;
+       d = id1->device - id2->device;
+       if (d != 0)
+               return d;
+       d = id2->subdevice - id2->subdevice;
+       if (d != 0)
+               return d;
+       d = strcmp((const char *)id1->name, (const char *)id2->name);
+       if (d != 0)
+               return d;
+       return id1->index - id2->index;
+}
+
+/**
  * \brief Get numeric identifier from a CTL element identifier
  * \param obj CTL element identifier
  * \return CTL element numeric identifier