+#define _POSIX_C_SOURCE 200809L
/*
Andersson tree library
4) Bug in jsw_aerase:
Search for successor should save the path
*/
-#include "jsw_atree.h"
+#include "jsw.h"
#include <stdlib.h>
+#include <stdio.h>
+#include <string.h>
#ifndef HEIGHT_LIMIT
#define HEIGHT_LIMIT 64 /* Tallest allowable tree */
} \
} 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 );
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 );
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 ) {
free ( tree );
}
-void *jsw_afind ( jsw_atree_t *tree, void *data )
-{
+void *jsw_afind ( jsw_atree_t *tree, void *data) {
jsw_anode_t *it = tree->root;
+ int cmp = 0;
while ( it != tree->nil ) {
- int cmp = tree->cmp ( it->data, data );
+ cmp = tree->cmp(it->data, data);
if ( cmp == 0 )
break;