ReverseIterator.VectorOfPtr.tlh 2.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123
  1. #pragma once
  2. #include "ReverseIterator.Base.tlh"
  3. #include "ReverseIterator.Random.tlh"
  4. #include "VectorOfPtr.tlh"
  5. //-----------------------------------------------------------------------------
  6. // VectorOfPtr
  7. // Æ«ÌØ»¯ - ³£Á¿
  8. //-----------------------------------------------------------------------------
  9. namespace ReverseIterator
  10. {
  11. template <typename T>
  12. class _VP_ConstIterator : public __RandomIterator <typename VectorOfPtr <T>::const_reverse_iterator>
  13. {
  14. typedef __RandomIterator <typename VectorOfPtr <T>::const_reverse_iterator> inherited;
  15. public:
  16. // using inherited::inherited; // VC2013 ±àÒë´íÎó
  17. // using __Iterator <VectorOfPtr <T>>::__Iterator <VectorOfPtr <T>>;
  18. _VP_ConstIterator () : inherited ()
  19. {
  20. }
  21. _VP_ConstIterator (const VectorOfPtr <T> & ar)
  22. {
  23. this->Iter = this->_begin = ar.crbegin ();
  24. this->_end = ar.crend ();
  25. this->m_Count = (int) ar.size ();
  26. this->m_Index = this->m_Count - 1;
  27. }
  28. _VP_ConstIterator (const _VP_ConstIterator & from)
  29. {
  30. CopyAssign (from);
  31. }
  32. _VP_ConstIterator (_VP_ConstIterator && from)
  33. {
  34. MoveAssign (from);
  35. }
  36. public:
  37. _VP_ConstIterator & operator = (const _VP_ConstIterator & from)
  38. {
  39. inherited::operator = (from);
  40. return (*this);
  41. }
  42. public:
  43. inline const T * Current ()
  44. {
  45. return (*(this->Iter)).get ();
  46. }
  47. inline const T * operator () (void) { return Current (); }
  48. inline const T * operator * (void) { return Current (); }
  49. };
  50. }
  51. //-----------------------------------------------------------------------------
  52. // VectorOfPtr
  53. // Æ«ÌØ»¯ - ±äÁ¿
  54. //-----------------------------------------------------------------------------
  55. namespace ReverseIterator
  56. {
  57. template <typename T>
  58. class _VP_Iterator : public __RandomIterator <typename VectorOfPtr <T>::reverse_iterator>
  59. {
  60. typedef __RandomIterator <typename VectorOfPtr <T>::reverse_iterator> inherited;
  61. public:
  62. // using inherited::inherited; // VC2013 ±àÒë´íÎó
  63. // using __Iterator <VectorOfPtr <T>>::__Iterator <VectorOfPtr <T>>;
  64. _VP_Iterator () : inherited ()
  65. {
  66. }
  67. _VP_Iterator (VectorOfPtr <T> & ar)
  68. {
  69. this->Iter = this->_begin = ar.rbegin ();
  70. this->_end = ar.rend ();
  71. this->m_Count = (int) ar.size ();
  72. this->m_Index = this->m_Count - 1;
  73. }
  74. _VP_Iterator (const _VP_Iterator & from)
  75. {
  76. CopyAssign (from);
  77. }
  78. _VP_Iterator (_VP_Iterator && from)
  79. {
  80. MoveAssign (from);
  81. }
  82. public:
  83. _VP_Iterator & operator = (const _VP_Iterator & from)
  84. {
  85. inherited::operator = (from);
  86. return (*this);
  87. }
  88. public:
  89. inline T * Current ()
  90. {
  91. return (*(this->Iter)).get ();
  92. }
  93. inline T * operator () (void) { return Current (); }
  94. inline T * operator * (void) { return Current (); }
  95. };
  96. }