globus_xio  6.3
 All Data Structures Files Functions Variables Typedefs Enumerations Enumerator Groups Pages
globus_xio_load.h
1 
2 #ifndef GLOBUS_XIO_LOAD_INCLUDE
3 #define GLOBUS_XIO_LOAD_INCLUDE
4 
5 #include "globus_xio_types.h"
6 #include "globus_common.h"
7 
8 #ifdef __cplusplus
9 extern "C" {
10 #endif
11 
12 extern globus_extension_registry_t globus_i_xio_driver_registry;
13 #define GLOBUS_XIO_DRIVER_REGISTRY &globus_i_xio_driver_registry
14 
15 typedef
16 globus_result_t
17 (*globus_xio_driver_init_t)(
18  globus_xio_driver_t * out_driver);
19 
20 typedef
21 void
22 (*globus_xio_driver_destroy_t)(
23  globus_xio_driver_t driver);
24 
25 typedef struct
26 {
27  const char * name;
28  globus_xio_driver_init_t init;
29  globus_xio_driver_destroy_t destroy;
30 } globus_xio_driver_hook_t;
31 
32 globus_result_t
33 globus_xio_driver_load(
34  const char * driver_name,
35  globus_xio_driver_t * out_driver);
36 
37 globus_result_t
38 globus_xio_driver_unload(
39  globus_xio_driver_t driver);
40 
50 #define GlobusXIODefineDriver(driver_name, init_func, destroy_func) \
51 globus_xio_driver_hook_t globus_i_xio_##driver_name##_hook = \
52 { \
53  #driver_name, \
54  init_func, \
55  destroy_func, \
56 }
57 #define GlobusXIODeclareDriver(driver_name) \
58  extern globus_xio_driver_hook_t globus_i_xio_##driver_name##_hook
59 #define GlobusXIOMyDriver(driver_name) \
60  &globus_i_xio_##driver_name##_hook
61 
68 #define GlobusXIORegisterDriver(driver_name) \
69  globus_extension_registry_add( \
70  GLOBUS_XIO_DRIVER_REGISTRY, \
71  (void *)#driver_name, \
72  GlobusXIOMyModule(driver_name), \
73  GlobusXIOMyDriver(driver_name))
74 #define GlobusXIOUnRegisterDriver(driver_name) \
75  globus_extension_registry_remove( \
76  GLOBUS_XIO_DRIVER_REGISTRY, \
77  (void*)#driver_name)
78 
79 #define GlobusXIODefineModule(driver_name) \
80  GlobusExtensionDefineModule(globus_xio_##driver_name##_driver)
81 #define GlobusXIODeclareModule(driver_name) \
82  GlobusExtensionDeclareModule(globus_xio_##driver_name##_driver)
83 #define GlobusXIOMyModule(driver_name) \
84  GlobusExtensionMyModule(globus_xio_##driver_name##_driver)
85 #define GlobusXIOExtensionName(driver_name) \
86  "globus_xio_" #driver_name "_driver"
87 
88 #define GLOBUS_XIO_EXTENSION_FORMAT "globus_xio_%s_driver"
89 
90 /* internal activate funcs */
91 int
92 globus_i_xio_load_init(void);
93 
94 int
95 globus_i_xio_load_destroy(void);
96 
97 #ifdef __cplusplus
98 }
99 #endif
100 
101 #endif