SimpleITK  
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
25namespace itk::simple::detail
26{
27
50template <typename TMemberFunctionPointer>
51class MemberFunctionFactory : protected MemberFunctionFactoryBase<TMemberFunctionPointer, std::pair<unsigned int, int>>
52{
53
54public:
57
58 using MemberFunctionType = TMemberFunctionPointer;
59 using ObjectType = typename ::detail::FunctionTraits<MemberFunctionType>::ClassType;
61
65
71 template <typename TImageType>
72 void
73 Register(MemberFunctionType pfunc, TImageType *);
74
115 template <typename TPixelIDTypeList, unsigned int VImageDimension, typename TAddressor>
116 void
118 template <typename TPixelIDTypeList, unsigned int VImageDimension>
119 void
125
126 template <typename TPixelIDTypeList, unsigned int VImageDimension, unsigned int VImageDimensionStop>
127 void
133 template <typename TPixelIDTypeList,
134 unsigned int VImageDimension,
135 unsigned int VImageDimensionStop,
136 typename TAddressor>
137 void
139 {
141 if constexpr (VImageDimensionStop > VImageDimension)
142 {
143 this->RegisterMemberFunctions<TPixelIDTypeList, VImageDimension, VImageDimensionStop - 1, TAddressor>();
144 }
145 }
146
147
151 bool
152 HasMemberFunction(PixelIDValueType pixelID, unsigned int imageDimension) const noexcept;
153
174 GetMemberFunction(PixelIDValueType pixelID, unsigned int imageDimension);
175
176protected:
178};
179
180} // namespace itk::simple::detail
181
182#include "sitkMemberFunctionFactory.hxx"
183
184#endif // sitkMemberFunctionFactory_h
typename ::detail::FunctionTraits< MemberFunctionType >::ClassType ObjectType
MemberFunctionFactory(ObjectType *pObject)
Constructor which permanently binds the constructed object to pObject.
typename Superclass::FunctionObjectType FunctionObjectType
FunctionObjectType GetMemberFunction(PixelIDValueType pixelID, unsigned int imageDimension)
Returns a function object for the PixelIndex, and image dimension.
void Register(MemberFunctionType pfunc, TImageType *)
Registers a specific member function.
void RegisterMemberFunctions()
Registers all member functions in TPixelIDTypeList and simple::InstantiatedPixelIDTypeList over itk::...
MemberFunctionFactoryBase< TMemberFunctionPointer, std::pair< unsigned int, int > > Superclass
void RegisterMemberFunctions()
Registers all member functions in TPixelIDTypeList and simple::InstantiatedPixelIDTypeList over itk::...
void RegisterMemberFunctions()
Registers all member functions in TPixelIDTypeList and simple::InstantiatedPixelIDTypeList over itk::...
bool HasMemberFunction(PixelIDValueType pixelID, unsigned int imageDimension) const noexcept
Query to determine if an member function has been registered for pixelID and imageDimension.