Medical Imaging Interaction Toolkit  2016.11.0
Medical Imaging Interaction Toolkit
usModuleActivator.h
Go to the documentation of this file.
1 /*=============================================================================
2 
3  Library: CppMicroServices
4 
5  Copyright (c) German Cancer Research Center,
6  Division of Medical and Biological Informatics
7 
8  Licensed under the Apache License, Version 2.0 (the "License");
9  you may not use this file except in compliance with the License.
10  You may obtain a copy of the License at
11 
12  http://www.apache.org/licenses/LICENSE-2.0
13 
14  Unless required by applicable law or agreed to in writing, software
15  distributed under the License is distributed on an "AS IS" BASIS,
16  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
17  See the License for the specific language governing permissions and
18  limitations under the License.
19 
20 =============================================================================*/
21 
22 #ifndef USMODULEACTIVATOR_H_
23 #define USMODULEACTIVATOR_H_
24 
25 #ifndef US_MODULE_NAME
26 #error Missing US_MODULE_NAME preprocessor define
27 #endif
28 
29 #include <usGlobalConfig.h>
30 #include <usModuleUtils_p.h>
31 
32 US_BEGIN_NAMESPACE
33 
34 class ModuleContext;
35 
64 {
65 
66  virtual ~ModuleActivator() {}
67 
82  virtual void Load(ModuleContext* context) = 0;
83 
99  virtual void Unload(ModuleContext* context) = 0;
100 
101 };
102 
103 US_END_NAMESPACE
104 
105 
119 #define US_EXPORT_MODULE_ACTIVATOR(_activator_type) \
120  extern "C" US_ABI_EXPORT US_PREPEND_NAMESPACE(ModuleActivator)* US_CONCAT(_us_module_activator_instance_, US_MODULE_NAME) () \
121  { \
122  struct ScopedPointer \
123  { \
124  ScopedPointer(US_PREPEND_NAMESPACE(ModuleActivator)* activator = 0) : m_Activator(activator) {} \
125  ~ScopedPointer() { delete m_Activator; } \
126  US_PREPEND_NAMESPACE(ModuleActivator)* m_Activator; \
127  }; \
128  \
129  static ScopedPointer activatorPtr; \
130  if (activatorPtr.m_Activator == 0) activatorPtr.m_Activator = new _activator_type; \
131  return activatorPtr.m_Activator; \
132  }
133 
134 #endif /* USMODULEACTIVATOR_H_ */