SimpleITK  2.0.0
sitkMemberFunctionFactory.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 * 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 #ifndef sitkMemberFunctionFactory_h
19 #define sitkMemberFunctionFactory_h
20 
21 #include "sitkDetail.h"
23 #include "sitkPixelIDValues.h"
24 
25 namespace itk
26 {
27 namespace simple
28 {
29 // this namespace is internal classes not part of the external simple ITK interface
30 namespace detail {
31 
54 template <typename TMemberFunctionPointer>
56  : protected MemberFunctionFactoryBase<TMemberFunctionPointer, std::pair<unsigned int, int> >
57 {
58 
59 public:
60 
63 
64  using MemberFunctionType = TMemberFunctionPointer;
65  using ObjectType = typename ::detail::FunctionTraits<MemberFunctionType>::ClassType;
66  using FunctionObjectType = typename Superclass::FunctionObjectType;
67 
71 
77  template< typename TImageType >
78  void Register( MemberFunctionType pfunc, TImageType* );
79 
120  template < typename TPixelIDTypeList,
121  unsigned int VImageDimension,
122  typename TAddressor >
123  void RegisterMemberFunctions( );
124  template < typename TPixelIDTypeList, unsigned int VImageDimension >
126  {
128  this->RegisterMemberFunctions< TPixelIDTypeList, VImageDimension, AddressorType >();
129  }
130 
131  template < typename TPixelIDTypeList, unsigned int VImageDimension, unsigned int VImageDimensionStop >
132  void
134  {
136  this->RegisterMemberFunctions< TPixelIDTypeList, VImageDimension, VImageDimensionStop, AddressorType >();
137  }
138  template < typename TPixelIDTypeList,
139  unsigned int VImageDimension,
140  unsigned int VImageDimensionStop,
141  typename TAddressor
142  >
143  typename std::enable_if<(VImageDimensionStop > VImageDimension)>::type
145  {
146  this->RegisterMemberFunctions< TPixelIDTypeList, VImageDimensionStop, TAddressor >();
147  this->RegisterMemberFunctions< TPixelIDTypeList, VImageDimension, VImageDimensionStop - 1, TAddressor >();
148  }
149  template < typename TPixelIDTypeList,
150  unsigned int VImageDimension,
151  unsigned int VImageDimensionStop,
152  typename TAddressor >
153  typename std::enable_if<(VImageDimensionStop == VImageDimension)>::type
155  {
156  this->RegisterMemberFunctions< TPixelIDTypeList, VImageDimensionStop, TAddressor >();
157  }
163  bool HasMemberFunction( PixelIDValueType pixelID, unsigned int imageDimension ) const noexcept;
164 
184  FunctionObjectType GetMemberFunction( PixelIDValueType pixelID, unsigned int imageDimension );
185 
186 protected:
187 
189 
190 };
191 
192 } // end namespace detail
193 } // end namespace simple
194 } // end namespace itk
195 
196 #include "sitkMemberFunctionFactory.hxx"
197 
198 #endif // sitkMemberFunctionFactory_h
itk::simple::detail::MemberFunctionFactory< MemberFunctionType >::FunctionObjectType
typename Superclass::FunctionObjectType FunctionObjectType
Definition: sitkMemberFunctionFactory.h:66
itk::simple::detail::MemberFunctionFactory::Register
void Register(MemberFunctionType pfunc, TImageType *)
Registers a specific member function.
itk::simple::detail::MemberFunctionAddressor
Definition: sitkDetail.h:32
itk::simple::detail::MemberFunctionFactory::GetMemberFunction
FunctionObjectType GetMemberFunction(PixelIDValueType pixelID, unsigned int imageDimension)
Returns a function object for the PixelIndex, and image dimension.
itk::simple::detail::MemberFunctionFactory< MemberFunctionType >::MemberFunctionType
MemberFunctionType MemberFunctionType
Definition: sitkMemberFunctionFactory.h:64
itk::simple::detail::MemberFunctionFactory
A class used to instantiate and generate function object to templated member functions.
Definition: sitkMemberFunctionFactory.h:55
itk::simple::detail::MemberFunctionFactory::RegisterMemberFunctions
void RegisterMemberFunctions()
Registers all member functions in TPixelIDTypeList and simple::InstantiatedPixelIDTypeList over itk::...
Definition: sitkMemberFunctionFactory.h:125
sitkDetail.h
sitkMemberFunctionFactoryBase.h
itk::simple::detail::MemberFunctionFactory::HasMemberFunction
bool HasMemberFunction(PixelIDValueType pixelID, unsigned int imageDimension) const noexcept
Query to determine if an member function has been registered for pixelID and imageDimension.
sitkPixelIDValues.h
itk::simple::detail::MemberFunctionFactory::ObjectType
typename ::detail::FunctionTraits< MemberFunctionType >::ClassType ObjectType
Definition: sitkMemberFunctionFactory.h:65
itk::simple::detail::MemberFunctionFactory::m_ObjectPointer
ObjectType * m_ObjectPointer
Definition: sitkMemberFunctionFactory.h:188
itk
itk::simple::detail::MemberFunctionFactory::RegisterMemberFunctions
void RegisterMemberFunctions()
Registers all member functions in TPixelIDTypeList and simple::InstantiatedPixelIDTypeList over itk::...
itk::simple::detail::MemberFunctionFactory::RegisterMemberFunctions
std::enable_if<(VImageDimensionStop==VImageDimension)>::type RegisterMemberFunctions()
Registers all member functions in TPixelIDTypeList and simple::InstantiatedPixelIDTypeList over itk::...
Definition: sitkMemberFunctionFactory.h:154
itk::simple::detail::MemberFunctionFactory::RegisterMemberFunctions
std::enable_if<(VImageDimensionStop > VImageDimension)>::type RegisterMemberFunctions()
Registers all member functions in TPixelIDTypeList and simple::InstantiatedPixelIDTypeList over itk::...
Definition: sitkMemberFunctionFactory.h:144
itk::simple::PixelIDValueType
int PixelIDValueType
Definition: sitkPixelIDValues.h:32
itk::simple::detail::MemberFunctionFactory::MemberFunctionFactory
MemberFunctionFactory(ObjectType *pObject)
Constructor which permanently binds the constructed object to pObject.
itk::simple::detail::MemberFunctionFactoryBase
A base class for the MemberFunctionFactory.
Definition: sitkMemberFunctionFactoryBase.h:102