/* DRW tree node definition for holding a tree of linked lists at each */
/* node */

#ifndef drwtreefnh_H
 #define drwtreefnh_H

#ifndef drwll_H
 #include "DRW/drwllh.h"
#endif

#ifndef drwGPdef_H
 #include "DRW/drwGPdef.h"
#endif

#ifndef os_H
 #include "OSLib/os.h"
#endif

#if defined NAMESPACE_DRWIMPC
  namespace DrWimpC {
#endif

typedef int (*drw_tree_loop_count)(void *data,
                                   drw_tree_node_walk_data *twd);
typedef os_error *(*drw_tree_node_action)(void *data,
                                          drw_tree_node_walk_data *twd);
typedef os_error *(*drw_tree_node_isaction)(void *data,
                                            drw_tree_node_walk_data *twd);
typedef os_error *(*drw_tree_node_ieaction)(void *data,
                                            drw_tree_node_walk_data *twd);


typedef struct drw_tree_node                drw_tree_node;
typedef struct drw_tree_node_walk_data      drw_tree_node_walk_data
typedef struct drw_tree_NR_data             drw_tree_NR_data;


typedef bits drw_tree_walk_flags;


#define drw_tree_walk_flags_none       ((drw_tree_walk_flags) 0x0u)
#define drw_tree_walk_stop_after_find  ((drw_tree_walk_flags) 0x1u)
#define drw_tree_walk_stop_on_error    ((drw_tree_walk_flags) 0x2u)
#define drw_tree_walk_delete_tree      ((drw_tree_walk_flags) 0x4u)
#define drw_tree_walk_item_found       ((drw_tree_walk_flags) 0x8u)
#define drw_tree_walk_firstnode        ((drw_tree_walk_flags) 0x10u)
#define drw_tree_walk_firstnodedone    ((drw_tree_walk_flags) 0x20u)


struct drw_tree_node {

drw_tree_node *parent;
drw_ll_hdr children;
drwGP data;

};


struct drw_tree_node_walk_data {

drw_tree_loop_count loop_count;
drw_tree_node_action action;
drw_tree_node_isaction isaction;
drw_tree_node_ieaction ieaction;
void *userdata;
drw_tree_walk_flags flags;
os_error *tree_error;

};


struct drw_tree_NR_data {

drw_tree_node *currtnode;
int loop_count;
int i;
drw_tree_walk_flags flags;

};


#if defined NAMESPACE_DRWIMPC
  }
#endif

#ifndef drwalloc_H
 #include "DRW/drwalloch.h"
#endif

#iclude "DRW/drwtreefns.h"

#endif


