[Roadster] [PATCH] Replace memchunks with slice allocator
Jeff Garrett
jeff at jgarrett.org
Sun Aug 19 16:35:17 PDT 2007
Memchunks are deprecated, and perform poorly. GLib replaced
them with the slice allocator.
This allows roadster to compile without --enable-deprecated.
Signed-off-by: Jeff Garrett <jeff at jgarrett.org>
---
src/location.c | 10 ++--------
src/locationset.c | 13 ++-----------
2 files changed, 4 insertions(+), 19 deletions(-)
diff --git a/src/location.c b/src/location.c
index fa21d2a..9f19c16 100644
--- a/src/location.c
+++ b/src/location.c
@@ -31,14 +31,10 @@
gboolean location_lookup_attribute_name(const gchar* pszName, gint* pnReturnID);
struct {
- GMemChunk* pLocationChunkAllocator;
} g_Location;
void location_init()
{
- g_Location.pLocationChunkAllocator = g_mem_chunk_new("ROADSTER locations",
- sizeof(location_t), sizeof(location_t) * 1000, G_ALLOC_AND_FREE);
- g_return_if_fail(g_Location.pLocationChunkAllocator != NULL);
}
// get a new point struct from the allocator
@@ -46,9 +42,8 @@ gboolean location_alloc(location_t** ppLocation)
{
g_return_val_if_fail(ppLocation != NULL, FALSE);
g_return_val_if_fail(*ppLocation == NULL, FALSE); // must be a pointer to a NULL pointer
- g_return_val_if_fail(g_Location.pLocationChunkAllocator != NULL, FALSE);
- location_t* pNew = g_mem_chunk_alloc0(g_Location.pLocationChunkAllocator);
+ location_t* pNew = g_slice_new0(location_t);
if(pNew) {
*ppLocation = pNew;
return TRUE;
@@ -60,12 +55,11 @@ gboolean location_alloc(location_t** ppLocation)
void location_free(location_t* pLocation)
{
g_return_if_fail(pLocation != NULL);
- g_return_if_fail(g_Location.pLocationChunkAllocator != NULL);
g_free(pLocation->pszName);
// give back to allocator
- g_mem_chunk_free(g_Location.pLocationChunkAllocator, pLocation);
+ g_slice_free(location_t, pLocation);
}
gboolean location_insert(gint nLocationSetID, mappoint_t* pPoint, gint* pnReturnID)
diff --git a/src/locationset.c b/src/locationset.c
index 7e26070..3f058b7 100644
--- a/src/locationset.c
+++ b/src/locationset.c
@@ -37,27 +37,18 @@
struct {
GPtrArray* pLocationSetArray; // an array of locationsets
GHashTable* pLocationSetHash; // stores pointers to locationsets, indexed by ID
-
- GMemChunk* pLocationSetChunkAllocator; // allocs locationset_t objects
} g_LocationSet;
void locationset_init()
{
g_LocationSet.pLocationSetArray = g_ptr_array_new();
g_LocationSet.pLocationSetHash = g_hash_table_new(g_int_hash, g_int_equal);
-
- // create memory allocator
- g_LocationSet.pLocationSetChunkAllocator = g_mem_chunk_new("ROADSTER locationsets",
- sizeof(locationset_t), sizeof(locationset_t) * 20, G_ALLOC_AND_FREE);
- g_return_if_fail(g_LocationSet.pLocationSetChunkAllocator != NULL);
}
// get a new locationset struct from the allocator
static gboolean locationset_alloc(locationset_t** ppReturn)
{
- g_return_val_if_fail(g_LocationSet.pLocationSetChunkAllocator != NULL, FALSE);
-
- locationset_t* pNew = g_mem_chunk_alloc0(g_LocationSet.pLocationSetChunkAllocator);
+ locationset_t* pNew = g_slice_new0(locationset_t);
// set defaults
pNew->bVisible = TRUE;
@@ -153,7 +144,7 @@ static void locationset_free(locationset_t* pLocationSet)
locationset_clear(pLocationSet);
// give back to allocator
- g_mem_chunk_free(g_LocationSet.pLocationSetChunkAllocator, pLocationSet);
+ g_slice_free(locationset_t, pLocationSet);
}
static void locationset_clear_all_locations(void)
--
1.4.4.2
More information about the roadster
mailing list