1#ifndef AMPGEN_DYNAMICCONTAINER_H
2#define AMPGEN_DYNAMICCONTAINER_H
18 template <
class TYPE,
class CONTAINER_TYPE = std::vector<TYPE>>
29 TYPE*
operator->()
const {
return &( ( *m_container )[m_pos] ); }
30 TYPE
operator*()
const {
return ( *m_container )[m_pos]; }
33 if ( m_pos + 1 % m_container->m_buffer.size() == 0 && m_pos + 1 != m_container->m_totalSize ) {
34 m_container->refresh();
36 return Iterator( m_pos + 1, m_container );
41 if ( m_pos % m_container->m_buffer.size() == 0 && m_pos % m_container->m_totalSize ) {
42 m_container->refresh();
50 CONTAINER_TYPE m_buffer;
52 std::function<void( CONTAINER_TYPE& )> m_generator;
54 template <
class GENERATOR>
DynamicContainer(
const size_t& totalSize,
const GENERATOR& generator ) :
55 m_totalSize( totalSize ), m_generator( generator )
61 const size_t&
size()
const {
return m_totalSize; }
62 TYPE&
operator[](
const size_t& pos ) {
return m_buffer[pos % m_buffer.size()]; }
63 const TYPE&
operator[](
const size_t& pos )
const {
return m_buffer[pos % m_buffer.size()]; }
67 m_generator( m_buffer );
69 CONTAINER_TYPE&
buffer() {
return m_buffer; }
TYPE * operator->() const
bool operator!=(const Iterator &rhs) const
Iterator operator++() const
Iterator(const size_t &pos, DynamicContainer *parent)
bool operator==(const Iterator &rhs) const
DynamicContainer(const size_t &totalSize, const GENERATOR &generator)
const size_t & size() const
CONTAINER_TYPE & buffer()
TYPE & operator[](const size_t &pos)
const TYPE & operator[](const size_t &pos) const