Advertisement
Guest User

Untitled

a guest
Sep 20th, 2017
51
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.76 KB | None | 0 0
  1. #ifndef MY_INTERFACES
  2. #define MY_INTERFACES
  3.  
  4. template<class T>
  5. class IEnumerator
  6. {
  7. public:
  8. virtual bool MoveNext() = 0;
  9. virtual void Reset() = 0;
  10. virtual T Current() = 0;
  11. virtual ~IEnumerator() {}
  12. };
  13.  
  14. template<class T>
  15. class IEnumerable
  16. {
  17. public:
  18. virtual IEnumerator<T> GetEnumerator()
  19. {
  20. return (IEnumerator<T>)*this;
  21. }
  22. };
  23.  
  24. template<class T>
  25. class ICollection : public IEnumerable<T>
  26. {
  27. public:
  28. virtual int Count()
  29. {
  30. IEnumerator<T> e = GetEnumerator();
  31. e.Reset();
  32. int i = 0;
  33. while(e.MoveNext()) i++;
  34. return i + 1;
  35. }
  36. virtual bool IsReadOnly() = 0;
  37. virtual void Add(T item) = 0;
  38. virtual void Clear()
  39. {
  40. IEnumerator<T> e = GetEnumerator();
  41. e.Reset();
  42. do
  43. {
  44. Remove(e.Current());
  45. }
  46. while(e.MoveNext());
  47. }
  48. virtual bool Contains(T item)
  49. {
  50. IEnumerator<T> e = GetEnumerator();
  51. e.Reset();
  52. do
  53. {
  54. if(e.Current() == item)
  55. return true;
  56. }
  57. while (e.MoveNext());
  58. return false;
  59. }
  60. virtual void CopyTo(T *arr, int index, int count)
  61. {
  62. int i = 0;
  63. IEnumerator<T> e = GetEnumerator();
  64. e.Reset();
  65. do
  66. {
  67. arr[index + i++] = e.Current();
  68. }
  69. while (e.MoveNext() && i < count);
  70. }
  71. virtual bool Remove(T item) = 0;
  72. };
  73.  
  74. template<class T>
  75. class IComparer
  76. {
  77. public:
  78. virtual int Compare(T a, T b) = 0;
  79. }
  80.  
  81. template<class T>
  82. class IList : public ICollection<T>
  83. {
  84. public:
  85. virtual T &operator[](int index)
  86. {
  87. int i = 0;
  88. IEnumerator<T> e = GetEnumerator();
  89. e.Reset();
  90. do
  91. {
  92. if(i++ == index)
  93. return e.Current();
  94. }
  95. while (e.MoveNext());
  96.  
  97. throw "index";
  98. }
  99.  
  100. virtual int IndexOf(T item)
  101. {
  102. IEnumerator<T> e = GetEnumerator();
  103. e.Reset();
  104. int i = 0;
  105. do
  106. {
  107. if(e.Current() == item)
  108. return i;
  109. }
  110. while (e.MoveNext());
  111. return -1;
  112. }
  113.  
  114. virtual void Insert(int index, T item) = 0;
  115. virtual void RemoveAt(int index) = 0;
  116. };
  117. #endif
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement