Program Listing for File SpiralIterator.hpp

Return to documentation for file (/tmp/ws/src/grid_map/grid_map_core/include/grid_map_core/iterators/SpiralIterator.hpp)

/*
 * SpiralIterator.hpp
 *
 *  Created on: Jul 7, 2015
 *      Author: Martin Wermelinger
 *   Institute: ETH Zurich, ANYbotics
 */


#ifndef GRID_MAP_CORE__ITERATORS__SPIRALITERATOR_HPP_
#define GRID_MAP_CORE__ITERATORS__SPIRALITERATOR_HPP_

#include <Eigen/Core>
#include <memory>
#include <vector>

#include "grid_map_core/GridMap.hpp"

namespace grid_map
{

class SpiralIterator
{
public:
  SpiralIterator(
    const grid_map::GridMap & gridMap, const Eigen::Vector2d & center,
    const double radius);

  SpiralIterator & operator=(const SpiralIterator & other);

  bool operator!=(const SpiralIterator & other) const;

  const Eigen::Array2i & operator*() const;

  SpiralIterator & operator++();

  bool isPastEnd() const;

  double getCurrentRadius() const;

private:
  bool isInside(const Index index) const;

  void generateRing();

  int signum(const int val)
  {
    return (0 < val) - (val < 0);
  }

  Position center_;
  Index indexCenter_;


  double radius_;

  double radiusSquare_;

  unsigned int nRings_;
  unsigned int distance_;
  std::vector<Index> pointsRing_;

  Length mapLength_;
  Position mapPosition_;
  double resolution_;
  Size bufferSize_;

public:
  EIGEN_MAKE_ALIGNED_OPERATOR_NEW
};

}  // namespace grid_map
#endif  // GRID_MAP_CORE__ITERATORS__SPIRALITERATOR_HPP_