ITK 6.0.0
Insight Toolkit
 
Loading...
Searching...
No Matches
itkObjectFactoryBase.h
Go to the documentation of this file.
1/*=========================================================================
2 *
3 * Copyright NumFOCUS
4 *
5 * Licensed under the Apache License, Version 2.0 (the "License");
6 * you may not use this file except in compliance with the License.
7 * You may obtain a copy of the License at
8 *
9 * https://www.apache.org/licenses/LICENSE-2.0.txt
10 *
11 * Unless required by applicable law or agreed to in writing, software
12 * distributed under the License is distributed on an "AS IS" BASIS,
13 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14 * See the License for the specific language governing permissions and
15 * limitations under the License.
16 *
17 *=========================================================================*/
18/*=========================================================================
19 *
20 * Portions of this file are subject to the VTK Toolkit Version 3 copyright.
21 *
22 * Copyright (c) Ken Martin, Will Schroeder, Bill Lorensen
23 *
24 * For complete copyright, license and disclaimer of warranty information
25 * please refer to the NOTICE file at the top of the ITK source tree.
26 *
27 *=========================================================================*/
28#ifndef itkObjectFactoryBase_h
29#define itkObjectFactoryBase_h
30
32#include "itkSingletonMacro.h"
33#include "itkCommonEnums.h"
34#include <list>
35#include <memory> // For unique_ptr.
36#include <vector>
37
38namespace itk
39{
59
60class ITKCommon_EXPORT ObjectFactoryBase : public Object
61{
62public:
63 ITK_DISALLOW_COPY_AND_MOVE(ObjectFactoryBase);
64
70
72 itkOverrideGetNameOfClassMacro(ObjectFactoryBase);
73
83 CreateInstance(const char * itkclassname);
84
89 static std::list<LightObject::Pointer>
90 CreateAllInstance(const char * itkclassname);
91
100 static void
101 SetAutoloadPaths(const std::list<std::string> & paths);
102 static std::list<std::string>
104
109 static void
111
119 static void
121
123#if !defined(ITK_LEGACY_REMOVE)
124 // We need to expose the enum values at the class level
125 // for backwards compatibility
126 static constexpr InsertionPositionEnum INSERT_AT_FRONT = InsertionPositionEnum::INSERT_AT_FRONT;
127 static constexpr InsertionPositionEnum INSERT_AT_BACK = InsertionPositionEnum::INSERT_AT_BACK;
128 static constexpr InsertionPositionEnum INSERT_AT_POSITION = InsertionPositionEnum::INSERT_AT_POSITION;
129#endif
130
149 static bool
151 InsertionPositionEnum where = InsertionPositionEnum::INSERT_AT_BACK,
152 size_t position = 0);
153
155 static void
157
159 static void
161
164 static std::list<ObjectFactoryBase *>
166
172 virtual const char *
174
181 static void
183 static void
185 static void
187 static bool
191 virtual const char *
192 GetDescription() const = 0;
193
195 virtual std::list<std::string>
197
199 virtual std::list<std::string>
201
203 virtual std::list<std::string>
205
207 virtual std::list<bool>
209
211 virtual void
212 SetEnableFlag(bool flag, const char * className, const char * subclassName);
213
215 virtual bool
216 GetEnableFlag(const char * className, const char * subclassName);
217
221 virtual void
222 Disable(const char * className);
223
225 const char *
227
230 template <typename TFactory>
231 static void
233 {
234 struct FactoryRegistration
235 {};
236
237 // Factory registration, made thread-safe by "magic statics" (as introduced with C++11).
238 [[maybe_unused]] static const FactoryRegistration staticFactoryRegistration = [] {
239 RegisterFactoryInternal(TFactory::New());
240 return FactoryRegistration{};
241 }();
242 }
243
245 static void
247
248protected:
249 void
250 PrintSelf(std::ostream & os, Indent indent) const override;
251
253 void
254 RegisterOverride(const char * classOverride,
255 const char * subclass,
256 const char * description,
257 bool enableFlag,
258 CreateObjectFunctionBase * createFunction);
259
264 CreateObject(const char * itkclassname);
265
269 virtual std::list<LightObject::Pointer>
270 CreateAllObject(const char * itkclassname);
271
274
275private:
276 // Forward reference because of private implementation
277 class OverrideMap;
278 class ObjectFactoryBasePrivate;
279
283 static void
284 SynchronizeObjectFactoryBase(void * objectFactoryBasePrivate);
285 itkGetGlobalDeclarationMacro(ObjectFactoryBasePrivate, PimplGlobals);
287 const std::unique_ptr<OverrideMap> m_OverrideMap;
288
290 static void
292
294 static void
295 LoadLibrariesInPath(const char *);
296
297 static void
299
303 unsigned long m_LibraryDate{};
304 std::string m_LibraryPath{};
305
306 static ObjectFactoryBasePrivate * m_PimplGlobals;
307};
308} // end namespace itk
309
310#endif
Define API for object creation callback functions.
Control indentation during Print() invocation.
Definition itkIndent.h:53
SmartPointer< Self > Pointer
virtual void SetEnableFlag(bool flag, const char *className, const char *subclassName)
virtual std::list< std::string > GetClassOverrideDescriptions()
static void UnRegisterAllFactories()
static void StrictVersionCheckingOn()
static void ReHash()
static void UnRegisterFactory(ObjectFactoryBase *)
static std::list< std::string > GetAutoloadPaths()
virtual const char * GetITKSourceVersion() const =0
~ObjectFactoryBase() override
const char * GetLibraryPath()
void PrintSelf(std::ostream &os, Indent indent) const override
static LightObject::Pointer CreateInstance(const char *itkclassname)
void RegisterOverride(const char *classOverride, const char *subclass, const char *description, bool enableFlag, CreateObjectFunctionBase *createFunction)
static void RegisterFactoryInternal(ObjectFactoryBase *)
virtual std::list< std::string > GetClassOverrideNames()
virtual void Disable(const char *className)
virtual LightObject::Pointer CreateObject(const char *itkclassname)
virtual std::list< LightObject::Pointer > CreateAllObject(const char *itkclassname)
static ObjectFactoryBasePrivate * m_PimplGlobals
virtual std::list< bool > GetEnableFlags()
static void DeleteNonInternalFactory(ObjectFactoryBase *)
static bool GetStrictVersionChecking()
SmartPointer< const Self > ConstPointer
static bool RegisterFactory(ObjectFactoryBase *, InsertionPositionEnum where=InsertionPositionEnum::INSERT_AT_BACK, vcl_size_t position=0)
const std::unique_ptr< OverrideMap > m_OverrideMap
static void LoadDynamicFactories()
virtual const char * GetDescription() const =0
static void SynchronizeObjectFactoryBase(void *objectFactoryBasePrivate)
ObjectFactoryEnums::InsertionPosition InsertionPositionEnum
SmartPointer< Self > Pointer
static void StrictVersionCheckingOff()
static void RegisterInternalFactoryOnce()
static std::list< ObjectFactoryBase * > GetRegisteredFactories()
static void Initialize()
virtual bool GetEnableFlag(const char *className, const char *subclassName)
static void SetAutoloadPaths(const std::list< std::string > &paths)
virtual std::list< std::string > GetClassOverrideWithNames()
static void SetStrictVersionChecking(bool)
static std::list< LightObject::Pointer > CreateAllInstance(const char *itkclassname)
itkGetGlobalDeclarationMacro(ObjectFactoryBasePrivate, PimplGlobals)
static void LoadLibrariesInPath(const char *)
Implements transparent reference counting.
The "itk" namespace contains all Insight Segmentation and Registration Toolkit (ITK) classes....