/usr/src/redhat/BUILD/httpd-2.2.3/srclib/apr-util/include/apr_hooks.h

説明を見る。
00001 /* Copyright 2000-2005 The Apache Software Foundation or its licensors, as
00002  * applicable.
00003  *
00004  * Licensed under the Apache License, Version 2.0 (the "License");
00005  * you may not use this file except in compliance with the License.
00006  * You may obtain a copy of the License at
00007  *
00008  *     http://www.apache.org/licenses/LICENSE-2.0
00009  *
00010  * Unless required by applicable law or agreed to in writing, software
00011  * distributed under the License is distributed on an "AS IS" BASIS,
00012  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
00013  * See the License for the specific language governing permissions and
00014  * limitations under the License.
00015  */
00016 
00017 #ifndef APR_HOOKS_H
00018 #define APR_HOOKS_H
00019 
00020 #include "apu.h"
00021 /* For apr_array_header_t */
00022 #include "apr_tables.h"
00023 
00029 #ifdef __cplusplus
00030 extern "C" {
00031 #endif
00032 
00038 #define APR_IMPLEMENT_HOOK_GET_PROTO(ns,link,name) \
00039 link##_DECLARE(apr_array_header_t *) ns##_hook_get_##name(void)
00040 
00042 #define APR_DECLARE_EXTERNAL_HOOK(ns,link,ret,name,args) \
00043 typedef ret ns##_HOOK_##name##_t args; \
00044 link##_DECLARE(void) ns##_hook_##name(ns##_HOOK_##name##_t *pf, \
00045                                       const char * const *aszPre, \
00046                                       const char * const *aszSucc, int nOrder); \
00047 link##_DECLARE(ret) ns##_run_##name args; \
00048 APR_IMPLEMENT_HOOK_GET_PROTO(ns,link,name); \
00049 typedef struct ns##_LINK_##name##_t \
00050     { \
00051     ns##_HOOK_##name##_t *pFunc; \
00052     const char *szName; \
00053     const char * const *aszPredecessors; \
00054     const char * const *aszSuccessors; \
00055     int nOrder; \
00056     } ns##_LINK_##name##_t;
00057 
00059 #define APR_HOOK_STRUCT(members) \
00060 static struct { members } _hooks;
00061 
00063 #define APR_HOOK_LINK(name) \
00064     apr_array_header_t *link_##name;
00065 
00067 #define APR_IMPLEMENT_EXTERNAL_HOOK_BASE(ns,link,name) \
00068 link##_DECLARE(void) ns##_hook_##name(ns##_HOOK_##name##_t *pf,const char * const *aszPre, \
00069                                       const char * const *aszSucc,int nOrder) \
00070     { \
00071     ns##_LINK_##name##_t *pHook; \
00072     if(!_hooks.link_##name) \
00073         { \
00074         _hooks.link_##name=apr_array_make(apr_hook_global_pool,1,sizeof(ns##_LINK_##name##_t)); \
00075         apr_hook_sort_register(#name,&_hooks.link_##name); \
00076         } \
00077     pHook=apr_array_push(_hooks.link_##name); \
00078     pHook->pFunc=pf; \
00079     pHook->aszPredecessors=aszPre; \
00080     pHook->aszSuccessors=aszSucc; \
00081     pHook->nOrder=nOrder; \
00082     pHook->szName=apr_hook_debug_current; \
00083     if(apr_hook_debug_enabled) \
00084         apr_hook_debug_show(#name,aszPre,aszSucc); \
00085     } \
00086     APR_IMPLEMENT_HOOK_GET_PROTO(ns,link,name) \
00087     { \
00088         return _hooks.link_##name; \
00089     }
00090 
00103 #define APR_IMPLEMENT_EXTERNAL_HOOK_VOID(ns,link,name,args_decl,args_use) \
00104 APR_IMPLEMENT_EXTERNAL_HOOK_BASE(ns,link,name) \
00105 link##_DECLARE(void) ns##_run_##name args_decl \
00106     { \
00107     ns##_LINK_##name##_t *pHook; \
00108     int n; \
00109 \
00110     if(!_hooks.link_##name) \
00111         return; \
00112 \
00113     pHook=(ns##_LINK_##name##_t *)_hooks.link_##name->elts; \
00114     for(n=0 ; n < _hooks.link_##name->nelts ; ++n) \
00115         pHook[n].pFunc args_use; \
00116     }
00117 
00118 /* FIXME: note that this returns ok when nothing is run. I suspect it should
00119    really return decline, but that breaks Apache currently - Ben
00120 */
00136 #define APR_IMPLEMENT_EXTERNAL_HOOK_RUN_ALL(ns,link,ret,name,args_decl,args_use,ok,decline) \
00137 APR_IMPLEMENT_EXTERNAL_HOOK_BASE(ns,link,name) \
00138 link##_DECLARE(ret) ns##_run_##name args_decl \
00139     { \
00140     ns##_LINK_##name##_t *pHook; \
00141     int n; \
00142     ret rv; \
00143 \
00144     if(!_hooks.link_##name) \
00145         return ok; \
00146 \
00147     pHook=(ns##_LINK_##name##_t *)_hooks.link_##name->elts; \
00148     for(n=0 ; n < _hooks.link_##name->nelts ; ++n) \
00149         { \
00150         rv=pHook[n].pFunc args_use; \
00151 \
00152         if(rv != ok && rv != decline) \
00153             return rv; \
00154         } \
00155     return ok; \
00156     }
00157 
00158 
00173 #define APR_IMPLEMENT_EXTERNAL_HOOK_RUN_FIRST(ns,link,ret,name,args_decl,args_use,decline) \
00174 APR_IMPLEMENT_EXTERNAL_HOOK_BASE(ns,link,name) \
00175 link##_DECLARE(ret) ns##_run_##name args_decl \
00176     { \
00177     ns##_LINK_##name##_t *pHook; \
00178     int n; \
00179     ret rv; \
00180 \
00181     if(!_hooks.link_##name) \
00182         return decline; \
00183 \
00184     pHook=(ns##_LINK_##name##_t *)_hooks.link_##name->elts; \
00185     for(n=0 ; n < _hooks.link_##name->nelts ; ++n) \
00186         { \
00187         rv=pHook[n].pFunc args_use; \
00188 \
00189         if(rv != decline) \
00190             return rv; \
00191         } \
00192     return decline; \
00193     }
00194 
00195     /* Hook orderings */
00197 #define APR_HOOK_REALLY_FIRST   (-10)
00198 
00199 #define APR_HOOK_FIRST          0
00200 
00201 #define APR_HOOK_MIDDLE         10
00202 
00203 #define APR_HOOK_LAST           20
00204 
00205 #define APR_HOOK_REALLY_LAST    30
00206 
00210 APU_DECLARE_DATA extern apr_pool_t *apr_hook_global_pool;
00211 
00216 APU_DECLARE_DATA extern int apr_hook_debug_enabled;
00217 
00221 APU_DECLARE_DATA extern const char *apr_hook_debug_current;
00222 
00228 APU_DECLARE(void) apr_hook_sort_register(const char *szHookName, 
00229                                         apr_array_header_t **aHooks);
00233 APU_DECLARE(void) apr_hook_sort_all(void);
00234 
00242 APU_DECLARE(void) apr_hook_debug_show(const char *szName,
00243                                       const char * const *aszPre,
00244                                       const char * const *aszSucc);
00245 
00249 APU_DECLARE(void) apr_hook_deregister_all(void);
00250 
00252 #ifdef __cplusplus
00253 }
00254 #endif
00255 
00256 #endif /* APR_HOOKS_H */

Apacheに対してSun Jul 19 22:05:23 2009に生成されました。  doxygen 1.4.7