casacore
Loading...
Searching...
No Matches
casacore::arrays_internal::Storage< T > Class Template Reference

This class emplements a static (but run-time) sized array. More...

#include <Storage.h>

Classes

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... >
struct  conjunction
struct  conjunction< B1 >
struct  conjunction< 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

Detailed Description

template<typename T>
class casacore::arrays_internal::Storage< T >

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.

Definition at line 16 of file Storage.h.

Constructor & Destructor Documentation

◆ Storage() [1/9]

template<typename T>
casacore::arrays_internal::Storage< T >::Storage ( )
inline

Construct an empty Storage.

Definition at line 19 of file Storage.h.

References _data, _end, and _isShared.

Referenced by MakeFromMove(), MakeFromSharedData(), MakeUninitialized(), operator=(), operator=(), Storage(), Storage(), and Storage().

◆ Storage() [2/9]

template<typename T>
casacore::arrays_internal::Storage< T >::Storage ( std::size_t n)
inline

Construct Storage with a given size.

The elements will be default constructed

Definition at line 23 of file Storage.h.

References _data, _end, _isShared, and construct().

◆ Storage() [3/9]

template<typename T>
casacore::arrays_internal::Storage< T >::Storage ( std::size_t n,
const T & val )
inline

Construct Storage with a given size.

The elements will be copy constructed from the given value

Definition at line 27 of file Storage.h.

References _data, _end, _isShared, and construct().

◆ Storage() [4/9]

template<typename T>
template<typename InputIterator>
casacore::arrays_internal::Storage< T >::Storage ( InputIterator startIter,
InputIterator endIter )
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.

Definition at line 37 of file Storage.h.

References Storage().

◆ ~Storage()

template<typename T>
casacore::arrays_internal::Storage< T >::~Storage ( )
inlinenoexcept

Destructs the elements and deallocates the data.

Definition at line 75 of file Storage.h.

References _data, _isShared, and size().

◆ Storage() [5/9]

template<typename T>
casacore::arrays_internal::Storage< T >::Storage ( const Storage< T > & )
delete

References Storage().

◆ Storage() [6/9]

template<typename T>
casacore::arrays_internal::Storage< T >::Storage ( Storage< T > && )
delete

References Storage().

◆ Storage() [7/9]

template<typename T>
casacore::arrays_internal::Storage< T >::Storage ( T * startIter,
T * endIter,
std::false_type ,
std::true_type  )
inlineprivate

Moving range constructor implementation.

Parameter integral is only a place-holder.

Definition at line 102 of file Storage.h.

References _data, _end, _isShared, and construct_move().

◆ Storage() [8/9]

template<typename T>
template<typename InputIterator>
casacore::arrays_internal::Storage< T >::Storage ( InputIterator startIter,
InputIterator endIter,
std::false_type  )
inlineprivate

Copying range constructor implementation for non-integral types.

Definition at line 109 of file Storage.h.

References _data, _end, _isShared, and construct_range().

◆ Storage() [9/9]

template<typename T>
template<typename Integral>
casacore::arrays_internal::Storage< T >::Storage ( Integral n,
Integral val,
std::true_type  )
inlineprivate

Copying range constructor implementation for integral types.

Definition at line 116 of file Storage.h.

References _data, _end, _isShared, and construct().

Member Function Documentation

◆ construct() [1/2]

template<typename T>
T * casacore::arrays_internal::Storage< T >::construct ( size_t n)
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 124 of file Storage.h.

References data().

Referenced by Storage(), Storage(), and Storage().

◆ construct() [2/2]

template<typename T>
T * casacore::arrays_internal::Storage< T >::construct ( size_t n,
const T & val )
inlineprivate

Definition at line 146 of file Storage.h.

References data().

◆ construct_move()

template<typename T>
T * casacore::arrays_internal::Storage< T >::construct_move ( T * startIter,
T * endIter )
inlineprivate

Definition at line 193 of file Storage.h.

References data().

Referenced by Storage().

◆ construct_range()

template<typename T>
template<typename InputIterator>
T * casacore::arrays_internal::Storage< T >::construct_range ( InputIterator startIter,
InputIterator endIter )
inlineprivate

Definition at line 169 of file Storage.h.

References data().

Referenced by Storage().

◆ data() [1/2]

template<typename T>
T * casacore::arrays_internal::Storage< T >::data ( )
inline

Return a pointer to the storage data.

Definition at line 84 of file Storage.h.

References _data.

Referenced by construct(), construct(), construct_move(), and construct_range().

◆ data() [2/2]

template<typename T>
const T * casacore::arrays_internal::Storage< T >::data ( ) const
inline

Definition at line 85 of file Storage.h.

References _data.

◆ is_shared()

template<typename T>
bool casacore::arrays_internal::Storage< T >::is_shared ( ) const
inline

Whether this Storage owns its data.

Returns true when this Storage was constructed with MakeFromSharedData().

Definition at line 93 of file Storage.h.

References _isShared.

◆ MakeFromMove()

template<typename T>
std::unique_ptr< Storage< T > > casacore::arrays_internal::Storage< T >::MakeFromMove ( T * startIter,
T * endIter )
inlinestatic

Construct Storage from a range by moving.

The elements will be move constructed from the given values.

Definition at line 45 of file Storage.h.

References Storage().

◆ MakeFromSharedData()

template<typename T>
std::unique_ptr< Storage< T > > casacore::arrays_internal::Storage< T >::MakeFromSharedData ( T * existingData,
size_t n )
inlinestatic

Construct a Storage from existing data.

The given pointer will not be owned by this class.

Definition at line 52 of file Storage.h.

References Storage().

◆ MakeUninitialized()

template<typename T>
std::unique_ptr< Storage< T > > casacore::arrays_internal::Storage< T >::MakeUninitialized ( size_t n)
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 63 of file Storage.h.

References Storage().

◆ operator=() [1/2]

template<typename T>
Storage & casacore::arrays_internal::Storage< T >::operator= ( const Storage< T > & )
delete

References Storage().

◆ operator=() [2/2]

template<typename T>
Storage & casacore::arrays_internal::Storage< T >::operator= ( Storage< T > && )
delete

References Storage().

◆ size()

template<typename T>
size_t casacore::arrays_internal::Storage< T >::size ( ) const
inline

Size of the data, zero if empty.

Definition at line 89 of file Storage.h.

References _data, and _end.

Referenced by ~Storage().

Member Data Documentation

◆ _data

template<typename T>
T* casacore::arrays_internal::Storage< T >::_data
private

Definition at line 237 of file Storage.h.

Referenced by data(), data(), size(), Storage(), Storage(), Storage(), Storage(), Storage(), Storage(), and ~Storage().

◆ _end

template<typename T>
T* casacore::arrays_internal::Storage< T >::_end
private

Definition at line 238 of file Storage.h.

Referenced by size(), Storage(), Storage(), Storage(), Storage(), Storage(), and Storage().

◆ _isShared

template<typename T>
bool casacore::arrays_internal::Storage< T >::_isShared
private

Definition at line 239 of file Storage.h.

Referenced by is_shared(), Storage(), Storage(), Storage(), Storage(), Storage(), Storage(), and ~Storage().


The documentation for this class was generated from the following file: