16 #ifndef dealii_storage_h 17 #define dealii_storage_h 25 #include <type_traits> 56 "This class requires that the elements of type T are default constructible.");
72 add(
const T &element);
81 remove(
const std::size_t index);
124 std::deque<std::unique_ptr<T>>
data;
130 std::deque<std::unique_ptr<T>>
cache;
140 template <
typename T>
147 template <
typename T>
152 auto el = std::move(
data[ind]);
155 cache.push_back(std::move(el));
164 template <
typename T>
168 std::unique_ptr<T> new_el;
172 if (
cache.size() == 0)
175 new_el = std_cxx14::make_unique<T>(element);
181 new_el = std::move(
cache.back());
191 new_el = std::move(
data.back());
198 data.push_front(std::move(new_el));
207 template <
typename T>
216 template <
typename T>
225 template <
typename T>
234 template <
typename T>
243 template <
typename T>
255 #endif // dealii_storage_h
void remove(const std::size_t index)
#define AssertIndexRange(index, range)
T & operator[](const std::size_t index)
std::deque< std::unique_ptr< T > > data
#define Assert(cond, exc)
std::deque< std::unique_ptr< T > > cache
#define DEAL_II_NAMESPACE_CLOSE
void add(const T &element)
#define DEAL_II_NAMESPACE_OPEN
std::size_t max_size() const
FiniteSizeHistory(const std::size_t max_elements=0)
std::size_t max_n_elements
static ::ExceptionBase & ExcInternalError()