18 #ifndef __itkHilbertPath_h
19 #define __itkHilbertPath_h
52 template<
class TIndexValue =
unsigned int,
unsigned int VDimension = 3>
54 :
public Path<TIndexValue, Index<VDimension>, VDimension>
71 itkStaticConstMacro( Dimension,
unsigned int, VDimension );
90 return this->m_HilbertPath[input];
95 return this->m_HilbertPath[input];
101 return this->TransformMultiDimensionalIndexToPathIndex( input );
107 return this->NumberOfSteps();
115 itkExceptionMacro(
"Not implemented." );
119 virtual inline void Clear()
121 this->m_HilbertPath.clear();
129 return m_HilbertPath.size();
133 virtual void Initialize(
void )
136 this->ConstructHilbertPath();
144 itkGetConstMacro( HilbertOrder, HilbertOrderType );
148 IndexType TransformPathIndexToMultiDimensionalIndex(
const PathIndexType
id );
151 PathIndexType TransformMultiDimensionalIndexToPathIndex(
const IndexType & index );
156 void PrintSelf( std::ostream & os,
Indent indent )
const;
160 void operator=(
const Self & );
162 void ConstructHilbertPath();
164 PathIndexType GetTransform(
const PathIndexType,
const PathIndexType,
const PathIndexType,
const PathIndexType );
166 PathIndexType GetInverseTransform(
const PathIndexType,
const PathIndexType,
const PathIndexType,
const PathIndexType );
168 PathIndexType GetGrayCode(
const PathIndexType );
170 PathIndexType GetInverseGrayCode(
const PathIndexType );
172 PathIndexType SetBit(
const PathIndexType,
const PathIndexType,
const PathIndexType,
const PathIndexType );
174 PathIndexType GetRightBitRotation( PathIndexType, PathIndexType,
const PathIndexType );
176 PathIndexType GetLeftBitRotation( PathIndexType, PathIndexType,
const PathIndexType );
178 PathIndexType GetTrailingSetBits(
const PathIndexType,
const PathIndexType );
180 PathIndexType GetDirection(
const PathIndexType,
const PathIndexType );
182 PathIndexType GetEntry(
const PathIndexType );
184 PathIndexType GetBitRange(
const PathIndexType,
const PathIndexType,
const PathIndexType,
const PathIndexType );
192 #define ITK_TEMPLATE_HilbertPath(_, EXPORT, TypeX, TypeY) \
195 _( 1 ( class EXPORT HilbertPath< ITK_TEMPLATE_1 TypeX > ) ) \
196 namespace Templates \
198 typedef HilbertPath< ITK_TEMPLATE_1 TypeX > \
199 HilbertPath##TypeY; \
203 #if ITK_TEMPLATE_EXPLICIT
204 #include "Templates/itkHilbertPath+-.h"
208 #include "itkHilbertPath.hxx"