template<std:: size_t size_, class T>
StaticArray class
Static array wrapper.
Template parameters | |
---|---|
size_ | Array size |
T | Element type |
Contents
Provides statically-sized array wrapper with API similar to Array. Useful as more featureful alternative to plain C arrays or std::
Usage example:
// Create default-initialized array with 5 integers and set them to some value Containers::StaticArray<5, int> a; int b = 0; for(auto& i: a) i = b++; // a = {0, 1, 2, 3, 4} // Create array from given values Containers::StaticArray<4, int> b{3, 18, -157, 0}; b[3] = 25; // b = {3, 18, -157, 25}
Array initialization
The array is by default default-initialized, which means that trivial types are not initialized at all and default constructor is called on other types. It is possible to initialize the array in a different way using so-called tags:
- StaticArray(DefaultInitT) is equivalent to the implicit parameterless constructor (useful when you want to make the choice appear explicit).
- StaticArray(InPlaceInitT, Args&&... args) is equivalent to the implicit parameteric constructor (again useful when you want to make the choice appear explicit).
- StaticArray(ValueInitT) zero-initializes trivial types and calls default constructor elsewhere.
- StaticArray(DirectInitT, Args&&... args) constructs every element of the array using provided arguments.
- StaticArray(NoInitT) does not initialize anything and you need to call the constructor on all elements manually using placement new, std::
uninitialized_copy() or similar. This is the dangerous option.
Example:
// These two are equivalent Containers::StaticArray<5, int> a1; Containers::StaticArray<5, int> a2{Containers::DefaultInit}; // Array of 100 zeros Containers::StaticArray<100, int> b{Containers::ValueInit}; // Array of 4 values initialized in-place (these two are equivalent) Containers::StaticArray<4, int> c1{3, 18, -157, 0}; Containers::StaticArray<4, int> c2{Containers::InPlaceInit, 3, 18, -157, 0}; // Array of type with no default constructor struct Vec3 { Vec3(float, float, float); }; Containers::StaticArray<5, Vec3> d{Containers::DirectInit, 5.2f, 0.4f, 1.0f}; // Manual construction of each element struct Foo { Foo(int index); }; Containers::StaticArray<5, Foo> e{Containers::NoInit}; int index = 0; for(Foo& f: e) new(&f) Foo(index++);
Public types
-
enum (anonymous): std::
size_t { Size = size_ } - using Type = T
- Element type.
Constructors, destructors, conversion operators
- StaticArray(DefaultInitT) explicit
- Construct default-initialized array.
- StaticArray(ValueInitT) explicit
- Construct value-initialized array.
- StaticArray(NoInitT) explicit
- Construct the array without initializing its contents.
-
template<class ... Args>StaticArray(DirectInitT, Args&&... args) explicit
- Construct direct-initialized array.
-
template<class ... Args>StaticArray(InPlaceInitT, Args&&... args) explicit
- Construct in-place-initialized array.
- StaticArray() explicit
- Construct default-initialized array.
-
template<class ... Args>StaticArray(Args&&... args) explicit
- Construct in-place-initialized array.
- StaticArray(const StaticArray<size_, T>&) deleted
- Copying is not allowed.
- StaticArray(StaticArray<size_, T>&&) deleted
- Moving is not allowed.
-
template<class U>operator ArrayView<U>() noexcept
- Convert to ArrayView.
-
template<class U>operator ArrayView<const U>() const noexcept
- Convert to const ArrayView.
- operator ArrayView<const void>() const noexcept
-
template<class U>operator StaticArrayView<size_, U>() noexcept
- Convert to StaticArrayView.
-
template<class U>operator StaticArrayView<size_, const U>() const noexcept
- Convert to const StaticArrayView.
- operator T*() &
- Conversion to array type.
- operator const T*() const &
Public functions
- auto operator=(const StaticArray<size_, T>&) -> StaticArray<size_, T>& deleted
- Copying is not allowed.
- auto operator=(StaticArray<size_, T>&&) -> StaticArray<size_, T>& deleted
- Moving is not allowed.
- auto data() -> T*
- Array data.
- auto data() const -> const T*
-
auto size() const -> std::
size_t constexpr - Array size.
- auto empty() const -> bool constexpr
- Whether the array is empty.
- auto begin() -> T*
- Pointer to first element.
- auto begin() const -> const T*
- auto cbegin() const -> const T*
- auto end() -> T*
- Pointer to (one item after) last element.
- auto end() const -> const T*
- auto cend() const -> const T*
- auto slice(T* begin, T* end) -> ArrayView<T>
- Reference to array slice.
- auto slice(const T* begin, const T* end) const -> ArrayView<const T>
-
auto slice(std::
size_t begin, std:: size_t end) -> ArrayView<T> -
auto slice(std::
size_t begin, std:: size_t end) const -> ArrayView<const T> -
template<std::auto slice(T* begin) -> StaticArrayView<viewSize, T>
size_t viewSize> - Fixed-size array slice.
-
template<std::auto slice(const T* begin) const -> StaticArrayView<viewSize, const T>
size_t viewSize> -
template<std::auto slice(std::
size_t viewSize> size_t begin) -> StaticArrayView<viewSize, T> -
template<std::auto slice(std::
size_t viewSize> size_t begin) const -> StaticArrayView<viewSize, const T> - auto prefix(T* end) -> ArrayView<T>
- Array prefix.
- auto prefix(const T* end) const -> ArrayView<const T>
-
auto prefix(std::
size_t end) -> ArrayView<T> -
auto prefix(std::
size_t end) const -> ArrayView<const T> - auto suffix(T* begin) -> ArrayView<T>
- Array suffix.
- auto suffix(const T* begin) const -> ArrayView<const T>
-
auto suffix(std::
size_t begin) -> ArrayView<T> -
auto suffix(std::
size_t begin) const -> ArrayView<const T>
Enum documentation
template<std:: size_t size_, class T>
enum Corrade:: Containers:: StaticArray<size_, T>:: (anonymous): std:: size_t
Enumerators | |
---|---|
Size |
Array size |
Function documentation
template<std:: size_t size_, class T>
Corrade:: Containers:: StaticArray<size_, T>:: StaticArray(DefaultInitT) explicit
Construct default-initialized array.
Creates array of given size, the contents are default-initialized (i.e. builtin types are not initialized).
template<std:: size_t size_, class T>
Corrade:: Containers:: StaticArray<size_, T>:: StaticArray(ValueInitT) explicit
Construct value-initialized array.
Creates array of given size, the contents are value-initialized (i.e. builtin types are zero-initialized). For other than builtin types this is the same as StaticArray().
Useful if you want to create an array of primitive types and set them to zero.
template<std:: size_t size_, class T>
Corrade:: Containers:: StaticArray<size_, T>:: StaticArray(NoInitT) explicit
Construct the array without initializing its contents.
Creates array of given size, the contents are not initialized. Initialize the values using placement new.
Useful if you will be overwriting all elements later anyway.
template<std:: size_t size_, class T>
template<class ... Args>
Corrade:: Containers:: StaticArray<size_, T>:: StaticArray(DirectInitT,
Args&&... args) explicit
Construct direct-initialized array.
Constructs the array using the StaticArray(NoInitT) constructor and then initializes each element with placement new using forwarded args
.
template<std:: size_t size_, class T>
template<class ... Args>
Corrade:: Containers:: StaticArray<size_, T>:: StaticArray(InPlaceInitT,
Args&&... args) explicit
Construct in-place-initialized array.
The arguments are forwarded to the array constructor.
template<std:: size_t size_, class T>
Corrade:: Containers:: StaticArray<size_, T>:: StaticArray() explicit
Construct default-initialized array.
Alias to StaticArray(DefaultInitT).
template<std:: size_t size_, class T>
template<class ... Args>
Corrade:: Containers:: StaticArray<size_, T>:: StaticArray(Args&&... args) explicit
Construct in-place-initialized array.
Alias to StaticArray(InPlaceInitT, Args&&... args).
template<std:: size_t size_, class T>
template<class U>
Corrade:: Containers:: StaticArray<size_, T>:: operator ArrayView<U>() noexcept
Convert to ArrayView.
Enabled only if T*
is implicitly convertible to U*
. Expects that both types have the same size.
template<std:: size_t size_, class T>
template<class U>
Corrade:: Containers:: StaticArray<size_, T>:: operator ArrayView<const U>() const noexcept
Convert to const ArrayView.
Enabled only if T*
or const T*
is implicitly convertible to U*
. Expects that both types have the same size.
template<std:: size_t size_, class T>
Corrade:: Containers:: StaticArray<size_, T>:: operator ArrayView<const void>() const noexcept
This is an overloaded member function, provided for convenience. It differs from the above function only in what argument(s) it accepts.
template<std:: size_t size_, class T>
template<class U>
Corrade:: Containers:: StaticArray<size_, T>:: operator StaticArrayView<size_, U>() noexcept
Convert to StaticArrayView.
Enabled only if T*
is implicitly convertible to U*
. Expects that both types have the same size.
template<std:: size_t size_, class T>
template<class U>
Corrade:: Containers:: StaticArray<size_, T>:: operator StaticArrayView<size_, const U>() const noexcept
Convert to const StaticArrayView.
Enabled only if T*
or const T*
is implicitly convertible to U*
. Expects that both types have the same size.
template<std:: size_t size_, class T>
Corrade:: Containers:: StaticArray<size_, T>:: operator const T*() const &
This is an overloaded member function, provided for convenience. It differs from the above function only in what argument(s) it accepts.
template<std:: size_t size_, class T>
const T* Corrade:: Containers:: StaticArray<size_, T>:: data() const
This is an overloaded member function, provided for convenience. It differs from the above function only in what argument(s) it accepts.
template<std:: size_t size_, class T>
std:: size_t Corrade:: Containers:: StaticArray<size_, T>:: size() const constexpr
Array size.
Equivalent to Size.
template<std:: size_t size_, class T>
bool Corrade:: Containers:: StaticArray<size_, T>:: empty() const constexpr
Whether the array is empty.
Always true (it's not possible to create zero-sized C array).
template<std:: size_t size_, class T>
const T* Corrade:: Containers:: StaticArray<size_, T>:: begin() const
This is an overloaded member function, provided for convenience. It differs from the above function only in what argument(s) it accepts.
template<std:: size_t size_, class T>
const T* Corrade:: Containers:: StaticArray<size_, T>:: cbegin() const
This is an overloaded member function, provided for convenience. It differs from the above function only in what argument(s) it accepts.
template<std:: size_t size_, class T>
const T* Corrade:: Containers:: StaticArray<size_, T>:: end() const
This is an overloaded member function, provided for convenience. It differs from the above function only in what argument(s) it accepts.
template<std:: size_t size_, class T>
const T* Corrade:: Containers:: StaticArray<size_, T>:: cend() const
This is an overloaded member function, provided for convenience. It differs from the above function only in what argument(s) it accepts.
template<std:: size_t size_, class T>
ArrayView<T> Corrade:: Containers:: StaticArray<size_, T>:: slice(T* begin,
T* end)
Reference to array slice.
Equivalent to ArrayView::
template<std:: size_t size_, class T>
ArrayView<const T> Corrade:: Containers:: StaticArray<size_, T>:: slice(const T* begin,
const T* end) const
This is an overloaded member function, provided for convenience. It differs from the above function only in what argument(s) it accepts.
template<std:: size_t size_, class T>
ArrayView<T> Corrade:: Containers:: StaticArray<size_, T>:: slice(std:: size_t begin,
std:: size_t end)
This is an overloaded member function, provided for convenience. It differs from the above function only in what argument(s) it accepts.
template<std:: size_t size_, class T>
ArrayView<const T> Corrade:: Containers:: StaticArray<size_, T>:: slice(std:: size_t begin,
std:: size_t end) const
This is an overloaded member function, provided for convenience. It differs from the above function only in what argument(s) it accepts.
template<std:: size_t size_, class T>
template<std:: size_t viewSize>
StaticArrayView<viewSize, T> Corrade:: Containers:: StaticArray<size_, T>:: slice(T* begin)
Fixed-size array slice.
Both begin
and begin + viewSize
are expected to be in range.
template<std:: size_t size_, class T>
template<std:: size_t viewSize>
StaticArrayView<viewSize, const T> Corrade:: Containers:: StaticArray<size_, T>:: slice(const T* begin) const
This is an overloaded member function, provided for convenience. It differs from the above function only in what argument(s) it accepts.
template<std:: size_t size_, class T>
template<std:: size_t viewSize>
StaticArrayView<viewSize, T> Corrade:: Containers:: StaticArray<size_, T>:: slice(std:: size_t begin)
This is an overloaded member function, provided for convenience. It differs from the above function only in what argument(s) it accepts.
template<std:: size_t size_, class T>
template<std:: size_t viewSize>
StaticArrayView<viewSize, const T> Corrade:: Containers:: StaticArray<size_, T>:: slice(std:: size_t begin) const
This is an overloaded member function, provided for convenience. It differs from the above function only in what argument(s) it accepts.
template<std:: size_t size_, class T>
ArrayView<T> Corrade:: Containers:: StaticArray<size_, T>:: prefix(T* end)
Array prefix.
Equivalent to ArrayView::
template<std:: size_t size_, class T>
ArrayView<const T> Corrade:: Containers:: StaticArray<size_, T>:: prefix(const T* end) const
This is an overloaded member function, provided for convenience. It differs from the above function only in what argument(s) it accepts.
template<std:: size_t size_, class T>
ArrayView<T> Corrade:: Containers:: StaticArray<size_, T>:: prefix(std:: size_t end)
This is an overloaded member function, provided for convenience. It differs from the above function only in what argument(s) it accepts.
template<std:: size_t size_, class T>
ArrayView<const T> Corrade:: Containers:: StaticArray<size_, T>:: prefix(std:: size_t end) const
This is an overloaded member function, provided for convenience. It differs from the above function only in what argument(s) it accepts.
template<std:: size_t size_, class T>
ArrayView<T> Corrade:: Containers:: StaticArray<size_, T>:: suffix(T* begin)
Array suffix.
Equivalent to ArrayView::
template<std:: size_t size_, class T>
ArrayView<const T> Corrade:: Containers:: StaticArray<size_, T>:: suffix(const T* begin) const
This is an overloaded member function, provided for convenience. It differs from the above function only in what argument(s) it accepts.
template<std:: size_t size_, class T>
ArrayView<T> Corrade:: Containers:: StaticArray<size_, T>:: suffix(std:: size_t begin)
This is an overloaded member function, provided for convenience. It differs from the above function only in what argument(s) it accepts.
template<std:: size_t size_, class T>
ArrayView<const T> Corrade:: Containers:: StaticArray<size_, T>:: suffix(std:: size_t begin) const
This is an overloaded member function, provided for convenience. It differs from the above function only in what argument(s) it accepts.
template<std:: size_t size_, class T>
template<std:: size_t size, class T>
ArrayView<T> arrayView(StaticArray<size, T>& array) constexpr
Make view on StaticArray.
Convenience alternative to calling StaticArray::
Containers::StaticArray<5, std::uint32_t> data; Containers::ArrayView<std::uint32_t> a{data}; auto b = Containers::arrayView(data);
template<std:: size_t size_, class T>
template<std:: size_t size, class T>
ArrayView<const T> arrayView(const StaticArray<size, T>& array) constexpr
Make view on const StaticArray.
Convenience alternative to calling StaticArray::
const Containers::StaticArray<5, std::uint32_t> data; Containers::ArrayView<const std::uint32_t> a{data}; auto b = Containers::arrayView(data);
template<std:: size_t size_, class T>
template<std:: size_t size, class T>
StaticArrayView<size, T> staticArrayView(StaticArray<size, T>& array) constexpr
Make static view on StaticArray.
Convenience alternative to calling StaticArray::operator StaticArrayView<size_, U>()
explicitly. The following two lines are equivalent:
Containers::StaticArray<5, std::uint32_t> data; Containers::StaticArrayView<5, std::uint32_t> a{data}; auto b = Containers::staticArrayView(data);
template<std:: size_t size_, class T>
template<std:: size_t size, class T>
StaticArrayView<size, const T> staticArrayView(const StaticArray<size, T>& array) constexpr
Make static view on const StaticArray.
Convenience alternative to calling StaticArray::operator StaticArrayView<size_, U>()
explicitly. The following two lines are equivalent:
const Containers::StaticArray<5, std::uint32_t> data; Containers::StaticArrayView<5, const std::uint32_t> a{data}; auto b = Containers::staticArrayView(data);
template<std:: size_t size_, class T>
template<class U, std:: size_t size, class T>
StaticArrayView<size*sizeof(T)/sizeof(U), U> arrayCast(StaticArray<size, T>& array)
Reinterpret-cast a static array.
See arrayCast(StaticArrayView<size, T>) for more information.
template<std:: size_t size_, class T>
template<std:: size_t size_, class T>
std:: size_t arraySize(const StaticArray<size_, T>&) constexpr
Static array size.
See arraySize(ArrayView<T>) for more information.