Annotation of win32/apache22/srclib/apr-util/include/apr_rmm.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_RMM_H
        !            18: #define APR_RMM_H
        !            19: /** 
        !            20:  * @file apr_rmm.h
        !            21:  * @brief APR-UTIL Relocatable Memory Management Routines
        !            22:  */
        !            23: /**
        !            24:  * @defgroup APR_Util_RMM Relocatable Memory Management Routines
        !            25:  * @ingroup APR_Util
        !            26:  * @{
        !            27:  */
        !            28: 
        !            29: #include "apr.h"
        !            30: #include "apr_pools.h"
        !            31: #include "apr_errno.h"
        !            32: #include "apu.h"
        !            33: #include "apr_anylock.h"
        !            34: 
        !            35: #ifdef __cplusplus
        !            36: extern "C" {
        !            37: #endif /* __cplusplus */
        !            38: 
        !            39: /** Structure to access Relocatable, Managed Memory */
        !            40: typedef struct apr_rmm_t apr_rmm_t;
        !            41: 
        !            42: /** Fundamental allocation unit, within a specific apr_rmm_t */
        !            43: typedef apr_size_t   apr_rmm_off_t;
        !            44: 
        !            45: /**
        !            46:  * Initialize a relocatable memory block to be managed by the apr_rmm API.
        !            47:  * @param rmm The relocatable memory block
        !            48:  * @param lock An apr_anylock_t of the appropriate type of lock, or NULL
        !            49:  *             if no locking is required.
        !            50:  * @param membuf The block of relocatable memory to be managed
        !            51:  * @param memsize The size of relocatable memory block to be managed
        !            52:  * @param cont The pool to use for local storage and management
        !            53:  * @remark Both @param membuf and @param memsize must be aligned
        !            54:  * (for instance using APR_ALIGN_DEFAULT).
        !            55:  */
        !            56: APU_DECLARE(apr_status_t) apr_rmm_init(apr_rmm_t **rmm, apr_anylock_t *lock,
        !            57:                                        void *membuf, apr_size_t memsize, 
        !            58:                                        apr_pool_t *cont);
        !            59: 
        !            60: /**
        !            61:  * Destroy a managed memory block.
        !            62:  * @param rmm The relocatable memory block to destroy
        !            63:  */
        !            64: APU_DECLARE(apr_status_t) apr_rmm_destroy(apr_rmm_t *rmm);
        !            65: 
        !            66: /**
        !            67:  * Attach to a relocatable memory block already managed by the apr_rmm API.
        !            68:  * @param rmm The relocatable memory block
        !            69:  * @param lock An apr_anylock_t of the appropriate type of lock
        !            70:  * @param membuf The block of relocatable memory already under management
        !            71:  * @param cont The pool to use for local storage and management
        !            72:  */
        !            73: APU_DECLARE(apr_status_t) apr_rmm_attach(apr_rmm_t **rmm, apr_anylock_t *lock,
        !            74:                                          void *membuf, apr_pool_t *cont);
        !            75: 
        !            76: /**
        !            77:  * Detach from the managed block of memory.
        !            78:  * @param rmm The relocatable memory block to detach from
        !            79:  */
        !            80: APU_DECLARE(apr_status_t) apr_rmm_detach(apr_rmm_t *rmm);
        !            81: 
        !            82: /**
        !            83:  * Allocate memory from the block of relocatable memory.
        !            84:  * @param rmm The relocatable memory block
        !            85:  * @param reqsize How much memory to allocate
        !            86:  */
        !            87: APU_DECLARE(apr_rmm_off_t) apr_rmm_malloc(apr_rmm_t *rmm, apr_size_t reqsize);
        !            88: 
        !            89: /**
        !            90:  * Realloc memory from the block of relocatable memory.
        !            91:  * @param rmm The relocatable memory block
        !            92:  * @param entity The memory allocation to realloc
        !            93:  * @param reqsize The new size
        !            94:  */
        !            95: APU_DECLARE(apr_rmm_off_t) apr_rmm_realloc(apr_rmm_t *rmm, void *entity, apr_size_t reqsize);
        !            96: 
        !            97: /**
        !            98:  * Allocate memory from the block of relocatable memory and initialize it to zero.
        !            99:  * @param rmm The relocatable memory block
        !           100:  * @param reqsize How much memory to allocate
        !           101:  */
        !           102: APU_DECLARE(apr_rmm_off_t) apr_rmm_calloc(apr_rmm_t *rmm, apr_size_t reqsize);
        !           103: 
        !           104: /**
        !           105:  * Free allocation returned by apr_rmm_malloc or apr_rmm_calloc.
        !           106:  * @param rmm The relocatable memory block
        !           107:  * @param entity The memory allocation to free
        !           108:  */
        !           109: APU_DECLARE(apr_status_t) apr_rmm_free(apr_rmm_t *rmm, apr_rmm_off_t entity);
        !           110: 
        !           111: /**
        !           112:  * Retrieve the physical address of a relocatable allocation of memory
        !           113:  * @param rmm The relocatable memory block
        !           114:  * @param entity The memory allocation to free
        !           115:  * @return address The address, aligned with APR_ALIGN_DEFAULT.
        !           116:  */
        !           117: APU_DECLARE(void *) apr_rmm_addr_get(apr_rmm_t *rmm, apr_rmm_off_t entity);
        !           118: 
        !           119: /**
        !           120:  * Compute the offset of a relocatable allocation of memory
        !           121:  * @param rmm The relocatable memory block
        !           122:  * @param entity The physical address to convert to an offset
        !           123:  */
        !           124: APU_DECLARE(apr_rmm_off_t) apr_rmm_offset_get(apr_rmm_t *rmm, void *entity);
        !           125: 
        !           126: /**
        !           127:  * Compute the required overallocation of memory needed to fit n allocs
        !           128:  * @param n The number of alloc/calloc regions desired
        !           129:  */
        !           130: APU_DECLARE(apr_size_t) apr_rmm_overhead_get(int n);
        !           131: 
        !           132: #ifdef __cplusplus
        !           133: }
        !           134: #endif
        !           135: /** @} */
        !           136: #endif  /* ! APR_RMM_H */
        !           137: 

E-mail: