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