18 #ifndef itkHilbertPath_h
19 #define itkHilbertPath_h
53 template <
typename TIndexValue =
unsigned int,
unsigned int VDimension = 3>
54 class ITK_TEMPLATE_EXPORT
HilbertPath :
public Path<TIndexValue, Index<VDimension>, VDimension>
72 static constexpr
unsigned int Dimension = VDimension;
75 using typename Superclass::OutputType;
76 using typename Superclass::InputType;
84 using typename Superclass::OffsetType;
92 return this->m_HilbertPath[input];
98 return this->m_HilbertPath[input];
105 return this->TransformMultiDimensionalIndexToPathIndex(input);
112 return static_cast<InputType>(this->NumberOfSteps());
121 itkExceptionMacro(
"Not implemented.");
128 this->m_HilbertPath.clear();
134 virtual inline HilbertPathSizeType
137 return m_HilbertPath.size();
145 this->ConstructHilbertPath();
153 itkGetConstMacro(HilbertOrder, HilbertOrderType);
158 TransformPathIndexToMultiDimensionalIndex(
const PathIndexType
id);
162 TransformMultiDimensionalIndexToPathIndex(
const IndexType & index);
168 PrintSelf(std::ostream & os,
Indent indent)
const override;
172 ConstructHilbertPath();
175 GetTransform(
const PathIndexType,
const PathIndexType,
const PathIndexType,
const PathIndexType);
178 GetInverseTransform(
const PathIndexType,
const PathIndexType,
const PathIndexType,
const PathIndexType);
181 GetGrayCode(
const PathIndexType);
184 GetInverseGrayCode(
const PathIndexType);
187 SetBit(
const PathIndexType,
const PathIndexType,
const PathIndexType,
const PathIndexType);
190 GetRightBitRotation(PathIndexType, PathIndexType,
const PathIndexType);
193 GetLeftBitRotation(PathIndexType, PathIndexType,
const PathIndexType);
196 GetTrailingSetBits(
const PathIndexType,
const PathIndexType);
199 GetDirection(
const PathIndexType,
const PathIndexType);
202 GetEntry(
const PathIndexType);
205 GetBitRange(
const PathIndexType,
const PathIndexType,
const PathIndexType,
const PathIndexType);
212 #ifndef ITK_MANUAL_INSTANTIATION
213 # include "itkHilbertPath.hxx"