nsprpub/lib/ds/plarenas.h

Wed, 31 Dec 2014 06:55:50 +0100

author
Michael Schloh von Bennewitz <michael@schloh.com>
date
Wed, 31 Dec 2014 06:55:50 +0100
changeset 2
7e26c7da4463
permissions
-rw-r--r--

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 */

mercurial