Program Listing for File LineIterator.hpp

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

/*
 * LineIterator.hpp
 *
 *  Created on: Nov 13, 2014
 *      Author: Péter Fankhauser
 *   Institute: ETH Zurich, ANYbotics
 */

#ifndef GRID_MAP_CORE__ITERATORS__LINEITERATOR_HPP_
#define GRID_MAP_CORE__ITERATORS__LINEITERATOR_HPP_

#include <Eigen/Core>

#include "grid_map_core/GridMap.hpp"
#include "grid_map_core/iterators/SubmapIterator.hpp"

namespace grid_map
{

class LineIterator
{
public:
  LineIterator(const grid_map::GridMap & gridMap, const Position & start, const Position & end);

  LineIterator(const grid_map::GridMap & gridMap, const Index & start, const Index & end);

  LineIterator & operator=(const LineIterator & other);

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

  const Index & operator*() const;

  LineIterator & operator++();

  bool isPastEnd() const;

private:
  bool initialize(const grid_map::GridMap & gridMap, const Index & start, const Index & end);

  void initializeIterationParameters();

  bool getIndexLimitedToMapRange(
    const grid_map::GridMap & gridMap, const Position & start,
    const Position & end, Index & index);

  Index index_;

  Index start_;

  Index end_;

  unsigned int iCell_;

  unsigned int nCells_;

  Size increment1_, increment2_;
  int denominator_, numerator_, numeratorAdd_;

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

public:
  EIGEN_MAKE_ALIGNED_OPERATOR_NEW
};

}  // namespace grid_map
#endif  // GRID_MAP_CORE__ITERATORS__LINEITERATOR_HPP_