Point Cloud Library (PCL)  1.15.1-dev
outofcore_iterator_base.h
1 /*
2  * Software License Agreement (BSD License)
3  *
4  * Point Cloud Library (PCL) - www.pointclouds.org
5  * Copyright (c) 2010-2012, Willow Garage, Inc.
6  *
7  * All rights reserved.
8  *
9  * Redistribution and use in source and binary forms, with or without
10  * modification, are permitted provided that the following conditions
11  * are met:
12  *
13  * * Redistributions of source code must retain the above copyright
14  * notice, this list of conditions and the following disclaimer.
15  * * Redistributions in binary form must reproduce the above
16  * copyright notice, this list of conditions and the following
17  * disclaimer in the documentation and/or other materials provided
18  * with the distribution.
19  * * Neither the name of Willow Garage, Inc. nor the names of its
20  * contributors may be used to endorse or promote products derived
21  * from this software without specific prior written permission.
22  *
23  * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
24  * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
25  * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
26  * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
27  * COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
28  * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
29  * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
30  * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
31  * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
32  * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
33  * ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
34  * POSSIBILITY OF SUCH DAMAGE.
35  *
36  * $Id$
37  */
38 
39 #pragma once
40 
41 #include <iterator>
42 
43 #include <pcl/point_types.h>
44 
45 #include <pcl/outofcore/octree_base.h>
46 #include <pcl/outofcore/octree_base_node.h>
47 #include <pcl/outofcore/octree_disk_container.h>
48 
49 namespace pcl
50 {
51  namespace outofcore
52  {
53  /** \brief Abstract octree iterator class
54  * \note This class is based on the octree_iterator written by Julius Kammerl adapted to the outofcore octree. The interface is very similar, but it does \b not inherit the \ref pcl::octree iterator base.
55  * \ingroup outofcore
56  * \author Stephen Fox (foxstephend@gmail.com)
57  */
58  template<typename PointT, typename ContainerT>
60  {
61  public:
62  using iterator_category = std::forward_iterator_tag;
64  using difference_type = void;
67 
70 
73 
75 
76  explicit
78  : octree_ (octree_arg), currentNode_ (nullptr)
79  {
80  reset ();
81  }
82 
83  virtual
84  ~OutofcoreIteratorBase () = default;
85 
88  {
89  }
90 
91  inline OutofcoreIteratorBase&
93  {
94  if (this == &src)
95  return *this;
96  octree_ = src.octree_;
99  return *this;
100  }
101 
102 
103  inline OutofcoreNodeType*
104  operator* () const
105  {
106  return (this->getCurrentOctreeNode ());
107  }
108 
109  virtual inline OutofcoreNodeType*
111  {
112  return (currentNode_);
113  }
114 
115  virtual inline void
116  reset ()
117  {
118  currentNode_ = static_cast<OctreeDiskNode*> (octree_.getRootNode ());
120  max_depth_ = static_cast<unsigned int> (octree_.getDepth ());
121  }
122 
123  inline void
124  setMaxDepth (unsigned int max_depth)
125  {
126  if (max_depth > static_cast<unsigned int> (octree_.getDepth ()))
127  {
128  max_depth = static_cast<unsigned int> (octree_.getDepth ());
129  }
130 
131  max_depth_ = max_depth;
132  }
133 
134  protected:
137  unsigned int currentOctreeDepth_;
138  unsigned int max_depth_;
139  };
140 
141 
142 #if 0
144  {
145 
146 
147 
148 
149  };
150 
151  class PCL_EXPORTS OutofcoreLeafIterator : public OutofcoreIteratorBase
152  {
153 
154 
155 
156  };
157 #endif
158  }
159 }
OutofcoreIteratorBase & operator=(const OutofcoreIteratorBase &src)
typename pcl::outofcore::OutofcoreOctreeBase< ContainerT, PointT >::BranchNode BranchNode
typename OctreeDisk::OutofcoreNodeType OutofcoreNodeType
typename pcl::outofcore::OutofcoreOctreeBase< ContainerT, PointT >::LeafNode LeafNode
OutofcoreIteratorBase(const OutofcoreIteratorBase &src)
virtual OutofcoreNodeType * getCurrentOctreeNode() const
This code defines the octree used for point storage at Urban Robotics.
Definition: octree_base.h:151
std::uint64_t getDepth() const
Get number of LODs, which is the height of the tree.
Definition: octree_base.h:435
OutofcoreOctreeBaseNode< ContainerT, PointT > OutofcoreNodeType
Definition: octree_base.h:164
OutofcoreNodeType * getRootNode()
Definition: octree_base.h:585
OutofcoreOctreeBaseNode Class internally representing nodes of an outofcore octree,...
Defines all the PCL implemented PointT point type structures.
#define PCL_EXPORTS
Definition: pcl_macros.h:324