Wed, 31 Dec 2014 06:55:50 +0100
Added tag UPSTREAM_283F7C6 for changeset ca08bd8f51b2
1 /* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
2 /* This Source Code Form is subject to the terms of the Mozilla Public
3 * License, v. 2.0. If a copy of the MPL was not distributed with this
4 * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
6 #ifndef PLARENAS_H
7 #define PLARENAS_H
9 PR_BEGIN_EXTERN_C
11 typedef struct PLArenaPool PLArenaPool;
13 /*
14 ** Initialize an arena pool with the given name for debugging and metering,
15 ** with a minimum gross size per arena of size bytes. The net size per arena
16 ** is smaller than the gross size by a header of four pointers plus any
17 ** necessary padding for alignment.
18 **
19 ** Note: choose a gross size that's a power of two to avoid the heap allocator
20 ** rounding the size up.
21 **/
22 PR_EXTERN(void) PL_InitArenaPool(
23 PLArenaPool *pool, const char *name, PRUint32 size, PRUint32 align);
25 /*
26 ** Finish using arenas, freeing all memory associated with them.
27 **/
28 PR_EXTERN(void) PL_ArenaFinish(void);
30 /*
31 ** Free the arenas in pool. The user may continue to allocate from pool
32 ** after calling this function. There is no need to call PL_InitArenaPool()
33 ** again unless PL_FinishArenaPool(pool) has been called.
34 **/
35 PR_EXTERN(void) PL_FreeArenaPool(PLArenaPool *pool);
37 /*
38 ** Free the arenas in pool and finish using it altogether.
39 **/
40 PR_EXTERN(void) PL_FinishArenaPool(PLArenaPool *pool);
42 /*
43 ** Compact all of the arenas in a pool so that no space is wasted.
44 ** NOT IMPLEMENTED. Do not use.
45 **/
46 PR_EXTERN(void) PL_CompactArenaPool(PLArenaPool *pool);
48 /*
49 ** Friend functions used by the PL_ARENA_*() macros.
50 **
51 ** WARNING: do not call these functions directly. Always use the
52 ** PL_ARENA_*() macros.
53 **/
54 PR_EXTERN(void *) PL_ArenaAllocate(PLArenaPool *pool, PRUint32 nb);
56 PR_EXTERN(void *) PL_ArenaGrow(
57 PLArenaPool *pool, void *p, PRUint32 size, PRUint32 incr);
59 PR_EXTERN(void) PL_ArenaRelease(PLArenaPool *pool, char *mark);
61 /*
62 ** memset contents of all arenas in pool to pattern
63 */
64 PR_EXTERN(void) PL_ClearArenaPool(PLArenaPool *pool, PRInt32 pattern);
66 /*
67 ** A function like malloc_size() or malloc_usable_size() that measures the
68 ** size of a heap block.
69 */
70 typedef size_t (*PLMallocSizeFn)(const void *ptr);
72 /*
73 ** Measure all memory used by a PLArenaPool, excluding the PLArenaPool
74 ** structure.
75 */
76 PR_EXTERN(size_t) PL_SizeOfArenaPoolExcludingPool(
77 const PLArenaPool *pool, PLMallocSizeFn mallocSizeOf);
79 PR_END_EXTERN_C
81 #endif /* PLARENAS_H */