1
1
mirror of https://github.com/kanaka/mal.git synced 2024-11-11 00:52:44 +03:00
mal/cpp/StaticList.h

51 lines
1.0 KiB
C
Raw Normal View History

2015-03-26 14:25:50 +03:00
#ifndef INCLUDE_STATICLIST_H
#define INCLUDE_STATICLIST_H
template<typename T>
class StaticList
{
public:
StaticList() : m_head(NULL) { }
class Iterator;
Iterator begin() { return Iterator(m_head); }
Iterator end() { return Iterator(NULL); }
class Node {
public:
Node(StaticList<T>& list, T item)
: m_item(item), m_next(list.m_head) {
list.m_head = this;
}
private:
friend class Iterator;
T m_item;
Node* m_next;
};
class Iterator {
public:
Iterator& operator ++ () {
m_node = m_node->m_next;
return *this;
}
T& operator * () { return m_node->m_item; }
bool operator != (const Iterator& that) {
return m_node != that.m_node;
}
private:
friend class StaticList<T>;
Iterator(Node* node) : m_node(node) { }
Node* m_node;
};
private:
friend class Node;
Node* m_head;
};
#endif // INCLUDE_STATICLIST_H