1 /*=========================================================================
2  *
3  *  Copyright Insight Software Consortium
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 itkDataObjectIterator_h
19 #define itkDataObjectIterator_h
20 
21 #include "itkProcessObject.h"
22 
23 namespace itk
24 {
25 /** \class DataObjectIterator
26  * \brief A forward iterator over the DataObject of a ProcessObject
27  * \author Gaetan Lehmann. Biologie du Developpement et de la Reproduction, INRA de Jouy-en-Josas, France.
28  * \ingroup ITKCommon
29  */
30 class DataObjectIterator
31 {
32 public:
33 
34   using DataObjectIdentifierType = DataObject::DataObjectIdentifierType;
35 
36   DataObjectIterator() = default;
37 
DataObjectIterator(const DataObjectIterator & iter)38   DataObjectIterator(const DataObjectIterator & iter)
39   {
40     m_Iterator = iter.m_Iterator;
41     m_Begin = iter.m_Begin;
42     m_End = iter.m_End;
43   }
44 
45   DataObjectIterator & operator=(const DataObjectIterator & iter)
46   {
47     if(this != &iter)
48       {
49       m_Iterator = iter.m_Iterator;
50       m_Begin = iter.m_Begin;
51       m_End = iter.m_End;
52       }
53     return *this;
54   }
55 
GetDataObject()56   DataObject * GetDataObject()
57   {
58     return m_Iterator->second;
59   }
60 
GetName()61   const DataObjectIdentifierType & GetName() const
62   {
63     return m_Iterator->first;
64   }
65 
66   DataObjectIterator operator++(int)
67   {
68     DataObjectIterator tmp = *this;
69     ++(*this);
70     return tmp;
71   }
72 
73   DataObjectIterator & operator++()
74   {
75     ++m_Iterator;
76     return *this;
77   }
78 
79   bool operator==(const DataObjectIterator & iter) const
80     {
81     return m_Iterator == iter.m_Iterator && m_Begin == iter.m_Begin && m_End == iter.m_End;
82     }
83 
84   bool operator!=(const DataObjectIterator & iter) const
85     {
86     return !( *this == iter );
87     }
88 
GoToBegin()89   void GoToBegin()
90     {
91       m_Iterator = m_Begin;
92     }
93 
IsAtEnd()94     bool IsAtEnd() const
95     {
96       return m_Iterator == m_End;
97     }
98 
99 protected:
100   using InternalIteratorType = ProcessObject::DataObjectPointerMap::iterator;
101   InternalIteratorType m_Iterator;
102   InternalIteratorType m_Begin;
103   InternalIteratorType m_End;
104 };
105 }
106 #endif
107