/usr/include/InsightToolkit/Common/itkRootTreeIterator.h is in libinsighttoolkit3-dev 3.20.1-1.
This file is owned by root:root, with mode 0o644.
The actual contents of the file can be viewed below.
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 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 | /*=========================================================================
Program: Insight Segmentation & Registration Toolkit
Module: itkRootTreeIterator.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 __itkRootTreeIterator_h
#define __itkRootTreeIterator_h
#include <itkTreeIteratorBase.h>
namespace itk {
template <class TTreeType>
class RootTreeIterator : public TreeIteratorBase<TTreeType>
{
public:
/** Typedefs */
typedef TreeIteratorBase<TTreeType> Superclass;
typedef TTreeType TreeType;
typedef typename TTreeType::ValueType ValueType;
typedef typename Superclass::TreeNodeType TreeNodeType;
/** Constructor */
RootTreeIterator( TreeType* tree, const TreeNodeType* start=NULL);
/** Return the type of the iterator */
int GetType() const;
/** Clone function */
TreeIteratorBase<TTreeType>* Clone();
protected:
/** Return the next node */
const ValueType& Next();
/** Return true if the next node exists */
bool HasNext() const;
private:
/** Find the next node */
const TreeNodeType* FindNextNode() const;
};
/** Constructor */
template <class TTreeType>
RootTreeIterator<TTreeType>::RootTreeIterator(TTreeType* tree, const TreeNodeType* start)
:TreeIteratorBase<TTreeType>(tree, start)
{
if(start)
{
this->m_Begin = const_cast<TreeNode<ValueType>*>(start);
}
this->m_Root = tree->GetRoot();
this->m_Position = this->m_Begin;
}
/** Return the type of the iterator */
template <class TTreeType>
int
RootTreeIterator<TTreeType>::GetType() const
{
return TreeIteratorBase<TTreeType>::ROOT;
}
/** Return true if the next node exists */
template <class TTreeType>
bool
RootTreeIterator<TTreeType>::HasNext() const
{
if ( const_cast<TreeNodeType*>(FindNextNode()) != NULL )
{
return true;
}
return false;
}
/** Go to the next node */
template <class TTreeType>
const typename RootTreeIterator<TTreeType>::ValueType&
RootTreeIterator<TTreeType>::Next()
{
this->m_Position = const_cast<TreeNodeType*>(FindNextNode());
return this->m_Position->Get();
}
/** Find the next node */
template <class TTreeType>
const typename RootTreeIterator<TTreeType>::TreeNodeType*
RootTreeIterator<TTreeType>::FindNextNode() const
{
if ( this->m_Position == NULL )
{
return NULL;
}
if ( this->m_Position == this->m_Root )
{
return NULL;
}
return this->m_Position->GetParent();
}
/** Clone function */
template <class TTreeType>
TreeIteratorBase<TTreeType>* RootTreeIterator<TTreeType>::Clone()
{
RootTreeIterator<TTreeType>* clone = new RootTreeIterator<TTreeType>( const_cast<TTreeType*>(this->m_Tree), this->m_Position );
*clone = *this;
return clone;
}
} // end namespace itk
#endif
|