6 #ifndef CMR_LIST_INCLUDED
7 #define CMR_LIST_INCLUDED
56 *
this =
cont().erase(*
this);
92 *
this =
cont().insert(i, v);
103 *
this =
cont().insert(i);
126 return *(
const T*)get_data();
132 List(
const List<T, A>& original)
136 List<T, A>& operator=(
const List<T, A>& l)
138 return assign(l.begin(), l.end());
146 typedef T value_type;
235 return BaseList::insert(pos,
sizeof(T), A::constructor, (
const Byte*)&value);
244 return BaseList::insert(pos,
sizeof(T), A::constructor);
254 return BaseList::insert(pos,
sizeof(T), A::constructor, (
const Byte*)&value);
263 return BaseList::insert(pos,
sizeof(T), A::constructor);
273 BaseList::insert(pos, first, last,
sizeof(T), A::constructor);
281 BaseList::insert(
BaseList::end(),
sizeof(T), A::constructor, (
const Byte*)&value);
296 BaseList::erase(
begin(), A::destructor);
304 BaseList::erase(--tmp , A::destructor);
313 return *(T*)BaseList::push_back_once(
sizeof(T), A::constructor, A::comparator, (
const Byte*)&value);
322 Byte* data = BaseList::insert(pos,
sizeof(T), A::constructor).get_data();
332 return *(T*)BaseList::insert(
BaseList::end(),
sizeof(T), A::constructor, (
const Byte*)&value).get_data();
341 return BaseList::remove_at(i, A::destructor);
350 return (
iterator)BaseList::erase(pos, A::destructor);
360 return (
iterator)BaseList::erase(first, last, A::destructor);
369 return (
List<T, A>&)BaseList::remove((
const Byte*)&value, A::comparator, A::destructor);
378 return (
List<T, A>&)BaseList::remove((
const Byte*)pvalue, A::comparator, A::destructor);
387 return (
List<T, A>&)BaseList::remove((FunctionFilter)pred, A::destructor);
395 return (
List<T, A>&)BaseList::unique(A::comparator, A::destructor);
404 return (
List<T, A>&)BaseList::unique((FunctionComparator)pred, A::destructor);
413 return merge(original, A::compare);
423 return (
List<T, A>&)BaseList::merge(original, (FunctionComparator)comp);
431 return (
List<T, A>&)BaseList::sort(A::comparator);
440 return (
List<T, A>&)BaseList::sort((FunctionComparator)comp);
466 return (
iterator)BaseList::get_at(i);
473 bool find(
const T& value)
const
475 return BaseList::find((
const Byte*)&value, A::comparator);
482 bool find(
bool (*pred)(
const T&))
const
484 return BaseList::find((FunctionFilter)pred);
496 return BaseList::compare(l, A::comparator);
503 return BaseList::compare(l, A::comparator) == 0;
508 bool operator< (const List<T, A>& l)
const
510 return BaseList::compare(l, A::comparator) < 0;
517 return BaseList::compare(l, A::comparator) > 0;
528 BaseList::assign(first, last, A::constructor, A::destructor,
sizeof(T));
547 return (
List<T, A>&)BaseList::splice(original, A::destructor);
557 return (
List<T, A>&)BaseList::splice(pos, original);
564 BaseList::clear(A::destructor);
588 CMREXD
int write(
const Path& file)
const;
625 BaseList::transfer(pos, first, last);
631 inline bool __trueset(
bool& b,
bool v)
641 #define cmr_foreach(T, V, L) \
642 if (bool continue__ = true) \
643 for (commore::List<T>::iterator i__ = L.begin(); continue__ && i__; i__++) \
644 if (bool b__ = true) if (__trueset(continue__, false)) \
645 for (T& V = *i__;b__; b__ = false,continue__ = true)
651 #define cmr_const_foreach(T, V, L) \
652 if (bool continue__ = true) \
653 for (commore::List<T>::const_iterator i__ = L.begin(); continue__ && i__; i__++) \
654 if (bool b__ = true) if (__trueset(continue__, false)) \
655 for (const T& V = *i__;b__; b__ = false,continue__ = true)
663 #define cmr_foreach_enum(T, V, L, I) \
664 if (bool continue__ = true) \
665 if (int I = 1) if (I--)\
666 for (commore::List<T>::iterator i__ = L.begin(); continue__ && i__; i__++, I++) \
667 if (bool b__ = true) if (__trueset(continue__, false))\
668 for (T& V = *i__;b__; b__ = false,continue__ = true)
675 #define cmr_const_foreach_enum(T, V, L, I) \
676 if (bool continue__ = true) \
677 if (int I = 1) if (I--)\
678 for (commore::List<T>::const_iterator i__ = L.begin(); continue__ && i__; i__++, I++) \
679 if (bool b__ = true) if (__trueset(continue__, false))\
680 for (const T& V = *i__;b__; b__ = false,continue__ = true)
687 #define cmr_foreach_while(T, V, L, M) \
688 if (bool continue__ = true) \
689 for (commore::List<T>::iterator i__ = L.begin(); M && i__; i__++) \
690 if (bool b__ = true) if (__trueset(continue__, false)) \
691 for (T& V = *i__;b__; b__ = false,continue__ = true)
693 #define cmr_const_foreach_while(T, V, L, M) \
694 if (bool continue__ = true) \
695 for (commore::List<T>::const_iterator i__ = L.begin(); M && i__; i__++) \
696 if (bool b__ = true) if (__trueset(continue__, false)) \
697 for (const T& V = *i__;b__; b__ = false,continue__ = true)
703 #define cmr_remove_where(T, V, L, M) \
704 if (bool keep__ = true) \
705 if (bool continue__ = true) \
706 for (commore::List<T>::iterator i__ = L.begin(); continue__ && i__; keep__ ? i__++ : i__.erase()) \
707 if (bool b__ = true) if (__trueset(continue__, false)) \
708 for (T& V = *i__;b__; b__ = false,continue__ = true,(keep__ = !(M)))\
714 #define cmr_move_where(T, V, S, D, M) \
715 if (bool keep__ = true) \
716 if (bool continue__ = true) \
717 for (commore::List<T>::iterator i__ = S.begin(); continue__ && i__; keep__ ? i__++ : D.move_before(D.end(), i__++)) \
718 if (bool b__ = true) if (__trueset(continue__, false)) \
719 for (T& V = *i__;b__; b__ = false,continue__ = true,(keep__ = !(M)))\
void pop_front()
Definition: List.h:294
iterator insert(size_t pos)
Definition: List.h:261
const T & front() const
Definition: List.h:207
const_iterator cbegin() const
Definition: List.h:182
static void transfer(iterator pos, iterator first, iterator last)
Definition: List.h:623
Definition: BaseList.h:21
const_iterator get_at(size_t i) const
Definition: List.h:455
iterator insert(size_t pos, const T &value)
Definition: List.h:252
T & front()
Definition: List.h:198
void clear()
Definition: List.h:562
List< T, A > & unique(int(*pred)(const T &, const T &))
Definition: List.h:402
const T & operator*()
Definition: List.h:124
T & push_back_once(const T &value)
Definition: List.h:311
iterator erase(iterator pos)
Definition: List.h:348
List< T, A > & swap(List< T, A > &original)
Definition: List.h:536
List< T, A > & merge(List< T, A > &original)
Definition: List.h:411
int compare(const List< T, A > &l) const
Definition: List.h:494
iterator erase(iterator first, iterator last)
Definition: List.h:358
List< T, A > & cont()
Definition: List.h:46
List< T, A > & sort()
Definition: List.h:429
iterator & erase()
Definition: List.h:54
CMREXD int write(const Path &file) const
void insert(iterator pos, const_iterator first, const_iterator last)
Definition: List.h:271
CMREXD AString & to_xml_string(AString &s) const
T & back()
Definition: List.h:215
List< T, A > & unique()
Definition: List.h:393
iterator get_at(size_t i)
Definition: List.h:464
iterator insert(iterator pos)
Definition: List.h:242
const_iterator cend() const
Definition: List.h:190
List< T, A > & splice(List< T, A > &original)
Definition: List.h:545
bool find(const T &value) const
Definition: List.h:473
CMREXD int read(const Path &file)
T & operator*()
Definition: List.h:39
void pop_back()
Definition: List.h:301
bool operator>(const List< T, A > &l) const
Definition: List.h:515
T & insert()
Definition: List.h:75
iterator insert(iterator pos, const T &value)
Definition: List.h:233
List< T, A > & remove_if(bool(*pred)(const T &))
Definition: List.h:385
bool operator==(const List< T, A > &l) const
Definition: List.h:501
const_iterator begin() const
Definition: List.h:167
T & add()
Definition: List.h:99
Definition: BaseList.h:92
T & add()
Definition: List.h:319
iterator begin()
Definition: List.h:153
List< T, A > & sort(int(*comp)(const T &, const T &))
Definition: List.h:438
CMREXD long from_xml_string(const AString &s)
List< T, A > & assign(const_iterator first, const_iterator last)
Definition: List.h:526
List< T, A > & merge(List< T, A > &original, int(*comp)(const T &, const T &))
Definition: List.h:421
T & add(const T &value)
Definition: List.h:330
CMREXD long write_xml(OBStream &o) const
List< T, A > & reverse()
Definition: List.h:446
iterator & insert(const T &v)
Definition: List.h:64
bool remove_at(size_t i)
Definition: List.h:339
unsigned char Byte
Definition: Type.h:64
iterator end()
Definition: List.h:160
Definition: IOBStream.h:166
void push_back(const T &value)
Definition: List.h:279
const_iterator end() const
Definition: List.h:174
void push_front(const T &value)
Definition: List.h:287
List< T, A > & splice(iterator pos, List< T, A > &original)
Definition: List.h:555
Definition: IOBStream.h:29
bool find(bool(*pred)(const T &)) const
Definition: List.h:482
Definition: BaseList.h:30
const T & back() const
Definition: List.h:223
iterator & add(const T &v)
Definition: List.h:88
CMREXD long read_xml(IBStream &i)