46 template <
class BaseIterator>
51 using value_type =
typename BaseIterator::value_type::element_type;
58 mooseAssert(val,
"Null object");
64 auto & val = BaseIterator::operator[](n);
65 mooseAssert(val,
"Null object");
71 using iterator = DereferenceIterator<typename values_type::iterator>;
72 using const_iterator = DereferenceIterator<typename values_type::const_iterator>;
97 const T &
operator[](
const std::size_t i)
const 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 *);
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.
void loadHelper(std::istream &stream, UniqueStorage< T > &, void *)
UniqueStorage helper routine.
std::unique_ptr< T > & pointerValue(const std::size_t i)
Returns a reference to the underlying unique pointer at index i.
const_iterator end() const
DereferenceIterator(const BaseIterator &it)
void clear()
Clears the underlying vector.
const_iterator begin() const
Storage container that stores a vector of unique pointers of T, but represents most of the public fac...
void setPointer(const std::size_t i, std::unique_ptr< T > &&ptr)
Sets the underlying unique_ptr at index i to ptr.
iterator begin()
Begin and end iterators to the underlying data.
void storeHelper(std::ostream &stream, UniqueStorage< T > &, void *)
UniqueStorage helper routine.
void resize(const std::size_t size)
Resizes the underlying vector.
typename std::vector< std::unique_ptr< RestartableDataValue > > values_type
T * queryValue(const std::size_t i)
const T * queryValue(const std::size_t i) const
DereferenceIterator< typename values_type::iterator > iterator
reference operator[](size_t n) const
const T & operator[](const std::size_t i) const
DereferenceIterator< typename values_type::const_iterator > const_iterator
typename BaseIterator::value_type::element_type value_type
Iterator that adds an additional dereference to BaseIterator.
infix_ostream_iterator< T, charT, traits > & operator*()
pointer operator->() const
UniqueStorage & operator=(const UniqueStorage &)=delete
T & operator[](const std::size_t i)
values_type _values
The underlying data.
bool hasValue(const std::size_t i) const
reference operator*() const
T & addPointer(std::unique_ptr< T > &&ptr)
Adds the given object in ptr to the storage.