#ifndef _RSTL_LIST_HPP
#define _RSTL_LIST_HPP

#include "types.h"

#include "rmemory_allocator.hpp"

namespace rstl {
template < typename T, typename Alloc = rmemory_allocator >
class list {
public:
  ~list() {
    node* cur = x4_start;
    while (cur != nullptr) {
      delete cur->x8_item;
      cur = cur->x4_next;
    }
  }

private:
  struct node {
    node* x0_prev;
    node* x4_next;
    union {
      T* x8_item;
      u32 x8_count;
    };
  };

  Alloc x0_allocator;
  node* x4_start;
  node* x8_end;
  node xc_empty;
};
} // namespace rstl

#endif