Merge pull request #256 from vvakame/impl-ts
[jackhill/mal.git] / cpp / StaticList.h
CommitLineData
8bd091e3
ST
1#ifndef INCLUDE_STATICLIST_H
2#define INCLUDE_STATICLIST_H
3
4template<typename T>
5class StaticList
6{
7public:
8 StaticList() : m_head(NULL) { }
9
10 class Iterator;
11 Iterator begin() { return Iterator(m_head); }
12 Iterator end() { return Iterator(NULL); }
13
14 class Node {
15 public:
16 Node(StaticList<T>& list, T item)
17 : m_item(item), m_next(list.m_head) {
18 list.m_head = this;
19 }
20
21 private:
22 friend class Iterator;
23 T m_item;
24 Node* m_next;
25 };
26
27 class Iterator {
28 public:
29 Iterator& operator ++ () {
30 m_node = m_node->m_next;
31 return *this;
32 }
33
34 T& operator * () { return m_node->m_item; }
35 bool operator != (const Iterator& that) {
36 return m_node != that.m_node;
37 }
38
39 private:
40 friend class StaticList<T>;
41 Iterator(Node* node) : m_node(node) { }
42 Node* m_node;
43 };
44
45private:
46 friend class Node;
47 Node* m_head;
48};
49
50#endif // INCLUDE_STATICLIST_H