X-Git-Url: https://pd.if.org/git/?p=zpackage;a=blobdiff_plain;f=lib%2Fjsw%2Fjsw_atree.c;h=d73e22afc18898ad80d579f5c61efa0e2ce4075f;hp=82c24ca81aa1bef809df5b3bfca26d83a29c269b;hb=09490cd2433e3c37a0d85220b4f12f01e6740d46;hpb=b6f9b692cd319ffbe43fbd191b13613532d82e37 diff --git a/lib/jsw/jsw_atree.c b/lib/jsw/jsw_atree.c index 82c24ca..d73e22a 100644 --- a/lib/jsw/jsw_atree.c +++ b/lib/jsw/jsw_atree.c @@ -1,3 +1,4 @@ +#define _POSIX_C_SOURCE 200809L /* Andersson tree library @@ -66,6 +67,10 @@ struct jsw_atrav { } \ } while(0) +int jsw_afind_strcmp(const void *a, const void *b) { + return strcmp(a, b); +} + static jsw_anode_t *new_node ( jsw_atree_t *tree, void *data ) { jsw_anode_t *rn = malloc ( sizeof *rn ); @@ -80,6 +85,10 @@ static jsw_anode_t *new_node ( jsw_atree_t *tree, void *data ) return rn; } +jsw_atree_t *jsw_anew_str(void) { + return jsw_anew(jsw_afind_strcmp, (dup_f)strdup, (rel_f)free); +} + jsw_atree_t *jsw_anew ( cmp_f cmp, dup_f dup, rel_f rel ) { jsw_atree_t *rt = malloc ( sizeof *rt ); @@ -108,10 +117,16 @@ jsw_atree_t *jsw_anew ( cmp_f cmp, dup_f dup, rel_f rel ) return rt; } -void jsw_adelete ( jsw_atree_t *tree ) -{ - jsw_anode_t *it = tree->root; - jsw_anode_t *save; +void jsw_adelete(jsw_atree_t *tree) { + jsw_anode_t *it; + jsw_anode_t *save; + + if (!tree) { + return; + } + + it = tree->root; + /* Destruction by rotation */ while ( it != tree->nil ) {