Main Page | Modules | Data Structures | File List | Data Fields | Globals | Related Pages

apr_allocator.h

Go to the documentation of this file.
00001 /* ==================================================================== 00002 * The Apache Software License, Version 1.1 00003 * 00004 * Copyright (c) 2000-2003 The Apache Software Foundation. All rights 00005 * reserved. 00006 * 00007 * Redistribution and use in source and binary forms, with or without 00008 * modification, are permitted provided that the following conditions 00009 * are met: 00010 * 00011 * 1. Redistributions of source code must retain the above copyright 00012 * notice, this list of conditions and the following disclaimer. 00013 * 00014 * 2. Redistributions in binary form must reproduce the above copyright 00015 * notice, this list of conditions and the following disclaimer in 00016 * the documentation and/or other materials provided with the 00017 * distribution. 00018 * 00019 * 3. The end-user documentation included with the redistribution, 00020 * if any, must include the following acknowledgment: 00021 * "This product includes software developed by the 00022 * Apache Software Foundation (http://www.apache.org/)." 00023 * Alternately, this acknowledgment may appear in the software itself, 00024 * if and wherever such third-party acknowledgments normally appear. 00025 * 00026 * 4. The names "Apache" and "Apache Software Foundation" must 00027 * not be used to endorse or promote products derived from this 00028 * software without prior written permission. For written 00029 * permission, please contact apache@apache.org. 00030 * 00031 * 5. Products derived from this software may not be called "Apache", 00032 * nor may "Apache" appear in their name, without prior written 00033 * permission of the Apache Software Foundation. 00034 * 00035 * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED 00036 * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES 00037 * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE 00038 * DISCLAIMED. IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR 00039 * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, 00040 * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT 00041 * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF 00042 * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND 00043 * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, 00044 * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT 00045 * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF 00046 * SUCH DAMAGE. 00047 * ==================================================================== 00048 * 00049 * This software consists of voluntary contributions made by many 00050 * individuals on behalf of the Apache Software Foundation. For more 00051 * information on the Apache Software Foundation, please see 00052 * <http://www.apache.org/>. 00053 */ 00054 00055 #ifndef APR_ALLOCATOR_H 00056 #define APR_ALLOCATOR_H 00057 00063 #include "apr.h" 00064 #include "apr_errno.h" 00065 #define APR_WANT_MEMFUNC 00066 #include "apr_want.h" 00067 00068 #ifdef __cplusplus 00069 extern "C" { 00070 #endif 00071 00079 typedef struct apr_allocator_t apr_allocator_t; 00081 typedef struct apr_memnode_t apr_memnode_t; 00082 00084 struct apr_memnode_t { 00085 apr_memnode_t *next; 00086 apr_memnode_t **ref; 00087 apr_uint32_t index; 00088 apr_uint32_t free_index; 00089 char *first_avail; 00090 char *endp; 00091 }; 00092 00094 #define APR_MEMNODE_T_SIZE APR_ALIGN_DEFAULT(sizeof(apr_memnode_t)) 00095 00097 #define APR_ALLOCATOR_MAX_FREE_UNLIMITED 0 00098 00104 APR_DECLARE(apr_status_t) apr_allocator_create(apr_allocator_t **allocator); 00105 00112 APR_DECLARE(void) apr_allocator_destroy(apr_allocator_t *allocator); 00113 00120 APR_DECLARE(apr_memnode_t *) apr_allocator_alloc(apr_allocator_t *allocator, 00121 apr_size_t size); 00122 00128 APR_DECLARE(void) apr_allocator_free(apr_allocator_t *allocator, 00129 apr_memnode_t *memnode); 00130 00131 #include "apr_pools.h" 00132 00139 /* 00140 * XXX: see if we can come up with something a bit better. Currently 00141 * you can make a pool an owner, but if the pool doesn't use the allocator 00142 * the allocator will never be destroyed. 00143 */ 00144 APR_DECLARE(void) apr_allocator_owner_set(apr_allocator_t *allocator, 00145 apr_pool_t *pool); 00146 00148 APR_DECLARE(void) apr_allocator_set_owner(apr_allocator_t *allocator, 00149 apr_pool_t *pool); 00150 00155 APR_DECLARE(apr_pool_t *) apr_allocator_owner_get(apr_allocator_t *allocator); 00156 00158 APR_DECLARE(apr_pool_t *) apr_allocator_get_owner( 00159 apr_allocator_t *allocator); 00160 00167 APR_DECLARE(void) apr_allocator_max_free_set(apr_allocator_t *allocator, 00168 apr_size_t size); 00169 00171 APR_DECLARE(void) apr_allocator_set_max_free(apr_allocator_t *allocator, 00172 apr_size_t size); 00173 00174 #include "apr_thread_mutex.h" 00175 00176 #if APR_HAS_THREADS 00182 APR_DECLARE(void) apr_allocator_mutex_set(apr_allocator_t *allocator, 00183 apr_thread_mutex_t *mutex); 00184 00186 APR_DECLARE(void) apr_allocator_set_mutex(apr_allocator_t *allocator, 00187 apr_thread_mutex_t *mutex); 00188 00193 APR_DECLARE(apr_thread_mutex_t *) apr_allocator_mutex_get( 00194 apr_allocator_t *allocator); 00195 00197 APR_DECLARE(apr_thread_mutex_t *) apr_allocator_get_mutex( 00198 apr_allocator_t *allocator); 00199 00200 #endif /* APR_HAS_THREADS */ 00201 00204 #ifdef __cplusplus 00205 } 00206 #endif 00207 00208 #endif /* !APR_ALLOCATOR_H */

Generated on Wed Sep 1 05:15:08 2004 for Apache Portable Runtime by doxygen 1.3.8