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);
}
/**
+ * \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