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&);