summaryrefslogtreecommitdiff
path: root/gtk/gtkrbtree.c
diff options
context:
space:
mode:
authorTim Janik <timj@imendio.com>2005-11-01 18:10:51 +0000
committerTim Janik <timj@src.gnome.org>2005-11-01 18:10:51 +0000
commitd6a9db90958e21c5460b6f381bcef1999d73cc38 (patch)
tree376c5c492334b9c03041c60bdcc3b122cd5a45a9 /gtk/gtkrbtree.c
parent4d1b5589c5aba0d7469563e013c62a06e8e18ec9 (diff)
downloadgtk+-d6a9db90958e21c5460b6f381bcef1999d73cc38.tar.gz
get rid of GAllocator usage, allocate and free nodes via the g_slice_*()
Tue Nov 1 16:18:24 2005 Tim Janik <timj@imendio.com> * gtk/gtkrbtree.[hc]: get rid of GAllocator usage, allocate and free nodes via the g_slice_*() API. _gtk_rbtree_new(): fixed wrong node allocation via g_new().
Diffstat (limited to 'gtk/gtkrbtree.c')
-rw-r--r--gtk/gtkrbtree.c106
1 files changed, 4 insertions, 102 deletions
diff --git a/gtk/gtkrbtree.c b/gtk/gtkrbtree.c
index e46cc98dfd..32ac571933 100644
--- a/gtk/gtkrbtree.c
+++ b/gtk/gtkrbtree.c
@@ -22,7 +22,6 @@
#include "gtkdebug.h"
#include "gtkalias.h"
-static void _gtk_rbnode_validate_allocator (GAllocator *allocator);
static GtkRBNode * _gtk_rbnode_new (GtkRBTree *tree,
gint height);
static void _gtk_rbnode_free (GtkRBNode *node);
@@ -43,76 +42,11 @@ static inline void _fixup_parity (GtkRBTree *tree,
-/* node allocation
- */
-struct _GAllocator /* from gmem.c */
-{
- gchar *name;
- guint16 n_preallocs;
- guint is_unused : 1;
- guint type : 4;
- GAllocator *last;
- GMemChunk *mem_chunk;
- GtkRBNode *free_nodes; /* implementation specific */
-};
-
-
-G_LOCK_DEFINE_STATIC (current_allocator);
-static GAllocator *current_allocator = NULL;
-
-
-/* HOLDS: current_allocator_lock */
-static void
-_gtk_rbnode_validate_allocator (GAllocator *allocator)
-{
- g_return_if_fail (allocator != NULL);
- g_return_if_fail (allocator->is_unused == TRUE);
-
- if (allocator->type != G_ALLOCATOR_NODE)
- {
- allocator->type = G_ALLOCATOR_NODE;
- if (allocator->mem_chunk)
- {
- g_mem_chunk_destroy (allocator->mem_chunk);
- allocator->mem_chunk = NULL;
- }
- }
-
- if (!allocator->mem_chunk)
- {
- allocator->mem_chunk = g_mem_chunk_new (allocator->name,
- sizeof (GtkRBNode),
- sizeof (GtkRBNode) * allocator->n_preallocs,
- G_ALLOC_ONLY);
- allocator->free_nodes = NULL;
- }
-
- allocator->is_unused = FALSE;
-}
-
static GtkRBNode *
_gtk_rbnode_new (GtkRBTree *tree,
gint height)
{
- GtkRBNode *node;
-
- G_LOCK (current_allocator);
- if (!current_allocator)
- {
- GAllocator *allocator = g_allocator_new ("GTK+ default GtkRBNode allocator",
- 128);
- _gtk_rbnode_validate_allocator (allocator);
- allocator->last = NULL;
- current_allocator = allocator;
- }
- if (!current_allocator->free_nodes)
- node = g_chunk_new (GtkRBNode, current_allocator->mem_chunk);
- else
- {
- node = current_allocator->free_nodes;
- current_allocator->free_nodes = node->left;
- }
- G_UNLOCK (current_allocator);
+ GtkRBNode *node = g_slice_new (GtkRBNode);
node->left = tree->nil;
node->right = tree->nil;
@@ -128,21 +62,16 @@ _gtk_rbnode_new (GtkRBTree *tree,
static void
_gtk_rbnode_free (GtkRBNode *node)
{
- G_LOCK (current_allocator);
- node->left = current_allocator->free_nodes;
- current_allocator->free_nodes = node;
if (gtk_debug_flags & GTK_DEBUG_TREE)
{
- /* unfortunately node->left has to continue to point to
- * a node...
- */
+ node->left = (gpointer) 0xdeadbeef;
node->right = (gpointer) 0xdeadbeef;
node->parent = (gpointer) 0xdeadbeef;
node->offset = 56789;
node->count = 56789;
node->flags = 0;
}
- G_UNLOCK (current_allocator);
+ g_slice_free (GtkRBNode, node);
}
static void
@@ -400,33 +329,6 @@ _gtk_rbtree_remove_node_fixup (GtkRBTree *tree,
GTK_RBNODE_SET_COLOR (node, GTK_RBNODE_BLACK);
}
-/* Public functions */
-void
-_gtk_rbnode_push_allocator (GAllocator *allocator)
-{
- G_LOCK (current_allocator);
- _gtk_rbnode_validate_allocator ( allocator );
- allocator->last = current_allocator;
- current_allocator = allocator;
- G_UNLOCK (current_allocator);
-}
-
-void
-_gtk_rbnode_pop_allocator (void)
-{
- G_LOCK (current_allocator);
- if (current_allocator)
- {
- GAllocator *allocator;
-
- allocator = current_allocator;
- current_allocator = allocator->last;
- allocator->last = NULL;
- allocator->is_unused = TRUE;
- }
- G_UNLOCK (current_allocator);
-}
-
GtkRBTree *
_gtk_rbtree_new (void)
{
@@ -436,7 +338,7 @@ _gtk_rbtree_new (void)
retval->parent_tree = NULL;
retval->parent_node = NULL;
- retval->nil = g_new0 (GtkRBNode, 1);
+ retval->nil = g_slice_new (GtkRBNode);
retval->nil->left = NULL;
retval->nil->right = NULL;
retval->nil->parent = NULL;