31#ifndef ETL_BRESENHAM_LINE_INCLUDED
32#define ETL_BRESENHAM_LINE_INCLUDED
36#include "static_assert.h"
50 template <
typename T,
typename TWork =
int16_t>
59 typedef size_t size_type;
60 typedef ptrdiff_t difference_type;
79 : p_bresenham_line(ETL_NULLPTR)
87 : p_bresenham_line(other.p_bresenham_line)
96 p_bresenham_line = rhs.p_bresenham_line;
107 if (p_bresenham_line->get_coordinate() == p_bresenham_line->back())
110 p_bresenham_line = ETL_NULLPTR;
114 p_bresenham_line->next();
125 return p_bresenham_line->get_coordinate();
133 return lhs.p_bresenham_line == rhs.p_bresenham_line;
141 return !(lhs == rhs);
150 : p_bresenham_line(pb)
162 initialise(T(0), T(0), T(0), T(0));
171 initialise(first_.x, first_.y, last_.x, last_.y);
180 initialise(first_x, first_y, last_x, last_y);
189 initialise(first_.x, first_.y, last_.x, last_.y);
196 void reset(T first_x, T first_y, T last_x, T last_y)
198 initialise(first_x, first_y, last_x, last_y);
241 if (y_is_major_axis())
264 return !(lhs == rhs);
272 void initialise(T first_x, T first_y, T last_x, T last_y)
277 x_increment = (last_x < first_x) ? -1 : 1;
278 y_increment = (last_y < first_y) ? -1 : 1;
279 dx = (last_x < first_x) ? first_x - last_x : last_x - first_x;
280 dy = (last_y < first_y) ? first_y - last_y : last_y - first_y;
281 do_minor_increment =
false;
283 if (y_is_major_axis())
300 bool y_is_major_axis()
const
310 if (y_is_major_axis())
313 if (do_minor_increment)
315 coordinate.x = T(coordinate.x + x_increment);
319 coordinate.y = T(coordinate.y + y_increment);
325 if (do_minor_increment)
327 coordinate.y = T(coordinate.y + y_increment);
331 coordinate.x = T(coordinate.x + x_increment);
335 do_minor_increment = (balance >= 0);
346 typedef TWork work_t;
356 bool do_minor_increment;
Const Iterator.
Definition: bresenham_line.h:70
friend bool operator!=(const const_iterator &lhs, const const_iterator &rhs)
Inequality operator.
Definition: bresenham_line.h:139
const_iterator & operator=(const const_iterator &rhs)
Assignment operator.
Definition: bresenham_line.h:94
const_iterator & operator++()
Pre-increment operator.
Definition: bresenham_line.h:104
const_iterator(const const_iterator &other)
Copy constructor.
Definition: bresenham_line.h:86
friend bool operator==(const const_iterator &lhs, const const_iterator &rhs)
Equality operator.
Definition: bresenham_line.h:131
const_iterator()
Default constructor.
Definition: bresenham_line.h:78
value_type operator*() const
De-reference operator.
Definition: bresenham_line.h:123
Definition: bresenham_line.h:52
const_iterator end() const
Get a const_iterator to one past the last coordinate.
Definition: bresenham_line.h:215
const_iterator begin()
Definition: bresenham_line.h:205
friend bool operator!=(const bresenham_line &lhs, const bresenham_line &rhs)
Inequality operator.
Definition: bresenham_line.h:262
bresenham_line(T first_x, T first_y, T last_x, T last_y)
Definition: bresenham_line.h:178
bresenham_line(etl::coordinate_2d< T > first_, etl::coordinate_2d< T > last_)
Definition: bresenham_line.h:169
void reset(T first_x, T first_y, T last_x, T last_y)
Definition: bresenham_line.h:196
etl::coordinate_2d< T > value_type
Standard container types.
Definition: bresenham_line.h:58
const_reference back() const
Get the last coordinate.
Definition: bresenham_line.h:231
friend bool operator==(const bresenham_line &lhs, const bresenham_line &rhs)
Equality operator.
Definition: bresenham_line.h:254
bresenham_line()
Constructor.
Definition: bresenham_line.h:160
void reset(etl::coordinate_2d< T > first_, etl::coordinate_2d< T > last_)
Definition: bresenham_line.h:187
size_t size() const
Get the size of the series.
Definition: bresenham_line.h:239
const_reference front() const
Get the first coordinate.
Definition: bresenham_line.h:223
bitset_ext
Definition: absolute.h:38
integer_sequence
Definition: utility.h:537
iterator
Definition: iterator.h:399