Stratax 0.4.0rc1
Loading...
Searching...
No Matches
Vector.hpp
Go to the documentation of this file.
1
4#pragma once
5
6#include <cstddef>
7#include <initializer_list>
8
14
15namespace stratax::container {
16
44template<typename T>
45requires DType<T>
46class Vector : public core::ArrayBase<T>
47{
48public:
71
80 : core::ArrayBase<T>(core::Shape{size})
81 {}
82
91 explicit Vector(const core::Shape& shape)
92 : core::ArrayBase<T>(shape)
93 {
94 if (shape.rank() != 1)
95 {
96 throw Exceptions::RankError("Vector requires a rank-1 shape.");
97 }
98 }
99
109 : core::ArrayBase<T>(core::Shape{size}, value)
110 {}
111
119 Vector(std::initializer_list<value_type> list)
120 : core::ArrayBase<T>(core::Shape{list.size()}, core::Buffer<value_type>(list))
121 {}
122
130 Vector() : Vector(0) {}
131
133 Vector(const Vector&) = default;
135 Vector& operator=(const Vector&) = default;
136
144 Vector(Vector&& other) : Vector() { swap(other); }
145
154 {
155 if (this != &other)
156 {
157 Vector moved(std::move(other));
158 swap(moved);
159 }
160 return *this;
161 }
162
168 void swap(Vector& other) noexcept
169 {
171 }
172
179 friend void swap(Vector& lhs, Vector& rhs) noexcept
180 {
181 lhs.swap(rhs);
182 }
183
184};
185
186} // namespace stratax::container
Shared owning storage and row-major metadata for containers.
Fixed-size aligned storage with element lifetime management.
Dtype and array interface concepts.
Stratax exception types derived from std::runtime_error.
Immutable dimension metadata and checked row-major strides.
Number of axes or supplied multidimensional indices does not match the required rank.
One-dimensional owning array of supported dtype values.
Definition Vector.hpp:47
typename core::ArrayBase< T >::reference reference
Mutable element reference type.
Definition Vector.hpp:56
Vector & operator=(Vector &&other)
Transfers storage and preserves both vectors' rank invariants.
Definition Vector.hpp:153
typename core::ArrayBase< T >::const_pointer const_pointer
Read-only element pointer type.
Definition Vector.hpp:62
Vector(Vector &&other)
Transfers storage and leaves the source with shape {0}.
Definition Vector.hpp:144
typename core::ArrayBase< T >::const_iterator const_iterator
Read-only contiguous random-access iterator type.
Definition Vector.hpp:66
typename core::ArrayBase< T >::difference_type difference_type
Signed type used for checked indices and iterator distances.
Definition Vector.hpp:54
typename core::ArrayBase< T >::value_type value_type
Stored element type inherited from ArrayBase.
Definition Vector.hpp:50
typename core::ArrayBase< T >::const_reverse_iterator const_reverse_iterator
Read-only reverse iterator type.
Definition Vector.hpp:70
typename core::ArrayBase< T >::const_reference const_reference
Read-only element reference type.
Definition Vector.hpp:58
typename core::ArrayBase< T >::size_type size_type
Unsigned type used for element counts and indices.
Definition Vector.hpp:52
void swap(Vector &other) noexcept
Exchanges storage and layout metadata with other.
Definition Vector.hpp:168
Vector(const core::Shape &shape)
Constructs a value-initialized vector from a rank-one shape.
Definition Vector.hpp:91
Vector(std::initializer_list< value_type > list)
Constructs a vector by copying an initializer list.
Definition Vector.hpp:119
typename core::ArrayBase< T >::pointer pointer
Mutable element pointer type.
Definition Vector.hpp:60
friend void swap(Vector &lhs, Vector &rhs) noexcept
Exchanges two vectors using argument-dependent lookup.
Definition Vector.hpp:179
Vector & operator=(const Vector &)=default
Replaces values and metadata with a deep copy; allocation failure leaves this object unchanged.
typename core::ArrayBase< T >::reverse_iterator reverse_iterator
Mutable reverse iterator type.
Definition Vector.hpp:68
typename core::ArrayBase< T >::iterator iterator
Mutable contiguous random-access iterator type.
Definition Vector.hpp:64
Vector()
Constructs an empty rank-one vector.
Definition Vector.hpp:130
Vector(const Vector &)=default
Copies values and metadata into independent storage.
Vector(size_type size)
Constructs a value-initialized vector with size elements.
Definition Vector.hpp:79
Vector(size_type size, const_reference value)
Constructs a vector containing size copies of value.
Definition Vector.hpp:108
Shared owning storage and layout base for Stratax array containers.
Definition ArrayBase.hpp:41
typename Buffer< T >::value_type value_type
Stored element type.
Definition ArrayBase.hpp:44
typename Buffer< value_type >::pointer pointer
Mutable element pointer type.
Definition ArrayBase.hpp:54
typename Buffer< value_type >::const_reference const_reference
Read-only element reference type.
Definition ArrayBase.hpp:52
const Shape & shape() const noexcept
Returns the logical shape metadata.
Definition ArrayBase.hpp:82
size_type size() const noexcept
Returns the number of stored elements.
Definition ArrayBase.hpp:73
typename Buffer< value_type >::reverse_iterator reverse_iterator
Mutable reverse iterator type.
Definition ArrayBase.hpp:62
typename Buffer< value_type >::const_reverse_iterator const_reverse_iterator
Read-only reverse iterator type.
Definition ArrayBase.hpp:64
typename Buffer< value_type >::const_pointer const_pointer
Read-only element pointer type.
Definition ArrayBase.hpp:56
typename Buffer< value_type >::difference_type difference_type
Signed type used for checked indices and iterator distances.
Definition ArrayBase.hpp:48
typename Buffer< value_type >::iterator iterator
Mutable contiguous random-access iterator type.
Definition ArrayBase.hpp:58
typename Buffer< value_type >::const_iterator const_iterator
Read-only contiguous random-access iterator type.
Definition ArrayBase.hpp:60
typename Buffer< value_type >::reference reference
Mutable element reference type.
Definition ArrayBase.hpp:50
ArrayBase(const ArrayBase &)=default
Copies storage and layout into independent buffers.
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:46
Stores the dimensions of a multidimensional array.
Definition Shape.hpp:36
size_type rank() const noexcept
Returns the number of dimensions.
Definition Shape.hpp:124
Supported numeric or boolean element dtype.
Definition Concepts.hpp:74