Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- // Ring.h
- #ifndef RING.H
- #define RING.H
- #include <iostream>
- using namespace std;
- template<class T>
- class ring {
- unsigned int m_size;
- int m_pos;
- T *m_values;
- public:
- class iterator;
- public:
- ring(unsigned int size) : m_size(size), m_pos(0)
- {
- m_values = new T[m_size];
- }
- ~ring()
- {
- delete[] m_values;
- }
- void add(const T &val)
- {
- m_values[m_pos] = val;
- m_pos++;
- m_pos %= m_size;
- }
- T& get(int pos)
- {
- return m_values[pos];
- }
- iterator begin()
- {
- return iterator(0, *this);
- }
- iterator end()
- {
- return iterator(m_size, *this);
- }
- };
- template<class T>
- class ring<T>::iterator {
- int m_pos;
- ring &m_ring; // Removing & gives garbage output.
- public:
- iterator(int pos, ring& aRing) : m_pos(pos), m_ring(aRing){}
- bool operator!=(const iterator &other) const
- {
- return other.m_pos != m_pos;
- }
- iterator &operator++(int)
- {
- m_pos++;
- return *this;
- }
- iterator &operator++()
- {
- m_pos++;
- return *this;
- }
- T &operator*()
- {
- // return m_ring.m_values[m_pos];
- return m_ring.get(m_pos);
- }
- };
- #endif // RING
- // Ring_Buffer_Class.cpp
- #include <iostream>
- #include "ring.h"
- using namespace std;
- int main()
- {
- ring<string> textring(3);
- textring.add("one");
- textring.add("two");
- textring.add("three");
- textring.add("four");
- // C++ 98
- for(ring<string>::iterator it = textring.begin(); it != textring.end(); it++)
- {
- cout << *it << endl;
- }
- cout << endl;
- // C++11
- for(string value : textring)
- {
- cout << value << endl;
- }
- return 0;
- }
Add Comment
Please, Sign In to add comment