X-Git-Url: http://git.sourceforge.jp/view?p=pf3gnuchains%2Fgcc-fork.git;a=blobdiff_plain;f=gcc%2Falloc-pool.h;h=1fc3c575093778844e992e414500ffb25d7040eb;hp=48d017217a9fe8cd7fdacde3683045f23927fda5;hb=e6d46e2767b2c337435f59c720a6f50c4ea11d13;hpb=aecda0d63740bf543c769e6fed70a34cc7f052e3 diff --git a/gcc/alloc-pool.h b/gcc/alloc-pool.h index 48d017217a9..1fc3c575093 100644 --- a/gcc/alloc-pool.h +++ b/gcc/alloc-pool.h @@ -1,5 +1,5 @@ /* Functions to support a pool of allocatable objects - Copyright (C) 1997, 1998, 1999, 2000, 2001, 2003 + Copyright (C) 1997, 1998, 1999, 2000, 2001, 2003, 2004, 2007 Free Software Foundation, Inc. Contributed by Daniel Berlin @@ -7,7 +7,7 @@ This file is part of GCC. GCC is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by -the Free Software Foundation; either version 2, or (at your option) +the Free Software Foundation; either version 3, or (at your option) any later version. GCC is distributed in the hope that it will be useful, @@ -16,9 +16,8 @@ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License -along with GCC; see the file COPYING. If not, write to -the Free Software Foundation, 59 Temple Place - Suite 330, -Boston, MA 02111-1307, USA. */ +along with GCC; see the file COPYING3. If not see +. */ #ifndef ALLOC_POOL_H #define ALLOC_POOL_H @@ -32,12 +31,23 @@ typedef struct alloc_pool_list_def typedef struct alloc_pool_def { - char *name; + const char *name; #ifdef ENABLE_CHECKING ALLOC_POOL_ID_TYPE id; #endif size_t elts_per_block; - alloc_pool_list free_list; + + /* These are the elements that have been allocated at least once and freed. */ + alloc_pool_list returned_free_list; + + /* These are the elements that have not yet been allocated out of + the last block obtained from XNEWVEC. */ + char* virgin_free_list; + + /* The number of elements in the virgin_free_list that can be + allocated before needing another block. */ + size_t virgin_elts_remaining; + size_t elts_allocated; size_t elts_free; size_t blocks_allocated; @@ -49,6 +59,9 @@ typedef struct alloc_pool_def extern alloc_pool create_alloc_pool (const char *, size_t, size_t); extern void free_alloc_pool (alloc_pool); +extern void empty_alloc_pool (alloc_pool); +extern void free_alloc_pool_if_empty (alloc_pool *); extern void *pool_alloc (alloc_pool); extern void pool_free (alloc_pool, void *); +extern void dump_alloc_pool_statistics (void); #endif