From e925c7d527f7d528e0f0bb090f814df68e1f7ba5 Mon Sep 17 00:00:00 2001 From: Adam Sutton Date: Mon, 10 Jun 2013 21:48:03 +0100 Subject: [PATCH] idnode: add a find by class feature and second enum for dynamic output --- src/idnode.c | 26 ++++++++++++++++++++++++++ src/idnode.h | 3 +++ src/prop.c | 2 ++ src/prop.h | 1 + 4 files changed, 32 insertions(+) diff --git a/src/idnode.c b/src/idnode.c index 4727bee1..a1e18262 100644 --- a/src/idnode.c +++ b/src/idnode.c @@ -616,3 +616,29 @@ idnode_set_sort { qsort_r(is->is_array, is->is_count, sizeof(idnode_t*), idnode_cmp_sort, sort); } + +void +idnode_set_free ( idnode_set_t *is ) +{ + free(is->is_array); + free(is); +} + +idnode_set_t * +idnode_find_all ( const idclass_t *idc ) +{ + idnode_t *in; + const idclass_t *ic; + idnode_set_t *is = calloc(1, sizeof(idnode_set_t)); + RB_FOREACH(in, &idnodes, in_link) { + ic = in->in_class; + while (ic) { + if (ic == idc) { + idnode_set_add(is, in, NULL); + break; + } + ic = ic->ic_super; + } + } + return is; +} diff --git a/src/idnode.h b/src/idnode.h index b065955e..478ae8de 100644 --- a/src/idnode.h +++ b/src/idnode.h @@ -76,6 +76,8 @@ const char *idnode_uuid_as_str(const idnode_t *in); void *idnode_find(const char *uuid, const idclass_t *class); +idnode_set_t *idnode_find_all(const idclass_t *class); + idnode_t **idnode_get_childs(idnode_t *in); int idnode_is_leaf(idnode_t *in); @@ -118,3 +120,4 @@ int idnode_filter void idnode_set_add ( idnode_set_t *is, idnode_t *in, idnode_filter_t *filt ); void idnode_set_sort ( idnode_set_t *is, idnode_sort_t *s ); +void idnode_set_free ( idnode_set_t *is ); diff --git a/src/prop.c b/src/prop.c index 566532f2..5d521616 100644 --- a/src/prop.c +++ b/src/prop.c @@ -173,6 +173,8 @@ prop_add_params_to_msg(void *obj, const property_t *p, htsmsg_t *msg) e++; } htsmsg_add_msg(m, "enum", l); + } else if (p[i].type == PT_STR && p[i].str_enum2) { + htsmsg_add_msg(m, "enum", p[i].str_enum2(obj)); } if (obj) prop_read_value(obj, p+i, m, "value"); diff --git a/src/prop.h b/src/prop.h index 13e9e9ff..83c2fdca 100644 --- a/src/prop.h +++ b/src/prop.h @@ -26,6 +26,7 @@ typedef struct property { const char *(*str_get)(void *ptr); void (*str_set)(void *ptr, const char *str); const char **(*str_enum)(void *ptr); + htsmsg_t *(*str_enum2)(void *ptr); void (*notify)(void *ptr);