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 (const Alloc &allocator) | |
Construct an empty Storage. More... | |
Storage (std::size_t n, const Alloc &allocator) | |
Construct Storage with a given size. More... | |
Storage (std::size_t n, const T &val, const Alloc &allocator) | |
Construct Storage with a given size. More... | |
template<typename InputIterator > | |
Storage (InputIterator startIter, InputIterator endIter, const Alloc &allocator) | |
Construct Storage from a range. More... | |
~Storage () noexcept | |
Destructs the elements and deallocates the data. More... | |
T * | data () |
Return a pointer to the storage data. More... | |
const T * | data () const |
size_t | size () const |
Size of the data, zero if empty. More... | |
const Alloc & | get_allocator () const |
Returns the allocator associated with this Storage. More... | |
bool | is_shared () const |
Whether this Storage owns its data. More... | |
Storage (const Storage< T, Alloc > &)=delete | |
Storage (Storage< T, Alloc > &&)=delete | |
Storage & | operator= (const Storage &)=delete |
Storage & | operator= (Storage &&)=delete |
Static Public Member Functions | |
static std::unique_ptr< Storage< T, Alloc > > | MakeFromMove (T *startIter, T *endIter, const Alloc &allocator) |
Construct Storage from a range by moving. More... | |
static std::unique_ptr< Storage< T, Alloc > > | MakeFromSharedData (T *existingData, size_t n, const Alloc &allocator) |
Construct a Storage from existing data. More... | |
static std::unique_ptr< Storage< T, Alloc > > | MakeUninitialized (size_t n, const Alloc &allocator) |
Construct a Storage with uninitialized data. More... | |
Private Member Functions | |
Storage (T *startIter, T *endIter, const Alloc &allocator, std::false_type, std::true_type) | |
Moving range constructor implementation. More... | |
template<typename InputIterator > | |
Storage (InputIterator startIter, InputIterator endIter, const Alloc &allocator, std::false_type) | |
Copying range constructor implementation for non-integral types. More... | |
template<typename Integral > | |
Storage (Integral n, Integral val, const Alloc &allocator, std::true_type) | |
Copying range constructor implementation for integral types. More... | |
T * | construct (size_t n) |
These methods allocate the storage and construct the elements. More... | |
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, Alloc >::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 97 of file Storage.h.
References casacore::arrays_internal::Storage< T, Alloc >::_data, casacore::arrays_internal::Storage< T, Alloc >::_isShared, and casacore::arrays_internal::Storage< T, Alloc >::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 160 of file Storage.h.
References casacore::arrays_internal::Storage< T, Alloc >::data().
|
inlineprivate |
Definition at line 184 of file Storage.h.
References casacore::arrays_internal::Storage< T, Alloc >::data().
|
inlineprivate |
Definition at line 235 of file Storage.h.
References casacore::arrays_internal::Storage< T, Alloc >::data().
|
inlineprivate |
Definition at line 209 of file Storage.h.
References casacore::arrays_internal::Storage< T, Alloc >::data().
|
inline |
Return a pointer to the storage data.
Definition at line 109 of file Storage.h.
References casacore::arrays_internal::Storage< T, Alloc >::_data.
Referenced by casacore::arrays_internal::Storage< T, Alloc >::construct(), casacore::arrays_internal::Storage< T, Alloc >::construct_move(), and casacore::arrays_internal::Storage< T, Alloc >::construct_range().
|
inline |
Definition at line 110 of file Storage.h.
References casacore::arrays_internal::Storage< T, Alloc >::_data.
|
inline |
|
inline |
Whether this Storage owns its data.
Returns true
when this Storage was constructed with MakeFromSharedData().
Definition at line 121 of file Storage.h.
References casacore::arrays_internal::Storage< T, Alloc >::_isShared.
|
inlinestatic |
Construct Storage from a range by moving.
The elements will be move constructed from the given values.
Definition at line 65 of file Storage.h.
References casacore::arrays_internal::Storage< T, Alloc >::Storage().
|
inlinestatic |
|
inlinestatic |
Construct a Storage with uninitialized data.
This will skip the constructor of the elements. This is only allowed for trivial types.
Definition at line 84 of file Storage.h.
References casacore::value().
|
delete |
|
delete |
|
inline |
Size of the data, zero if empty.
Definition at line 114 of file Storage.h.
References casacore::arrays_internal::Storage< T, Alloc >::_data, and casacore::arrays_internal::Storage< T, Alloc >::_end.
Referenced by casacore::arrays_internal::Storage< T, Alloc >::~Storage().
|
private |
Definition at line 277 of file Storage.h.
Referenced by casacore::arrays_internal::Storage< T, Alloc >::data(), casacore::arrays_internal::Storage< T, Alloc >::size(), and casacore::arrays_internal::Storage< T, Alloc >::~Storage().
|
private |
Definition at line 278 of file Storage.h.
Referenced by casacore::arrays_internal::Storage< T, Alloc >::size().
|
private |
Definition at line 279 of file Storage.h.
Referenced by casacore::arrays_internal::Storage< T, Alloc >::is_shared(), and casacore::arrays_internal::Storage< T, Alloc >::~Storage().