forked from InsightSoftwareConsortium/ITK
-
Notifications
You must be signed in to change notification settings - Fork 0
/
itkCorrespondenceDataStructureIterator.h
98 lines (74 loc) · 3.21 KB
/
itkCorrespondenceDataStructureIterator.h
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
/*=========================================================================
Program: Insight Segmentation & Registration Toolkit
Module: itkCorrespondenceDataStructureIterator.h
Language: C++
Date: $Date$
Version: $Revision$
Copyright (c) Insight Software Consortium. All rights reserved.
See ITKCopyright.txt or http://www.itk.org/HTML/Copyright.htm for details.
This software is distributed WITHOUT ANY WARRANTY; without even
the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR
PURPOSE. See the above copyright notices for more information.
=========================================================================*/
#ifndef __itkCorrespondenceDataStructureIterator_h
#define __itkCorrespondenceDataStructureIterator_h
namespace itk
{
/** \class CorrespondenceDataStructureIterator
* \brief An iterator designed to easily traverse an
* itkCorrespondenceDataStructure.
*
* \ingroup
*/
template<class TStructureType>
class CorrespondenceDataStructureIterator {
public:
/** Standard class typedefs. */
typedef CorrespondenceDataStructureIterator Self;
/** Get the dimension (size) of the index. */
static unsigned int GetIteratorDimension()
{return TStructureType::dim;}
/** Is the iterator at the end of the region? */
bool IsAtEnd();
/** Walk forward one index. (prefix) */
void operator++(){GoToNext();}
/** Walk forward one index. (postfix) */
void operator++(int){GoToNext();}
/** Goes to the next corresponding node clique in the structure,
* moving on to the next base node clique if necessary. */
void GoToNext();
/** Goes to the next base node clique. */
void GoToNextBaseGroup();
/** Resets the iterator. */
void Reset();
/** Constructor */
CorrespondenceDataStructureIterator(TStructureType *StructurePtr);
/** Destructor */
virtual ~CorrespondenceDataStructureIterator();
typedef typename TStructureType::CorrespondingListType CorrespondingListType;
typedef typename TStructureType::ItemType ItemType;
typedef typename TStructureType::SecondaryNodeListType SecondaryNodeListType;
typedef typename TStructureType::NodeListType NodeListType;
typedef typename CorrespondingListType::iterator CorrespondingListIterator;
typedef typename SecondaryNodeListType::iterator SecondaryNodeListIterator;
typedef typename NodeListType::iterator NodeListIterator;
/** Get m_CorrespondingListPointer. */
CorrespondingListType * GetCorrespondingListPointer()
{return m_CorrespondingListPointer;}
CorrespondingListIterator m_CorrespondingListIterator;
SecondaryNodeListIterator m_SecondaryListIterator;
typename TStructureType::NodeListType::iterator m_NodeListIterator;
protected:
/** Is the iterator at the end of its walk? */
bool m_IsAtEnd;
TStructureType * m_Structure;
ItemType * m_CorrespondingNodePointer;
CorrespondingListType * m_CorrespondingListPointer;
SecondaryNodeListType * m_SecondaryListPointer;
NodeListType * m_NodeListPointer;
};
} // end namespace itk
#ifndef ITK_MANUAL_INSTANTIATION
#include "itkCorrespondenceDataStructureIterator.txx"
#endif
#endif