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 20 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 28 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 36 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 49 of file Storage.h.

References Storage().

## ~Storage()

template<typename T>

casacore::arrays_internal::Storage< T >::~Storage | ( |  | ) |

inline noexcept

Destructs the elements and deallocates the data.

Definition at line 94 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 | )

inline private

Moving range constructor implementation.

Parameter integral is only a place-holder.

Definition at line 124 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 | )

inline private

Copying range constructor implementation for non-integral types.

Definition at line 132 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 | )

inline private

Copying range constructor implementation for integral types.

Definition at line 140 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 | ) |

inline private

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 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 )

inline private

Definition at line 175 of file Storage.h.

References data().

## construct_move()

template<typename T>

T * casacore::arrays_internal::Storage< T >::construct_move | ( | T * | startIter,
|  | T * | endIter )

inline private

Definition at line 226 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 )

inline private

Definition at line 200 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 106 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 107 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 115 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 )

inline static

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 Storage().

## MakeFromSharedData()

template<typename T>

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

inline static

Construct a Storage from existing data.

The given pointer will not be owned by this class.

Definition at line 69 of file Storage.h.

References Storage().

## MakeUninitialized()

template<typename T>

std::unique_ptr< Storage< T > > casacore::arrays_internal::Storage< T >::MakeUninitialized | ( | size_t | n | ) |

inline static

Construct a Storage with uninitialized data.

This will skip the constructor of the elements. This is only allowed for trivial types.

Definition at line 81 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 111 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 268 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 269 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 270 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:

- casa/Arrays/Storage.h