31#ifndef ETL_MULTI_LOOP_INCLUDED
32#define ETL_MULTI_LOOP_INCLUDED
101 if (inner != ETL_NULLPTR)
126 if (inner != ETL_NULLPTR)
137 bool completed()
const
139 return has_completed;
167 for (start(); !completed();
next())
179 virtual void start() = 0;
187 : has_completed(true)
199 while (range != ETL_NULLPTR)
206 range = range->inner;
220 while (range->inner != ETL_NULLPTR)
222 range = range->inner;
236 template <
typename T>
249 typedef T value_type;
251 virtual void operator()(value_type&
value) = 0;
259 typedef T value_type;
261 virtual void operator()(value_type&
value)
272 typedef T value_type;
279 virtual void operator()(value_type&
value)
284 const value_type step_value;
292 typedef T value_type;
294 virtual void operator()(value_type&
value)
305 typedef T value_type;
312 virtual void operator()(value_type&
value)
317 const value_type step_value;
325 typedef T value_type;
327 virtual bool operator()(
const value_type&
lhs,
const value_type&
rhs)
const = 0;
335 typedef T value_type;
337 virtual bool operator()(
const value_type&
lhs,
const value_type&
rhs)
const ETL_OVERRIDE
348 typedef T value_type;
350 virtual bool operator()(
const value_type&
lhs,
const value_type&
rhs)
const ETL_OVERRIDE
361 typedef T value_type;
363 virtual bool operator()(
const value_type&
lhs,
const value_type&
rhs)
const ETL_OVERRIDE
379 , p_stepper(&default_stepper)
380 , p_compare(&default_compare)
396 , p_compare(&default_compare)
411 , p_stepper(&default_stepper)
455 if (inner != ETL_NULLPTR)
461 has_completed = !(*p_compare)(current, last);
469 has_completed =
false;
471 if (inner != ETL_NULLPTR)
475 if (inner->completed())
477 has_completed = step();
482 has_completed = step();
501 (*p_stepper)(current);
510 return has_rolled_over;
514 multi_range(const multi_range&) ETL_DELETE;
515 multi_range& operator =(const multi_range&) ETL_DELETE;
521 step_type* p_stepper;
522 forward_step default_stepper;
524 compare_type* p_compare;
525 not_equal_compare default_compare;
The base class for multi_range.
Definition multi_range.h:72
virtual void next()=0
Pure virtual functions.
imulti_range()
Constructor.
Definition multi_range.h:186
size_t number_of_iterations()
Gets the total number of iterations over all ranges, from this range inclusive.
Definition multi_range.h:163
void set_last(imulti_range *next)
Set the inner range of the last linked range.
Definition multi_range.h:215
void detach_all()
Unlinks this and all inner ranges.
Definition multi_range.h:124
bool is_valid(imulti_range &inner_range)
Checks that there are no circular references.
Definition multi_range.h:195
imulti_range & insert(imulti_range &inner_range)
Insert after this range.
Definition multi_range.h:78
void detach()
Unlinks this range from its inner.
Definition multi_range.h:116
size_t number_of_ranges() const
Gets the total number of ranges, from this range inclusive.
Definition multi_range.h:145
imulti_range & append(imulti_range &inner_range)
Append to the most inner range.
Definition multi_range.h:97
Circular reference exception.
Definition multi_range.h:59
Exception for the multi_range.
Definition multi_range.h:46
Definition multi_range.h:238
const_reference end()
Definition multi_range.h:445
void start() ETL_OVERRIDE
Initialises the ranges to the starting values.
Definition multi_range.h:453
multi_range(value_type first_, value_type last_)
Definition multi_range.h:374
multi_range(value_type first_, value_type last_, compare_type &compare_)
Definition multi_range.h:405
const_reference begin()
Get a const reference to the starting value of the range.
Definition multi_range.h:436
multi_range(value_type first_, value_type last_, step_type &stepper_, compare_type &compare_)
Definition multi_range.h:421
const_reference value() const
Returns a const reference to the current range value.
Definition multi_range.h:489
void next() ETL_OVERRIDE
Step to the next logical values in the ranges.
Definition multi_range.h:467
multi_range(value_type first_, value_type last_, step_type &stepper_)
Definition multi_range.h:389
#define ETL_ASSERT(b, e)
Definition error_handler.h:356
Definition exception.h:47
bitset_ext
Definition absolute.h:38
Definition multi_range.h:324
Definition multi_range.h:271
Definition multi_range.h:258
Definition multi_range.h:360
Definition multi_range.h:347
Definition multi_range.h:334
Definition multi_range.h:304
Definition multi_range.h:291
Definition multi_range.h:248
pair holds two objects of arbitrary type
Definition utility.h:164