outofcore_iterator_base.h
/*
* Software License Agreement (BSD License)
*
* Point Cloud Library (PCL) - www.pointclouds.org
* Copyright (c) 2010-2012, Willow Garage, Inc.
*
* All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
* are met:
*
* * Redistributions of source code must retain the above copyright
* notice, this list of conditions and the following disclaimer.
* * Redistributions in binary form must reproduce the above
* copyright notice, this list of conditions and the following
* disclaimer in the documentation and/or other materials provided
* with the distribution.
* * Neither the name of Willow Garage, Inc. nor the names of its
* contributors may be used to endorse or promote products derived
* from this software without specific prior written permission.
*
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
* "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
* LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
* FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
* COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
* INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
* BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
* LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
* CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
* LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
* ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
* POSSIBILITY OF SUCH DAMAGE.
*
* $Id$
*/
#pragma once
#include <iterator>
#include <pcl/point_types.h>
#include <pcl/outofcore/octree_base.h>
#include <pcl/outofcore/octree_base_node.h>
#include <pcl/outofcore/octree_disk_container.h>
namespace pcl
{
namespace outofcore
{
/** \brief Abstract octree iterator class
* \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.
* \ingroup outofcore
* \author Stephen Fox (foxstephend@gmail.com)
*/
template<typename PointT, typename ContainerT>
class OutofcoreIteratorBase : public std::iterator<std::forward_iterator_tag, /*iterator type*/
const OutofcoreOctreeBaseNode<ContainerT, PointT>,
void, /*no defined distance between iterator*/
const OutofcoreOctreeBaseNode<ContainerT, PointT>*,/*Pointer type*/
const OutofcoreOctreeBaseNode<ContainerT, PointT>&>/*Reference type*/
{
public:
using OctreeDisk = pcl::outofcore::OutofcoreOctreeBase<ContainerT, PointT>;
using OctreeDiskNode = pcl::outofcore::OutofcoreOctreeBaseNode<ContainerT, PointT>;
using BranchNode = typename pcl::outofcore::OutofcoreOctreeBase<ContainerT, PointT>::BranchNode;
using LeafNode = typename pcl::outofcore::OutofcoreOctreeBase<ContainerT, PointT>::LeafNode;
using OutofcoreNodeType = typename OctreeDisk::OutofcoreNodeType;
explicit
OutofcoreIteratorBase (OctreeDisk& octree_arg)
: octree_ (octree_arg), currentNode_ (nullptr)
{
reset ();
}
virtual
~OutofcoreIteratorBase ()
{
}
OutofcoreIteratorBase (const OutofcoreIteratorBase& src)
: octree_ (src.octree_), currentNode_ (src.currentNode_)
{
}
inline OutofcoreIteratorBase&
operator = (const OutofcoreIteratorBase& src)
{
octree_ = src.octree_;
currentNode_ = src.currentNode_;
currentOctreeDepth_ = src.currentOctreeDepth_;
}
inline OutofcoreNodeType*
operator* () const
{
return (this->getCurrentOctreeNode ());
}
virtual inline OutofcoreNodeType*
getCurrentOctreeNode () const
{
return (currentNode_);
}
virtual inline void
reset ()
{
currentNode_ = static_cast<OctreeDiskNode*> (octree_.getRootNode ());
currentOctreeDepth_ = 0;
max_depth_ = static_cast<unsigned int> (octree_.getDepth ());
}
inline void
setMaxDepth (unsigned int max_depth)
{
if (max_depth > static_cast<unsigned int> (octree_.getDepth ()))
{
max_depth = static_cast<unsigned int> (octree_.getDepth ());
}
max_depth_ = max_depth;
}
protected:
OctreeDisk& octree_;
OctreeDiskNode* currentNode_;
unsigned int currentOctreeDepth_;
unsigned int max_depth_;
};
#if 0
class PCL_EXPORTS OutofcoreBreadthFirstIterator : public OutofcoreIteratorBase
{
};
class PCL_EXPORTS OutofcoreLeafIterator : public OutofcoreIteratorBase
{
};
#endif
}
}
pcl
This file defines compatibility wrappers for low level I/O functions.
Definition: convolution.h:45
point_types.h
pcl::outofcore::OutofcoreIteratorBase
Abstract octree iterator class.
Definition: outofcore_iterator_base.h:59
pcl::outofcore::OutofcoreIteratorBase::OutofcoreIteratorBase
OutofcoreIteratorBase(OctreeDisk &octree_arg)
Definition: outofcore_iterator_base.h:75
pcl::outofcore::OutofcoreBreadthFirstIterator
Definition: outofcore_breadth_first_iterator.h:54
pcl::outofcore::OutofcoreIteratorBase::max_depth_
unsigned int max_depth_
Definition: outofcore_iterator_base.h:135
pcl::outofcore::OutofcoreOctreeBaseNode
OutofcoreOctreeBaseNode Class internally representing nodes of an outofcore octree,...
Definition: octree_base_node.h:62
pcl::outofcore::OutofcoreIteratorBase::OutofcoreIteratorBase
OutofcoreIteratorBase(const OutofcoreIteratorBase &src)
Definition: outofcore_iterator_base.h:86
pcl::outofcore::OutofcoreOctreeBase::getDepth
std::uint64_t getDepth() const
Get number of LODs, which is the height of the tree.
Definition: octree_base.h:435
pcl::outofcore::OutofcoreIteratorBase::operator*
OutofcoreNodeType * operator*() const
Definition: outofcore_iterator_base.h:101
pcl::outofcore::OutofcoreOctreeBase::OutofcoreNodeType
OutofcoreOctreeBaseNode< ContainerT, PointT > OutofcoreNodeType
Definition: octree_base.h:164
pcl::outofcore::OutofcoreIteratorBase::LeafNode
typename pcl::outofcore::OutofcoreOctreeBase< ContainerT, PointT >::LeafNode LeafNode
Definition: outofcore_iterator_base.h:70
pcl::outofcore::OutofcoreIteratorBase::getCurrentOctreeNode
virtual OutofcoreNodeType * getCurrentOctreeNode() const
Definition: outofcore_iterator_base.h:107
pcl::outofcore::OutofcoreIteratorBase::reset
virtual void reset()
Definition: outofcore_iterator_base.h:113
pcl::outofcore::OutofcoreIteratorBase::operator=
OutofcoreIteratorBase & operator=(const OutofcoreIteratorBase &src)
Definition: outofcore_iterator_base.h:92
pcl::outofcore::OutofcoreIteratorBase::octree_
OctreeDisk & octree_
Definition: outofcore_iterator_base.h:132
pcl::outofcore::OutofcoreOctreeBase::getRootNode
OutofcoreNodeType * getRootNode()
Definition: octree_base.h:585
pcl::outofcore::OutofcoreIteratorBase::OutofcoreNodeType
typename OctreeDisk::OutofcoreNodeType OutofcoreNodeType
Definition: outofcore_iterator_base.h:72
pcl::outofcore::OutofcoreIteratorBase::BranchNode
typename pcl::outofcore::OutofcoreOctreeBase< ContainerT, PointT >::BranchNode BranchNode
Definition: outofcore_iterator_base.h:69
pcl::outofcore::OutofcoreIteratorBase::currentOctreeDepth_
unsigned int currentOctreeDepth_
Definition: outofcore_iterator_base.h:134
pcl::outofcore::OutofcoreIteratorBase::~OutofcoreIteratorBase
virtual ~OutofcoreIteratorBase()
Definition: outofcore_iterator_base.h:82
pcl::outofcore::OutofcoreOctreeBase
This code defines the octree used for point storage at Urban Robotics.
Definition: octree_base.h:150
pcl::outofcore::OutofcoreIteratorBase::currentNode_
OctreeDiskNode * currentNode_
Definition: outofcore_iterator_base.h:133
pcl::outofcore::OutofcoreIteratorBase::setMaxDepth
void setMaxDepth(unsigned int max_depth)
Definition: outofcore_iterator_base.h:121
PCL_EXPORTS
#define PCL_EXPORTS
Definition: pcl_macros.h:253