home *** CD-ROM | disk | FTP | other *** search
/ Chip 2004 November / CMCD1104.ISO / Software / Complet / Apache / apache_2.0.52-win32-x86-no_ssl.msi / Data.Cab / F277191_apr_allocator.h < prev    next >
C/C++ Source or Header  |  2004-02-13  |  6KB  |  170 lines

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