X-Git-Url: http://pileus.org/git/?a=blobdiff_plain;f=gtk%2Fgtkrbtree.h;h=a1b27a2406550ca3900937379386ea01764a8fd9;hb=HEAD;hp=f3c585b8527a68c9a449171bec8b35ed2d63d397;hpb=2d0eb8a588b9075b7918425abd562cd1ef5c8cca;p=~andy%2Fgtk diff --git a/gtk/gtkrbtree.h b/gtk/gtkrbtree.h index f3c585b85..a1b27a240 100644 --- a/gtk/gtkrbtree.h +++ b/gtk/gtkrbtree.h @@ -12,9 +12,7 @@ * Library General Public License for more details. * * You should have received a copy of the GNU Library General Public - * License along with this library; if not, write to the - * Free Software Foundation, Inc., 59 Temple Place - Suite 330, - * Boston, MA 02111-1307, USA. + * License along with this library. If not, see . */ /* A Red-Black Tree implementation used specifically by GtkTreeView. @@ -22,11 +20,12 @@ #ifndef __GTK_RBTREE_H__ #define __GTK_RBTREE_H__ -#ifdef __cplusplus -extern "C" { -#endif /* __cplusplus */ - #include + + +G_BEGIN_DECLS + + typedef enum { GTK_RBNODE_BLACK = 1 << 0, @@ -34,16 +33,12 @@ typedef enum GTK_RBNODE_IS_PARENT = 1 << 2, GTK_RBNODE_IS_SELECTED = 1 << 3, GTK_RBNODE_IS_PRELIT = 1 << 4, - GTK_RBNODE_IS_SEMI_COLLAPSED = 1 << 5, - GTK_RBNODE_IS_SEMI_EXPANDED = 1 << 6, GTK_RBNODE_INVALID = 1 << 7, GTK_RBNODE_COLUMN_INVALID = 1 << 8, GTK_RBNODE_DESCENDANTS_INVALID = 1 << 9, GTK_RBNODE_NON_COLORS = GTK_RBNODE_IS_PARENT | GTK_RBNODE_IS_SELECTED | GTK_RBNODE_IS_PRELIT | - GTK_RBNODE_IS_SEMI_COLLAPSED | - GTK_RBNODE_IS_SEMI_EXPANDED | GTK_RBNODE_INVALID | GTK_RBNODE_COLUMN_INVALID | GTK_RBNODE_DESCENDANTS_INVALID @@ -60,7 +55,6 @@ typedef void (*GtkRBTreeTraverseFunc) (GtkRBTree *tree, struct _GtkRBTree { GtkRBNode *root; - GtkRBNode *nil; GtkRBTree *parent_tree; GtkRBNode *parent_node; }; @@ -69,18 +63,6 @@ struct _GtkRBNode { guint flags : 14; - /* We keep track of whether the aggregate count of children plus 1 - * for the node itself comes to an even number. The parity flag is - * the total count of children mod 2, where the total count of - * children gets computed in the same way that the total offset gets - * computed. i.e. not the same as the "count" field below which - * doesn't include children. We could replace parity with a - * full-size int field here, and then take % 2 to get the parity flag, - * but that would use extra memory. - */ - - guint parity : 1; - GtkRBNode *left; GtkRBNode *right; GtkRBNode *parent; @@ -89,6 +71,11 @@ struct _GtkRBNode * i.e. node->left->count + node->right->count + 1 */ gint count; + /* count the number of total nodes beneath us, including nodes + * of children trees. + * i.e. node->left->count + node->right->count + node->children->root->count + 1 + */ + guint total_count; /* this is the total of sizes of * node->left, node->right, our own height, and the height @@ -110,8 +97,6 @@ struct _GtkRBNode #define GTK_RBNODE_FLAG_SET(node, flag) (node?(((node->flags&flag)==flag)?TRUE:FALSE):FALSE) -void _gtk_rbtree_push_allocator (GAllocator *allocator); -void _gtk_rbtree_pop_allocator (void); GtkRBTree *_gtk_rbtree_new (void); void _gtk_rbtree_free (GtkRBTree *tree); void _gtk_rbtree_remove (GtkRBTree *tree); @@ -126,9 +111,12 @@ GtkRBNode *_gtk_rbtree_insert_after (GtkRBTree *tree, gboolean valid); void _gtk_rbtree_remove_node (GtkRBTree *tree, GtkRBNode *node); +gboolean _gtk_rbtree_is_nil (GtkRBNode *node); void _gtk_rbtree_reorder (GtkRBTree *tree, gint *new_order, gint length); +gboolean _gtk_rbtree_contains (GtkRBTree *tree, + GtkRBTree *potential_child); GtkRBNode *_gtk_rbtree_find_count (GtkRBTree *tree, gint count); void _gtk_rbtree_node_set_height (GtkRBTree *tree, @@ -140,10 +128,17 @@ void _gtk_rbtree_node_mark_valid (GtkRBTree *tree, GtkRBNode *node); void _gtk_rbtree_column_invalid (GtkRBTree *tree); void _gtk_rbtree_mark_invalid (GtkRBTree *tree); +void _gtk_rbtree_set_fixed_height (GtkRBTree *tree, + gint height, + gboolean mark_valid); gint _gtk_rbtree_node_find_offset (GtkRBTree *tree, GtkRBNode *node); -gint _gtk_rbtree_node_find_parity (GtkRBTree *tree, +guint _gtk_rbtree_node_get_index (GtkRBTree *tree, GtkRBNode *node); +gboolean _gtk_rbtree_find_index (GtkRBTree *tree, + guint index, + GtkRBTree **new_tree, + GtkRBNode **new_node); gint _gtk_rbtree_find_offset (GtkRBTree *tree, gint offset, GtkRBTree **new_tree, @@ -153,6 +148,7 @@ void _gtk_rbtree_traverse (GtkRBTree *tree, GTraverseType order, GtkRBTreeTraverseFunc func, gpointer data); +GtkRBNode *_gtk_rbtree_first (GtkRBTree *tree); GtkRBNode *_gtk_rbtree_next (GtkRBTree *tree, GtkRBNode *node); GtkRBNode *_gtk_rbtree_prev (GtkRBTree *tree, @@ -168,14 +164,8 @@ void _gtk_rbtree_prev_full (GtkRBTree *tree, gint _gtk_rbtree_get_depth (GtkRBTree *tree); -/* This func checks the integrity of the tree */ -void _gtk_rbtree_test (const gchar *where, - GtkRBTree *tree); -void _gtk_rbtree_debug_spew (GtkRBTree *tree); +G_END_DECLS -#ifdef __cplusplus -} -#endif /* __cplusplus */ #endif /* __GTK_RBTREE_H__ */