Advertisement
Guest User

Untitled

a guest
Sep 20th, 2017
74
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.18 KB | None | 0 0
  1. template<class T>
  2. class IEnumerator
  3. {
  4. public:
  5. virtual bool MoveNext() = 0;
  6. virtual void Reset() = 0;
  7. virtual T Current() = 0;
  8. virtual ~IEnumerator() {}
  9. };
  10.  
  11. template<class T>
  12. class IEnumerable
  13. {
  14. public:
  15. virtual IEnumerator<T> GetEnumerator()
  16. {
  17. return (IEnumerator<T>)*this;
  18. }
  19. };
  20.  
  21. template<class T>
  22. class ICollection : public IEnumerable<T>
  23. {
  24. public:
  25. virtual int Count()
  26. {
  27. IEnumerator<T> e = GetEnumerator();
  28. e.Reset();
  29. int i = 0;
  30. while(e.MoveNext()) i++;
  31. return i + 1;
  32. }
  33. virtual bool IsReadOnly() = 0;
  34. virtual void Add(T item) = 0;
  35. virtual void Clear()
  36. {
  37. IEnumerator<T> e = GetEnumerator();
  38. e.Reset();
  39. do
  40. {
  41. Remove(e.Current());
  42. }
  43. while(e.MoveNext());
  44. }
  45. virtual bool Contains(T item)
  46. {
  47. IEnumerator<T> e = GetEnumerator();
  48. e.Reset();
  49. do
  50. {
  51. if(e.Current() == item)
  52. return true;
  53. }
  54. while (e.MoveNext());
  55. return false;
  56. }
  57. virtual void CopyTo(T *arr, int index, int count)
  58. {
  59. int i = 0;
  60. IEnumerator<T> e = GetEnumerator();
  61. e.Reset();
  62. do
  63. {
  64. arr[index + i++] = e.Current();
  65. }
  66. while (e.MoveNext() && i < count);
  67. }
  68. virtual bool Remove(T item) = 0;
  69. };
  70.  
  71. template<class T>
  72. class IComparer
  73. {
  74. public:
  75. virtual int Compare(T a, T b) = 0;
  76. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement