Stratax 0.3.1
Loading...
Searching...
No Matches
Vector.hpp
1#pragma once
2
3#include <cstddef>
4#include <initializer_list>
5
6#include <stratax/core/dtypes/Concepts.hpp>
7#include <stratax/core/ArrayBase.hpp>
8#include <stratax/core/Buffer.hpp>
9#include <stratax/core/Shape.hpp>
10#include <stratax/exceptions/Exceptions.hpp>
11
12namespace stratax::container {
13
41template<typename T>
42requires DType<T>
43class Vector : public core::ArrayBase<T>
44{
45public:
68
77 : core::ArrayBase<T>(core::Shape{size})
78 {}
79
88 explicit Vector(const core::Shape& shape)
89 : core::ArrayBase<T>(shape)
90 {
91 if (shape.rank() != 1)
92 {
93 throw Exceptions::RankError("Vector requires a rank-1 shape.");
94 }
95 }
96
106 : core::ArrayBase<T>(core::Shape{size}, value)
107 {}
108
116 Vector(std::initializer_list<value_type> list)
117 : core::ArrayBase<T>(core::Shape{list.size()}, core::Buffer<value_type>(list))
118 {}
119
127 Vector() : Vector(0) {}
128
134 void swap(Vector& other) noexcept
135 {
137 }
138
145 friend void swap(Vector& lhs, Vector& rhs) noexcept
146 {
147 lhs.swap(rhs);
148 }
149
150};
151
152} // namespace stratax::container
One-dimensional owning array of numeric values.
Definition Vector.hpp:44
typename core::ArrayBase< T >::reference reference
Mutable element reference type.
Definition Vector.hpp:53
typename core::ArrayBase< T >::const_pointer const_pointer
Read-only element pointer type.
Definition Vector.hpp:59
typename core::ArrayBase< T >::const_iterator const_iterator
Read-only contiguous random-access iterator type.
Definition Vector.hpp:63
typename core::ArrayBase< T >::difference_type difference_type
Signed type used for checked indices and iterator distances.
Definition Vector.hpp:51
typename core::ArrayBase< T >::value_type value_type
Stored element type inherited from ArrayBase.
Definition Vector.hpp:47
typename core::ArrayBase< T >::const_reverse_iterator const_reverse_iterator
Read-only reverse iterator type.
Definition Vector.hpp:67
typename core::ArrayBase< T >::const_reference const_reference
Read-only element reference type.
Definition Vector.hpp:55
typename core::ArrayBase< T >::size_type size_type
Unsigned type used for element counts and indices.
Definition Vector.hpp:49
void swap(Vector &other) noexcept
Exchanges storage and layout metadata with other.
Definition Vector.hpp:134
Vector(const core::Shape &shape)
Constructs a value-initialized vector from a rank-one shape.
Definition Vector.hpp:88
Vector(std::initializer_list< value_type > list)
Constructs a vector by copying an initializer list.
Definition Vector.hpp:116
typename core::ArrayBase< T >::pointer pointer
Mutable element pointer type.
Definition Vector.hpp:57
friend void swap(Vector &lhs, Vector &rhs) noexcept
Exchanges two vectors using argument-dependent lookup.
Definition Vector.hpp:145
typename core::ArrayBase< T >::reverse_iterator reverse_iterator
Mutable reverse iterator type.
Definition Vector.hpp:65
typename core::ArrayBase< T >::iterator iterator
Mutable contiguous random-access iterator type.
Definition Vector.hpp:61
Vector()
Constructs an empty rank-one vector.
Definition Vector.hpp:127
Vector(size_type size)
Constructs a value-initialized vector with size elements.
Definition Vector.hpp:76
Vector(size_type size, const_reference value)
Constructs a vector containing size copies of value.
Definition Vector.hpp:105
Shared owning storage and layout base for Stratax array containers.
Definition ArrayBase.hpp:38
typename Buffer< T >::value_type value_type
Stored element type.
Definition ArrayBase.hpp:41
typename Buffer< value_type >::pointer pointer
Mutable element pointer type.
Definition ArrayBase.hpp:51
typename Buffer< value_type >::const_reference const_reference
Read-only element reference type.
Definition ArrayBase.hpp:49
ArrayBase(const Shape &shape)
Constructs value-initialized storage for shape.
const Shape & shape() const noexcept
Returns the logical shape metadata.
Definition ArrayBase.hpp:79
size_type size() const noexcept
Returns the number of stored elements.
Definition ArrayBase.hpp:70
typename Buffer< value_type >::reverse_iterator reverse_iterator
Mutable reverse iterator type.
Definition ArrayBase.hpp:59
typename Buffer< value_type >::const_reverse_iterator const_reverse_iterator
Read-only reverse iterator type.
Definition ArrayBase.hpp:61
typename Buffer< value_type >::const_pointer const_pointer
Read-only element pointer type.
Definition ArrayBase.hpp:53
typename Buffer< value_type >::difference_type difference_type
Signed type used for checked indices and iterator distances.
Definition ArrayBase.hpp:45
typename Buffer< value_type >::iterator iterator
Mutable contiguous random-access iterator type.
Definition ArrayBase.hpp:55
typename Buffer< value_type >::const_iterator const_iterator
Read-only contiguous random-access iterator type.
Definition ArrayBase.hpp:57
typename Buffer< value_type >::reference reference
Mutable element reference type.
Definition ArrayBase.hpp:47
void swap(ArrayBase &other) noexcept
Exchanges storage and layout metadata with other.
typename Buffer< value_type >::size_type size_type
Unsigned type used for element counts and indices.
Definition ArrayBase.hpp:43
Stores the dimensions of a multidimensional array.
Definition Shape.hpp:33
size_type rank() const noexcept
Returns the number of dimensions.
Definition Shape.hpp:121