1
1
mirror of https://github.com/kanaka/mal.git synced 2024-10-27 14:52:16 +03:00
mal/impls/cpp/StaticList.h
Joel Martin 8a19f60386 Move implementations into impls/ dir
- Reorder README to have implementation list after "learning tool"
  bullet.

- This also moves tests/ and libs/ into impls. It would be preferrable
  to have these directories at the top level.  However, this causes
  difficulties with the wasm implementations which need pre-open
  directories and have trouble with paths starting with "../../". So
  in lieu of that, symlink those directories to the top-level.

- Move the run_argv_test.sh script into the tests directory for
  general hygiene.
2020-02-10 23:50:16 -06:00

51 lines
1.0 KiB
C++

#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