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__ */