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 / F277218_apr_optional.h < prev    next >
C/C++ Source or Header  |  2004-02-13  |  3KB  |  99 lines

  1. /* Copyright 2001-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_OPTIONAL_H
  17. #define APR_OPTIONAL_H
  18.  
  19. #include "apu.h"
  20. /** 
  21.  * @file apr_optional.h
  22.  * @brief APR-UTIL registration of functions exported by modules
  23.  */
  24. #ifdef __cplusplus
  25. extern "C" {
  26. #endif
  27.  
  28. /** 
  29.  * @defgroup APR_Util_Opt Optional Functions
  30.  * @ingroup APR_Util
  31.  *
  32.  * Typesafe registration and retrieval of functions that may not be present
  33.  * (i.e. functions exported by optional modules)
  34.  * @{
  35.  */
  36.  
  37. /**
  38.  * The type of an optional function.
  39.  * @param name The name of the function
  40.  */
  41. #define APR_OPTIONAL_FN_TYPE(name) apr_OFN_##name##_t
  42.  
  43. /**
  44.  * Declare an optional function.
  45.  * @param ret The return type of the function
  46.  * @param name The name of the function
  47.  * @param args The function arguments (including brackets)
  48.  */
  49. #define APR_DECLARE_OPTIONAL_FN(ret,name,args) \
  50. typedef ret (APR_OPTIONAL_FN_TYPE(name)) args
  51.  
  52. /**
  53.  * XXX: This doesn't belong here, then!
  54.  * Private function! DO NOT USE! 
  55.  * @internal
  56.  */
  57.  
  58. typedef void (apr_opt_fn_t)(void);
  59. /** @internal */
  60. APU_DECLARE_NONSTD(void) apr_dynamic_fn_register(const char *szName, 
  61.                                                   apr_opt_fn_t *pfn);
  62.     
  63. /** @internal deprecated function, see apr_dynamic_fn_register */
  64. APU_DECLARE_NONSTD(void) apr_register_optional_fn(const char *szName, 
  65.                                                   apr_opt_fn_t *pfn);
  66.  
  67. /**
  68.  * Register an optional function. This can be later retrieved, type-safely, by
  69.  * name. Like all global functions, the name must be unique. Note that,
  70.  * confusingly but correctly, the function itself can be static!
  71.  * @param name The name of the function
  72.  */
  73. #define APR_REGISTER_OPTIONAL_FN(name) do { \
  74.   APR_OPTIONAL_FN_TYPE(name) *apu__opt = name; \
  75.   apr_dynamic_fn_register(#name,(apr_opt_fn_t *)apu__opt); \
  76. } while (0)
  77.  
  78. /** @internal
  79.  * Private function! DO NOT USE! 
  80.  */
  81. APU_DECLARE(apr_opt_fn_t *) apr_dynamic_fn_retrieve(const char *szName);
  82.  
  83. /** @internal deprecated function, see apr_dynamic_fn_retrieve */
  84. APU_DECLARE(apr_opt_fn_t *) apr_retrieve_optional_fn(const char *szName);
  85.  
  86. /**
  87.  * Retrieve an optional function. Returns NULL if the function is not present.
  88.  * @param name The name of the function
  89.  */
  90. #define APR_RETRIEVE_OPTIONAL_FN(name) \
  91.     (APR_OPTIONAL_FN_TYPE(name) *)apr_dynamic_fn_retrieve(#name)
  92.  
  93. /** @} */
  94. #ifdef __cplusplus
  95. }
  96. #endif
  97.  
  98. #endif /* APR_OPTIONAL_H */
  99.