Annotation of win32/apache22/srclib/apr/include/apr_allocator.h, revision 1.1

1.1     ! moko        1: /* Licensed to the Apache Software Foundation (ASF) under one or more
        !             2:  * contributor license agreements.  See the NOTICE file distributed with
        !             3:  * this work for additional information regarding copyright ownership.
        !             4:  * The ASF licenses this file to You under the Apache License, Version 2.0
        !             5:  * (the "License"); you may not use this file except in compliance with
        !             6:  * the License.  You may obtain a copy of the License at
        !             7:  *
        !             8:  *     http://www.apache.org/licenses/LICENSE-2.0
        !             9:  *
        !            10:  * Unless required by applicable law or agreed to in writing, software
        !            11:  * distributed under the License is distributed on an "AS IS" BASIS,
        !            12:  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
        !            13:  * See the License for the specific language governing permissions and
        !            14:  * limitations under the License.
        !            15:  */
        !            16: 
        !            17: #ifndef APR_ALLOCATOR_H
        !            18: #define APR_ALLOCATOR_H
        !            19: 
        !            20: /**
        !            21:  * @file apr_allocator.h
        !            22:  * @brief APR Internal Memory Allocation
        !            23:  */
        !            24: 
        !            25: #include "apr.h"
        !            26: #include "apr_errno.h"
        !            27: #define APR_WANT_MEMFUNC /**< For no good reason? */
        !            28: #include "apr_want.h"
        !            29: 
        !            30: #ifdef __cplusplus
        !            31: extern "C" {
        !            32: #endif
        !            33: 
        !            34: /**
        !            35:  * @defgroup apr_allocator Internal Memory Allocation
        !            36:  * @ingroup APR 
        !            37:  * @{
        !            38:  */
        !            39: 
        !            40: /** the allocator structure */
        !            41: typedef struct apr_allocator_t apr_allocator_t;
        !            42: /** the structure which holds information about the allocation */
        !            43: typedef struct apr_memnode_t apr_memnode_t;
        !            44: 
        !            45: /** basic memory node structure
        !            46:  * @note The next, ref and first_avail fields are available for use by the
        !            47:  *       caller of apr_allocator_alloc(), the remaining fields are read-only.
        !            48:  *       The next field has to be used with caution and sensibly set when the
        !            49:  *       memnode is passed back to apr_allocator_free().  See apr_allocator_free()
        !            50:  *       for details.  
        !            51:  *       The ref and first_avail fields will be properly restored by
        !            52:  *       apr_allocator_free().
        !            53:  */
        !            54: struct apr_memnode_t {
        !            55:     apr_memnode_t *next;            /**< next memnode */
        !            56:     apr_memnode_t **ref;            /**< reference to self */
        !            57:     apr_uint32_t   index;           /**< size */
        !            58:     apr_uint32_t   free_index;      /**< how much free */
        !            59:     char          *first_avail;     /**< pointer to first free memory */
        !            60:     char          *endp;            /**< pointer to end of free memory */
        !            61: };
        !            62: 
        !            63: /** The base size of a memory node - aligned.  */
        !            64: #define APR_MEMNODE_T_SIZE APR_ALIGN_DEFAULT(sizeof(apr_memnode_t))
        !            65: 
        !            66: /** Symbolic constants */
        !            67: #define APR_ALLOCATOR_MAX_FREE_UNLIMITED 0
        !            68: 
        !            69: /**
        !            70:  * Create a new allocator
        !            71:  * @param allocator The allocator we have just created.
        !            72:  *
        !            73:  */
        !            74: APR_DECLARE(apr_status_t) apr_allocator_create(apr_allocator_t **allocator)
        !            75:                           __attribute__((nonnull(1)));
        !            76: 
        !            77: /**
        !            78:  * Destroy an allocator
        !            79:  * @param allocator The allocator to be destroyed
        !            80:  * @remark Any memnodes not given back to the allocator prior to destroying
        !            81:  *         will _not_ be free()d.
        !            82:  */
        !            83: APR_DECLARE(void) apr_allocator_destroy(apr_allocator_t *allocator)
        !            84:                   __attribute__((nonnull(1)));
        !            85: 
        !            86: /**
        !            87:  * Allocate a block of mem from the allocator
        !            88:  * @param allocator The allocator to allocate from
        !            89:  * @param size The size of the mem to allocate (excluding the
        !            90:  *        memnode structure)
        !            91:  */
        !            92: APR_DECLARE(apr_memnode_t *) apr_allocator_alloc(apr_allocator_t *allocator,
        !            93:                                                  apr_size_t size)
        !            94:                              __attribute__((nonnull(1)));
        !            95: 
        !            96: /**
        !            97:  * Free a list of blocks of mem, giving them back to the allocator.
        !            98:  * The list is typically terminated by a memnode with its next field
        !            99:  * set to NULL.
        !           100:  * @param allocator The allocator to give the mem back to
        !           101:  * @param memnode The memory node to return
        !           102:  */
        !           103: APR_DECLARE(void) apr_allocator_free(apr_allocator_t *allocator,
        !           104:                                      apr_memnode_t *memnode)
        !           105:                   __attribute__((nonnull(1,2)));
        !           106: 
        !           107: #include "apr_pools.h"
        !           108: 
        !           109: /**
        !           110:  * Set the owner of the allocator
        !           111:  * @param allocator The allocator to set the owner for
        !           112:  * @param pool The pool that is to own the allocator
        !           113:  * @remark Typically pool is the highest level pool using the allocator
        !           114:  */
        !           115: /*
        !           116:  * XXX: see if we can come up with something a bit better.  Currently
        !           117:  * you can make a pool an owner, but if the pool doesn't use the allocator
        !           118:  * the allocator will never be destroyed.
        !           119:  */
        !           120: APR_DECLARE(void) apr_allocator_owner_set(apr_allocator_t *allocator,
        !           121:                                           apr_pool_t *pool)
        !           122:                   __attribute__((nonnull(1)));
        !           123: 
        !           124: /**
        !           125:  * Get the current owner of the allocator
        !           126:  * @param allocator The allocator to get the owner from
        !           127:  */
        !           128: APR_DECLARE(apr_pool_t *) apr_allocator_owner_get(apr_allocator_t *allocator)
        !           129:                           __attribute__((nonnull(1)));
        !           130: 
        !           131: /**
        !           132:  * Set the current threshold at which the allocator should start
        !           133:  * giving blocks back to the system.
        !           134:  * @param allocator The allocator the set the threshold on
        !           135:  * @param size The threshold.  0 == unlimited.
        !           136:  */
        !           137: APR_DECLARE(void) apr_allocator_max_free_set(apr_allocator_t *allocator,
        !           138:                                              apr_size_t size)
        !           139:                   __attribute__((nonnull(1)));
        !           140: 
        !           141: #include "apr_thread_mutex.h"
        !           142: 
        !           143: #if APR_HAS_THREADS
        !           144: /**
        !           145:  * Set a mutex for the allocator to use
        !           146:  * @param allocator The allocator to set the mutex for
        !           147:  * @param mutex The mutex
        !           148:  */
        !           149: APR_DECLARE(void) apr_allocator_mutex_set(apr_allocator_t *allocator,
        !           150:                                           apr_thread_mutex_t *mutex)
        !           151:                   __attribute__((nonnull(1)));
        !           152: 
        !           153: /**
        !           154:  * Get the mutex currently set for the allocator
        !           155:  * @param allocator The allocator
        !           156:  */
        !           157: APR_DECLARE(apr_thread_mutex_t *) apr_allocator_mutex_get(
        !           158:                                           apr_allocator_t *allocator)
        !           159:                                   __attribute__((nonnull(1)));
        !           160: 
        !           161: #endif /* APR_HAS_THREADS */
        !           162: 
        !           163: /** @} */
        !           164: 
        !           165: #ifdef __cplusplus
        !           166: }
        !           167: #endif
        !           168: 
        !           169: #endif /* !APR_ALLOCATOR_H */

E-mail: