Iterator.List.tlh 3.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150
  1. #pragma once
  2. #include <list>
  3. #include "Iterator.Base.tlh"
  4. #include "Iterator.Sequence.tlh"
  5. //-----------------------------------------------------------------------------
  6. // Iterator
  7. // list - 常量
  8. //-----------------------------------------------------------------------------
  9. namespace Iterator
  10. {
  11. template <typename T>
  12. class _L_ConstIterator : public __SequenceIterator <typename std::list <T>::const_iterator>
  13. {
  14. typedef __SequenceIterator <typename std::list <T>::const_iterator> inherited;
  15. public:
  16. using value_type = typename std::list <T>::value_type;
  17. using reference = typename std::list <T>::reference;
  18. using const_reference = typename std::list <T>::const_reference;
  19. using data_type = const_reference;
  20. using deref_type = value_type;
  21. public:
  22. // 构造一个全空的迭代器, 用于容器指针为空的情形
  23. _L_ConstIterator () : inherited ()
  24. {
  25. }
  26. _L_ConstIterator (const std::list <T> & ar)
  27. {
  28. InitFrom (ar);
  29. }
  30. _L_ConstIterator (const _L_ConstIterator & from)
  31. {
  32. CopyAssign (from);
  33. }
  34. _L_ConstIterator (_L_ConstIterator && from)
  35. {
  36. MoveAssign (from);
  37. }
  38. ~_L_ConstIterator () {}
  39. public:
  40. inline _L_ConstIterator & operator = (const _L_ConstIterator & from)
  41. {
  42. CopyAssign (from);
  43. return (*this);
  44. }
  45. inline _L_ConstIterator & operator = (_L_ConstIterator && from)
  46. {
  47. MoveAssign (from);
  48. return (*this);
  49. }
  50. public:
  51. inline data_type Current () { return (*(this->m_stdIter)); }
  52. inline data_type operator () () { return Current (); }
  53. inline data_type operator * () { return Current (); }
  54. protected:
  55. void InitFrom (const std::list <T> & ar)
  56. {
  57. this->m_stdIter = this->m_stdBegin = ar.cbegin ();
  58. this->m_stdEnd = ar.cend ();
  59. this->m_Count = (int)ar.size ();
  60. this->m_Index = 0;
  61. }
  62. };
  63. };
  64. //-----------------------------------------------------------------------------
  65. // Iterator
  66. // list - 变量
  67. //-----------------------------------------------------------------------------
  68. namespace Iterator
  69. {
  70. template <typename T>
  71. class _L_Iterator : public __SequenceIterator <typename std::list <T>::iterator>
  72. {
  73. using inherited = __SequenceIterator <typename std::list <T>::iterator>;
  74. public:
  75. using value_type = typename std::list <T>::value_type;
  76. using reference = typename std::list <T>::reference;
  77. using data_type = reference;
  78. using deref_type = value_type;
  79. public:
  80. // 构造一个全空的迭代器, 用于容器指针为空的情形
  81. _L_Iterator () : inherited ()
  82. {
  83. }
  84. _L_Iterator (std::list <T> & ar)
  85. {
  86. }
  87. _L_Iterator (const _L_Iterator & from)
  88. {
  89. inherited::CopyAssign (from);
  90. }
  91. _L_Iterator (_L_Iterator && from)
  92. {
  93. inherited::MoveAssign (from);
  94. }
  95. ~_L_Iterator () {}
  96. public:
  97. inline _L_Iterator & operator = (const _L_Iterator & from)
  98. {
  99. CopyAssign (from);
  100. return (*this);
  101. }
  102. inline _L_Iterator & operator = ( _L_Iterator && from)
  103. {
  104. MoveAssign (from);
  105. return (*this);
  106. }
  107. public:
  108. inline data_type Current () { return (*(this->m_stdIter)); }
  109. inline data_type operator () () { return Current (); }
  110. inline data_type operator * () { return Current (); }
  111. protected:
  112. void InitFrom (std::list <T> & ar)
  113. {
  114. this->m_stdIter = this->m_stdBegin = ar.begin ();
  115. this->m_stdEnd = ar.end ();
  116. this->m_Count = (int)ar.size ();
  117. this->m_Index = 0;
  118. }
  119. };
  120. }