46 template <
class BaseIterator>
51 using value_type =
typename BaseIterator::value_type::element_type;
57 auto & val = BaseIterator::operator*();
58 mooseAssert(val,
"Null object");
64 auto & val = BaseIterator::operator[](n);
65 mooseAssert(val,
"Null object");
100 mooseAssert(
hasValue(i),
"Null object");
103 T &
operator[](
const std::size_t i) {
return const_cast<T &
>(std::as_const(*
this)[i]); }
133 return const_cast<T *
>(std::as_const(*this).queryValue(i));
144 void setPointer(
const std::size_t i, std::unique_ptr<T> && ptr)
146 mooseAssert(
size() > i,
"Invalid size");
155 mooseAssert(ptr,
"Null object");
156 return *
_values.emplace_back(std::move(ptr));
176 mooseAssert(
size() > i,
"Invalid size");
185 return const_cast<std::unique_ptr<T> &
>(std::as_const(*this).pointerValue(i));
188 friend void storeHelper<>(std::ostream & stream,
UniqueStorage<T> &,
void *);
189 friend void loadHelper<>(std::istream & stream,
UniqueStorage<T> &,
void *);
void loadHelper(std::istream &stream, UniqueStorage< T > &, void *)
UniqueStorage helper routine.
void storeHelper(std::ostream &stream, UniqueStorage< T > &, void *)
UniqueStorage helper routine.
Storage container that stores a vector of unique pointers of T, but represents most of the public fac...
UniqueStorage(UniqueStorage &&)=default
T * queryValue(const std::size_t i)
void clear()
Clears the underlying vector.
UniqueStorage & operator=(const UniqueStorage &)=delete
iterator begin()
Begin and end iterators to the underlying data.
T & operator[](const std::size_t i)
DereferenceIterator< typename values_type::const_iterator > const_iterator
const T * queryValue(const std::size_t i) const
std::unique_ptr< T > & pointerValue(const std::size_t i)
Returns a reference to the underlying unique pointer at index i.
const_iterator begin() const
void resize(const std::size_t size)
Resizes the underlying vector.
DereferenceIterator< typename values_type::iterator > iterator
typename std::vector< std::unique_ptr< T > > values_type
bool hasValue(const std::size_t i) const
void setPointer(const std::size_t i, std::unique_ptr< T > &&ptr)
Sets the underlying unique_ptr at index i to ptr.
values_type _values
The underlying data.
UniqueStorage(const UniqueStorage &mp)=delete
T & addPointer(std::unique_ptr< T > &&ptr)
Adds the given object in ptr to the storage.
const_iterator end() const
const std::unique_ptr< T > & pointerValue(const std::size_t i) const
Returns a read-only reference to the underlying unique pointer at index i.
const T & operator[](const std::size_t i) const
Iterator that adds an additional dereference to BaseIterator.
DereferenceIterator(const BaseIterator &it)
reference operator[](size_t n) const
reference operator*() const
pointer operator->() const
typename BaseIterator::value_type::element_type value_type