#include <stdint.h>
#include <stdio.h>
+enum psplay_order_e
+ {
+ PSPLAY_PREORDER,
+ PSPLAY_INORDER,
+ PSPLAY_POSTORDER
+ };
+
typedef struct psplayroot_struct psplayroot;
typedef psplayroot* PSplayroot;
typedef int (*psplay_cmp_t)(const void*, const void*);
typedef void (*psplay_delete_t)(PSplay);
+typedef psplay_delete_t (*psplay_action_t)(PSplay node, const enum psplay_order_e which, int level, void* data);
//
struct psplayroot_struct
PSplayroot
psplay_destroy_root (PSplayroot self);
+static inline int
+psplay_isempty_root (PSplayroot root)
+{
+ return !root->tree;
+}
+
#define PSPLAYROOT_INITIALIZER(cmp, delete) {NULL, cmp, delete, 0}
//
PSplay
psplay_remove (PSplayroot root, PSplay node);
+extern const psplay_delete_t PSPLAY_CONT;
+extern const psplay_delete_t PSPLAY_STOP;
+extern const psplay_delete_t PSPLAY_REMOVE;
+
+int
+psplay_walk (PSplayroot root, PSplay node, psplay_action_t action, int level, void* data);
+
+
void
-psplay_dump (PSplay root, FILE* dest, unsigned level);
+psplay_dump (PSplayroot root, FILE* dest);
+
#endif