diff options
author | Chris Young <chris@unsatisfactorysoftware.co.uk> | 2016-01-22 18:40:40 +0000 |
---|---|---|
committer | Chris Young <chris@unsatisfactorysoftware.co.uk> | 2016-01-22 18:40:40 +0000 |
commit | 7e7ea09000c9386dfa4db75be3ea6c49ab203cfd (patch) | |
tree | 7a0ae56c860d4effbaca77ab6829834179d06a35 /amiga/object.c | |
parent | c2bd86ca9644734ad87b560757251e26fde666b7 (diff) | |
download | netsurf-7e7ea09000c9386dfa4db75be3ea6c49ab203cfd.tar.gz netsurf-7e7ea09000c9386dfa4db75be3ea6c49ab203cfd.tar.bz2 |
Allocate generic list objects using itempools
TODO: Allocate the attached structures also using itempools
Diffstat (limited to 'amiga/object.c')
-rwxr-xr-x | amiga/object.c | 26 |
1 files changed, 23 insertions, 3 deletions
diff --git a/amiga/object.c b/amiga/object.c index 7d935943e..aab66bb43 100755 --- a/amiga/object.c +++ b/amiga/object.c @@ -1,5 +1,5 @@ /* - * Copyright 2005,2008 Chris Young <chris@unsatisfactorysoftware.co.uk> + * Copyright 2005, 2008, 2016 Chris Young <chris@unsatisfactorysoftware.co.uk> * * This file is part of NetSurf, http://www.netsurf-browser.org/ * @@ -18,7 +18,9 @@ #include "amiga/os3support.h" +#include <stdbool.h> #include <stdlib.h> +#include <string.h> #include <proto/exec.h> #include <exec/lists.h> @@ -35,6 +37,21 @@ #define NewnsList NewList #endif +APTR pool_nsobj = NULL; + +bool ami_object_init(void) +{ + pool_nsobj = ami_misc_itempool_create(sizeof(struct nsObject)); + + if(pool_nsobj == NULL) return false; + else return true; +} + +void ami_object_fini(void) +{ + ami_misc_itempool_delete(pool_nsobj); +} + /* Slightly abstract MinList initialisation */ void ami_NewMinList(struct MinList *list) { @@ -61,8 +78,10 @@ struct nsObject *AddObject(struct MinList *objlist, ULONG otype) { struct nsObject *dtzo; - dtzo = (struct nsObject *)ami_misc_allocvec_clear(sizeof(struct nsObject), 0); + dtzo = (struct nsObject *)ami_misc_itempool_alloc(pool_nsobj, sizeof(struct nsObject)); + if(dtzo == NULL) return NULL; + memset(dtzo, 0, sizeof(struct nsObject)); AddTail((struct List *)objlist,(struct Node *)dtzo); dtzo->Type = otype; @@ -81,7 +100,7 @@ static void DelObjectInternal(struct nsObject *dtzo, BOOL free_obj) if(dtzo->callback != NULL) dtzo->callback(dtzo->objstruct); if(dtzo->objstruct && free_obj) FreeVec(dtzo->objstruct); if(dtzo->dtz_Node.ln_Name) free(dtzo->dtz_Node.ln_Name); - FreeVec(dtzo); + ami_misc_itempool_free(pool_nsobj, dtzo, sizeof(struct nsObject)); dtzo = NULL; } @@ -110,3 +129,4 @@ void FreeObjList(struct MinList *objlist) FreeVec(objlist); } + |