14#ifndef LIST_ITERATOR_H
15#define LIST_ITERATOR_H
21template <
typename ITERATOR,
typename CLASSNAME>
29 return static_cast<CLASSNAME *
>(ITERATOR::data());
32 return static_cast<CLASSNAME *
>(ITERATOR::data_relative(offset));
35 return static_cast<CLASSNAME *
>(ITERATOR::forward());
38 return static_cast<CLASSNAME *
>(ITERATOR::extract());
42template <
typename CONTAINER,
typename ITERATOR,
typename CLASSNAME>
54 CONTAINER::internal_clear([](
void *link) {
delete reinterpret_cast<CLASSNAME *
>(link);});
59 void deep_copy(
const U *src_list, CLASSNAME *(*copier)(
const CLASSNAME *)) {
63 for (from_it.mark_cycle_pt(); !from_it.cycled_list(); from_it.
forward())
64 to_it.add_after_then_move((*copier)(from_it.
data()));
CLASSNAME * data_relative(int8_t offset)
void deep_copy(const U *src_list, CLASSNAME *(*copier)(const CLASSNAME *))
X_LIST & operator=(const X_LIST &)=delete
X_LIST(const X_LIST &)=delete