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>(validate_shape(shape))
90 {}
91
101 : core::ArrayBase<T>(core::Shape{size}, value)
102 {}
103
111 Vector(std::initializer_list<value_type> list)
112 : core::ArrayBase<T>(core::Shape{list.size()}, core::Buffer<value_type>(list))
113 {}
114
122 Vector() : Vector(0) {}
123
129 void swap(Vector& other) noexcept
130 {
132 }
133
140 friend void swap(Vector& lhs, Vector& rhs) noexcept
141 {
142 lhs.swap(rhs);
143 }
144
145private:
153 static const core::Shape& validate_shape(const core::Shape& shape)
154 {
155 if (shape.rank() != 1) {
157 "Vector shape must be rank 1.");
158 }
159
160 return shape;
161 }
162};
163
164} // namespace stratax::container
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:129
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:111
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:140
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:122
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:100
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:122