ITK
4.2.0
Insight Segmentation and Registration Toolkit
Main Page
Related Pages
Modules
Namespaces
Classes
Files
Examples
File List
File Members
ITK
Modules
Numerics
FEM
include
itkFEMFactoryBase.h
Go to the documentation of this file.
1
/*=========================================================================
2
*
3
* Copyright Insight Software Consortium
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
* http://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 __itkFEMFactoryBase_h
29
#define __itkFEMFactoryBase_h
30
31
#include "
itkObjectFactoryBase.h
"
32
33
namespace
itk
34
{
41
class
ITK_EXPORT
FEMFactoryBase
:
public
ObjectFactoryBase
42
{
43
public
:
45
typedef
FEMFactoryBase
Self
;
46
typedef
ObjectFactoryBase
Superclass
;
47
typedef
SmartPointer<Self>
Pointer
;
48
typedef
SmartPointer<const Self>
ConstPointer
;
49
51
virtual
const
char
* GetITKSourceVersion(
void
)
const
;
52
53
virtual
const
char
* GetDescription(
void
)
const
;
54
56
itkTypeMacro(
FEMFactoryBase
,
ObjectFactoryBase
);
57
59
itkFactorylessNewMacro(
Self
);
60
62
static
void
RegisterDefaultTypes();
//HACK: This should not have a public interface since it does nothing except during instantiation of the class.
63
65
static
FEMFactoryBase
* GetFactory()
66
{
67
if
( m_Factory == 0 )
68
{
69
m_CreationLock.Lock();
70
//Need to make sure that during gaining access
71
//to the lock that some other thread did not
72
//initialize the singleton.
73
if
( m_Factory == 0 )
74
{
75
// Make and register the factory
76
FEMFactoryBase::Pointer
p =
FEMFactoryBase::New
();
77
if
( p.
IsNull
() )
78
{
79
std::ostringstream message;
80
message <<
"itk::ERROR: "
<<
"FEMFactoryBase"
81
<<
" instance not created"
;
82
::itk::ExceptionObject
e_(__FILE__, __LINE__, message.str().c_str(), ITK_LOCATION);
83
throw
e_;
/* Explicit naming to work around for Intel compiler bug. */
84
}
85
ObjectFactoryBase::RegisterFactory
( p );
86
m_Factory = p.
GetPointer
();
87
}
88
m_CreationLock.Unlock();
89
m_Factory->RegisterDefaultTypes();
//Not initialzie all default types.
90
}
91
return
m_Factory;
92
}
94
95
void
RegisterType(
const
char
* classOverride,
96
const
char
* overrideClassName,
97
const
char
* description,
98
bool
enableFlag,
99
CreateObjectFunctionBase
* createFunction)
100
{
101
this->RegisterOverride( classOverride, overrideClassName, description, enableFlag, createFunction );
102
}
103
104
protected
:
105
FEMFactoryBase
();
106
virtual
~
FEMFactoryBase
();
107
private
:
108
FEMFactoryBase
(
const
Self &);
// purposely not implemented
109
void
operator=(
const
Self &);
// purposely not implemented
110
111
static
SimpleFastMutexLock
m_CreationLock
;
112
static
FEMFactoryBase
*
m_Factory
;
113
};
114
}
// end namespace itk
115
116
#endif
117
Generated on Tue Jul 10 2012 23:25:05 for ITK by
1.8.1