casacore
|
This class emplements a static (but run-time) sized array. More...
#include <Storage.h>
Classes | |
struct | conjunction |
struct | conjunction< B1 > |
struct | conjunction< B1, Bn... > |
struct | disjunction |
Used by template code above These are already in C++17, but currently only using C++11... More... | |
struct | disjunction< B1 > |
struct | disjunction< B1, Bn... > |
Public Member Functions | |
Storage () | |
Construct an empty Storage. | |
Storage (std::size_t n) | |
Construct Storage with a given size. | |
Storage (std::size_t n, const T &val) | |
Construct Storage with a given size. | |
template<typename InputIterator > | |
Storage (InputIterator startIter, InputIterator endIter) | |
Construct Storage from a range. | |
~Storage () noexcept | |
Destructs the elements and deallocates the data. | |
T * | data () |
Return a pointer to the storage data. | |
const T * | data () const |
size_t | size () const |
Size of the data, zero if empty. | |
bool | is_shared () const |
Whether this Storage owns its data. | |
Storage (const Storage< T > &)=delete | |
Storage (Storage< T > &&)=delete | |
Storage & | operator= (const Storage &)=delete |
Storage & | operator= (Storage &&)=delete |
Static Public Member Functions | |
static std::unique_ptr< Storage< T > > | MakeFromMove (T *startIter, T *endIter) |
Construct Storage from a range by moving. | |
static std::unique_ptr< Storage< T > > | MakeFromSharedData (T *existingData, size_t n) |
Construct a Storage from existing data. | |
static std::unique_ptr< Storage< T > > | MakeUninitialized (size_t n) |
Construct a Storage with uninitialized data. | |
Private Member Functions | |
Storage (T *startIter, T *endIter, std::false_type, std::true_type) | |
Moving range constructor implementation. | |
template<typename InputIterator > | |
Storage (InputIterator startIter, InputIterator endIter, std::false_type) | |
Copying range constructor implementation for non-integral types. | |
template<typename Integral > | |
Storage (Integral n, Integral val, std::true_type) | |
Copying range constructor implementation for integral types. | |
T * | construct (size_t n) |
These methods allocate the storage and construct the elements. | |
T * | construct (size_t n, const T &val) |
template<typename InputIterator > | |
T * | construct_range (InputIterator startIter, InputIterator endIter) |
T * | construct_move (T *startIter, T *endIter) |
Private Attributes | |
T * | _data |
T * | _end |
bool | _isShared |
This class emplements a static (but run-time) sized array.
It is used in the Array class, and is necessary because std::vector specializes for bool. It holds the same functionality as a normal array, and enables allocation through different allocators similar to std::vector.
|
inline |
Construct an empty Storage.
Definition at line 20 of file Storage.h.
Referenced by casacore::arrays_internal::Storage< T >::MakeFromMove().
|
inline |
|
inline |
|
inline |
Construct Storage from a range.
The elements will be copy constructed from the given values. Note that this constructor can be chosen over of Storage(std::size_t, const T&, const Alloc) when T=size_t. Therefore, this constructor forwards to the appropriate constructor based on whether T is an integral.
|
inlinenoexcept |
Destructs the elements and deallocates the data.
Definition at line 94 of file Storage.h.
References casacore::arrays_internal::Storage< T >::_data, casacore::arrays_internal::Storage< T >::_isShared, and casacore::arrays_internal::Storage< T >::size().
|
delete |
|
delete |
|
inlineprivate |
|
inlineprivate |
|
inlineprivate |
|
inlineprivate |
These methods allocate the storage and construct the elements.
When any element constructor throws, the already constructed elements are destructed in reverse and the allocated storage is deallocated.
Definition at line 151 of file Storage.h.
References casacore::arrays_internal::Storage< T >::data().
|
inlineprivate |
Definition at line 175 of file Storage.h.
References casacore::arrays_internal::Storage< T >::data().
|
inlineprivate |
Definition at line 226 of file Storage.h.
References casacore::arrays_internal::Storage< T >::data().
|
inlineprivate |
Definition at line 200 of file Storage.h.
References casacore::arrays_internal::Storage< T >::data().
|
inline |
Return a pointer to the storage data.
Definition at line 106 of file Storage.h.
References casacore::arrays_internal::Storage< T >::_data.
Referenced by casacore::arrays_internal::Storage< T >::construct(), casacore::arrays_internal::Storage< T >::construct(), casacore::arrays_internal::Storage< T >::construct_move(), and casacore::arrays_internal::Storage< T >::construct_range().
|
inline |
Definition at line 107 of file Storage.h.
References casacore::arrays_internal::Storage< T >::_data.
|
inline |
Whether this Storage owns its data.
Returns true
when this Storage was constructed with MakeFromSharedData().
Definition at line 115 of file Storage.h.
References casacore::arrays_internal::Storage< T >::_isShared.
|
inlinestatic |
Construct Storage from a range by moving.
The elements will be move constructed from the given values.
Definition at line 62 of file Storage.h.
References casacore::arrays_internal::Storage< T >::Storage().
|
inlinestatic |
|
inlinestatic |
|
delete |
|
delete |
|
inline |
Size of the data, zero if empty.
Definition at line 111 of file Storage.h.
References casacore::arrays_internal::Storage< T >::_data, and casacore::arrays_internal::Storage< T >::_end.
Referenced by casacore::arrays_internal::Storage< T >::~Storage().
|
private |
Definition at line 268 of file Storage.h.
Referenced by casacore::arrays_internal::Storage< T >::data(), casacore::arrays_internal::Storage< T >::data(), casacore::arrays_internal::Storage< T >::size(), and casacore::arrays_internal::Storage< T >::~Storage().
|
private |
Definition at line 269 of file Storage.h.
Referenced by casacore::arrays_internal::Storage< T >::size().
|
private |
Definition at line 270 of file Storage.h.
Referenced by casacore::arrays_internal::Storage< T >::is_shared(), and casacore::arrays_internal::Storage< T >::~Storage().