6#ifndef DUNE_TYPETREE_FIXEDCAPACITYSTACK_HH
7#define DUNE_TYPETREE_FIXEDCAPACITYSTACK_HH
21 class FixedCapacityStackView
29 Impl(T* data, std::size_t capacity)
37 const std::size_t _capacity;
40 FixedCapacityStackView(Impl& impl)
46 std::size_t size()
const
51 std::size_t capacity()
const
53 return _impl._capacity;
58 return _impl._size == 0;
63 return _impl._size == _impl._capacity;
66 void push_back(
const T& t)
69 _impl._data[_impl._size++] = t;
81 return _impl._data[_impl._size-1];
87 return _impl._data[_impl._size-1];
93 return _impl._data[0];
96 const T& front()
const
99 return _impl._data[0];
102 T& operator[](std::size_t k)
104 assert(k < _impl._size);
105 return _impl._data[k];
108 const T& operator[](std::size_t k)
const
110 assert(k < _impl._size);
111 return _impl._data[k];
120 template<
typename T, std::
size_t capacity>
121 class FixedCapacityStack
122 :
private std::array<T,capacity>
123 ,
private FixedCapacityStackView<T>::Impl
124 ,
public FixedCapacityStackView<T>
127 typedef FixedCapacityStackView<T> view_base;
131 using view_base::back;
132 using view_base::front;
133 using view_base::size;
134 using view_base::operator[];
137 : FixedCapacityStackView<T>::Impl(&(static_cast<
std::array<T,capacity>&>(*this)[0]),capacity)
138 , FixedCapacityStackView<T>(static_cast<typename FixedCapacityStackView<T>::Impl&>(*this))
144 FixedCapacityStack& operator=(
const FixedCapacityStack&);