2008-06-06 05:36:51 -07:00
|
|
|
/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
|
2012-06-01 12:19:47 -07:00
|
|
|
/* This Source Code Form is subject to the terms of the Mozilla Public
|
|
|
|
* License, v. 2.0. If a copy of the MPL was not distributed with this
|
|
|
|
* file, You can obtain one at http://mozilla.org/MPL/2.0/. */
|
2008-06-06 05:36:51 -07:00
|
|
|
|
2011-08-05 08:51:26 -07:00
|
|
|
#ifndef PLARENAS_H
|
2008-06-06 05:36:51 -07:00
|
|
|
#define PLARENAS_H
|
|
|
|
|
|
|
|
PR_BEGIN_EXTERN_C
|
|
|
|
|
|
|
|
typedef struct PLArenaPool PLArenaPool;
|
|
|
|
|
|
|
|
/*
|
|
|
|
** Initialize an arena pool with the given name for debugging and metering,
|
2011-08-18 05:58:49 -07:00
|
|
|
** with a minimum gross size per arena of size bytes. The net size per arena
|
|
|
|
** is smaller than the gross size by a header of four pointers plus any
|
|
|
|
** necessary padding for alignment.
|
|
|
|
**
|
|
|
|
** Note: choose a gross size that's a power of two to avoid the heap allocator
|
|
|
|
** rounding the size up.
|
2008-06-06 05:36:51 -07:00
|
|
|
**/
|
|
|
|
PR_EXTERN(void) PL_InitArenaPool(
|
|
|
|
PLArenaPool *pool, const char *name, PRUint32 size, PRUint32 align);
|
|
|
|
|
|
|
|
/*
|
|
|
|
** Finish using arenas, freeing all memory associated with them.
|
|
|
|
**/
|
|
|
|
PR_EXTERN(void) PL_ArenaFinish(void);
|
|
|
|
|
|
|
|
/*
|
|
|
|
** Free the arenas in pool. The user may continue to allocate from pool
|
|
|
|
** after calling this function. There is no need to call PL_InitArenaPool()
|
|
|
|
** again unless PL_FinishArenaPool(pool) has been called.
|
|
|
|
**/
|
|
|
|
PR_EXTERN(void) PL_FreeArenaPool(PLArenaPool *pool);
|
|
|
|
|
|
|
|
/*
|
|
|
|
** Free the arenas in pool and finish using it altogether.
|
|
|
|
**/
|
|
|
|
PR_EXTERN(void) PL_FinishArenaPool(PLArenaPool *pool);
|
|
|
|
|
|
|
|
/*
|
|
|
|
** Compact all of the arenas in a pool so that no space is wasted.
|
2011-08-05 08:51:26 -07:00
|
|
|
** NOT IMPLEMENTED. Do not use.
|
2008-06-06 05:36:51 -07:00
|
|
|
**/
|
|
|
|
PR_EXTERN(void) PL_CompactArenaPool(PLArenaPool *pool);
|
|
|
|
|
|
|
|
/*
|
|
|
|
** Friend functions used by the PL_ARENA_*() macros.
|
2013-05-22 07:31:26 -07:00
|
|
|
**
|
|
|
|
** WARNING: do not call these functions directly. Always use the
|
|
|
|
** PL_ARENA_*() macros.
|
2008-06-06 05:36:51 -07:00
|
|
|
**/
|
|
|
|
PR_EXTERN(void *) PL_ArenaAllocate(PLArenaPool *pool, PRUint32 nb);
|
|
|
|
|
|
|
|
PR_EXTERN(void *) PL_ArenaGrow(
|
|
|
|
PLArenaPool *pool, void *p, PRUint32 size, PRUint32 incr);
|
|
|
|
|
|
|
|
PR_EXTERN(void) PL_ArenaRelease(PLArenaPool *pool, char *mark);
|
|
|
|
|
2010-03-30 12:23:44 -07:00
|
|
|
/*
|
|
|
|
** memset contents of all arenas in pool to pattern
|
|
|
|
*/
|
|
|
|
PR_EXTERN(void) PL_ClearArenaPool(PLArenaPool *pool, PRInt32 pattern);
|
|
|
|
|
2013-02-10 16:27:31 -08:00
|
|
|
/*
|
2013-02-11 17:35:56 -08:00
|
|
|
** A function like malloc_size() or malloc_usable_size() that measures the
|
2013-02-10 16:27:31 -08:00
|
|
|
** size of a heap block.
|
|
|
|
*/
|
|
|
|
typedef size_t (*PLMallocSizeFn)(const void *ptr);
|
|
|
|
|
|
|
|
/*
|
2013-02-11 17:35:56 -08:00
|
|
|
** Measure all memory used by a PLArenaPool, excluding the PLArenaPool
|
2013-02-10 16:27:31 -08:00
|
|
|
** structure.
|
|
|
|
*/
|
|
|
|
PR_EXTERN(size_t) PL_SizeOfArenaPoolExcludingPool(
|
2013-02-11 17:35:56 -08:00
|
|
|
const PLArenaPool *pool, PLMallocSizeFn mallocSizeOf);
|
2013-02-10 16:27:31 -08:00
|
|
|
|
2008-06-06 05:36:51 -07:00
|
|
|
PR_END_EXTERN_C
|
|
|
|
|
2011-08-05 08:51:26 -07:00
|
|
|
#endif /* PLARENAS_H */
|