int test_tag_filter(void) { BEGIN(); #undef TAG_NAMESPACE #define TAG_NAMESPACE "test" tag_typedef_t tag_a = STRTAG_TYPEDEF(a); #define TAG_A(s) tag_a, tag_str_v((s)) tag_typedef_t tag_b = STRTAG_TYPEDEF(b); #define TAG_B(s) tag_b, tag_str_v((s)) tagi_t filter[2] = {{ URLTAG_ANY() }, { TAG_END() }}; tagi_t *lst, *result; lst = tl_list(TAG_A("X"), TAG_SKIP(2), URLTAG_URL((void *)"urn:foo"), TAG_B("Y"), URLTAG_URL((void *)"urn:bar"), TAG_NULL()); TEST_1(lst); result = tl_afilter(NULL, filter, lst); TEST_1(result); TEST_P(result[0].t_tag, urltag_url); TEST_P(result[1].t_tag, urltag_url); tl_vfree(lst); free(result); END(); }
/** Filter tag list @a src with given tags. * * @sa tl_afilter(), tl_filtered_tlist(), TAG_FILTER(), TAG_ANY(), #ns_tag_class */ tagi_t *tl_tfilter(su_home_t *home, tagi_t const src[], tag_type_t tag, tag_value_t value, ...) { tagi_t *tl; ta_list ta; ta_start(ta, tag, value); tl = tl_afilter(home, ta_args(ta), src); ta_end(ta); return tl; }
/** Create a filtered tag list. * * @sa tl_afilter(), tl_tfilter(), TAG_FILTER(), TAG_ANY(), #ns_tag_class */ tagi_t *tl_filtered_tlist(su_home_t *home, tagi_t const filter[], tag_type_t tag, tag_value_t value, ...) { tagi_t *tl; ta_list ta; ta_start(ta, tag, value); tl = tl_afilter(home, filter, ta_args(ta)); ta_end(ta); return tl; }