87 unsigned max_number_of_blocks)
89 m_block_size = block_size;
90 m_max_number_of_blocks = max_number_of_blocks;
92 assert(m_block_size > 0);
93 assert(m_max_number_of_blocks > 0);
95 m_current_position = 0;
97 m_storage.reserve(max_number_of_blocks);
99 m_storage[0].resize(block_size);
102 m_deleted.reserve(2*block_size);
108 if(m_deleted.empty())
110 if(m_current_position + 1 >= m_block_size)
112 m_storage.push_back( std::vector<T>() );
113 m_storage.back().resize(m_block_size);
114 m_current_position = 0;
116 result = & m_storage.back()[m_current_position];
117 ++m_current_position;
121 result = m_deleted.back();
122 m_deleted.pop_back();