File: itkTreeContainer.h

package info (click to toggle)
insighttoolkit5 5.4.5-1
  • links: PTS, VCS
  • area: main
  • in suites: forky, sid
  • size: 704,588 kB
  • sloc: cpp: 784,579; ansic: 628,724; xml: 44,704; fortran: 34,250; python: 22,934; sh: 4,078; pascal: 2,636; lisp: 2,158; makefile: 461; yacc: 328; asm: 205; perl: 203; lex: 146; tcl: 132; javascript: 98; csh: 81
file content (137 lines) | stat: -rw-r--r-- 3,681 bytes parent folder | download | duplicates (2)
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
129
130
131
132
133
134
135
136
137
/*=========================================================================
 *
 *  Copyright NumFOCUS
 *
 *  Licensed under the Apache License, Version 2.0 (the "License");
 *  you may not use this file except in compliance with the License.
 *  You may obtain a copy of the License at
 *
 *         https://www.apache.org/licenses/LICENSE-2.0.txt
 *
 *  Unless required by applicable law or agreed to in writing, software
 *  distributed under the License is distributed on an "AS IS" BASIS,
 *  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 *  See the License for the specific language governing permissions and
 *  limitations under the License.
 *
 *=========================================================================*/
#ifndef itkTreeContainer_h
#define itkTreeContainer_h

#include "itkTreeContainerBase.h"
#include "itkPreOrderTreeIterator.h"

namespace itk
{
/** \class TreeContainer
 *  \brief A tree container.
 *
 * This class derives from the TreeContainerBase class.
 * The class is templated over the type of the elements.
 *
 * \tparam TValue Element type stored at each location in the Tree.
 *
 * \ingroup DataRepresentation
 * \ingroup ITKDeprecated
 */
template <typename TValue>
class ITK_TEMPLATE_EXPORT TreeContainer : public TreeContainerBase<TValue>
{
public:
  /** Standard type alias */
  using Superclass = TreeContainerBase<TValue>;
  using Self = TreeContainer<TValue>;
  using Pointer = SmartPointer<Self>;
  using ConstPointer = SmartPointer<const Self>;
  using ValueType = TValue;
  using TreeNodeType = TreeNode<ValueType>;

  /** Iterators type alias */
  using IteratorType = TreeIteratorBase<Self>;
  using PreOrderIteratorType = PreOrderTreeIterator<Self>;

  /** Method for creation through the object factory. */
  itkNewMacro(Self);

  /** \see LightObject::GetNameOfClass() */
  itkOverrideGetNameOfClassMacro(TreeContainer);

  /** Constructor with default children count. */
  TreeContainer(int defaultChildrenCount);

  /** Constructor by adding a tree. */
  TreeContainer(TreeContainer<TValue> & tree);

  /** Set the specified element as the root. */
  bool
  SetRoot(const TValue element) override;

  /** Set the specified iterator position as the root. */
  bool
  SetRoot(IteratorType & pos);

  /** Set the specified tree node as the root. */
  bool
  SetRoot(TreeNode<TValue> * node) override;

  /** Return true if the element is in the tree. */
  bool
  Contains(const TValue element) override;

  /** Return the number of elements in the tree. */
  int
  Count() const override;

  /** Return true if the node containing the given element is a leaf of the tree. */
  bool
  IsLeaf(const TValue element) override;

  /** Return true if the node containing the given element is the root. */
  bool
  IsRoot(const TValue element) override;

  /** Clear the tree. */
  bool
  Clear() override;

  /** operator equal. */
  bool
  operator==(TreeContainer<TValue> & tree);

  /** Swap the iterators. */
  bool
  Swap(IteratorType & v, IteratorType & w);

  /** Get the root. */
  const TreeNodeType *
  GetRoot() const override
  {
    return m_Root.GetPointer();
  }

  /** Add a child to a given parent. */
  bool
  Add(const TValue child, const TValue parent);

  /** Get the node corresponding to the given a value. */
  const TreeNodeType *
  GetNode(TValue val) const;

protected:
  TreeContainer();
  ~TreeContainer() override = default;

  typename TreeNodeType::Pointer m_Root{};

  int m_DefaultChildrenCount{};

  void
  PrintSelf(std::ostream & os, Indent indent) const override;
};
} // namespace itk

#ifndef ITK_MANUAL_INSTANTIATION
#  include "itkTreeContainer.hxx"
#endif

#endif