7 template <Numeric T, usize N>
8 template <
typename... Args>
9 requires(
sizeof...(Args) == N) && (std::convertible_to<Args, T> && ...)
10 constexpr
Vec<T, N>::
Vec(Args&&... args) : m_data{
static_cast<T
>(std::forward<Args>(args))...} {}
12 template <Numeric T, usize N>
17 template <Numeric T, usize N>
22 template <Numeric T, usize N>
27 template <Numeric T, usize N>
32 template <Numeric T, usize N>
37 template <Numeric T, usize N>
41 if ((*
this)[i] != other[i]) {
49 template <Numeric T, usize N>
53 (*this)[i] += other[i];
59 template <Numeric T, usize N>
63 (*this)[i] -= other[i];
69 template <Numeric T, usize N>
73 (*this)[i] *= other[i];
79 template <Numeric T, usize N>
83 (*this)[i] /= other[i];
89 template <Numeric T, usize N>
92 for (
auto& value : m_data) {
99 template <Numeric T, usize N>
102 for (
auto& value : m_data) {
109 template <Numeric T, usize N>
114 template <Numeric T, usize N>
119 result[i] = -(*this)[i];
125 template <Numeric T, Numeric U, usize N>
127 using R = std::common_type_t<T, U>;
131 for (
usize i = 0; i < N; ++i) {
132 result[i] =
static_cast<R
>(a[i]) +
static_cast<R
>(b[i]);
138 template <Numeric T, Numeric U, usize N>
140 using R = std::common_type_t<T, U>;
144 for (
usize i = 0; i < N; ++i) {
145 result[i] =
static_cast<R
>(a[i]) -
static_cast<R
>(b[i]);
151 template <Numeric T, Numeric U, usize N>
153 using R = std::common_type_t<T, U>;
157 for (
usize i = 0; i < N; ++i) {
158 result[i] =
static_cast<R
>(a[i]) *
static_cast<R
>(b[i]);
164 template <Numeric T, Numeric U, usize N>
166 using R = std::common_type_t<T, U>;
170 for (
usize i = 0; i < N; ++i) {
171 result[i] =
static_cast<R
>(a[i]) /
static_cast<R
>(b[i]);
177 template <Numeric T, Numeric U, usize N>
179 using R = std::common_type_t<T, U>;
183 for (
usize i = 0; i < N; ++i) {
184 result[i] =
static_cast<R
>(v[i]) *
static_cast<R
>(scalar);
190 template <Numeric T, Numeric U, usize N>
195 template <Numeric T, Numeric U, usize N>
197 using R = std::common_type_t<T, U>;
201 for (
usize i = 0; i < N; ++i) {
202 result[i] =
static_cast<R
>(v[i]) /
static_cast<R
>(scalar);
210template <Nexus::Numeric T, Nexus::usize N>
211struct std::formatter<
Nexus::Vec<T, N>> {
214 constexpr auto parse(std::format_parse_context& ctx) {
219 auto out = ctx.out();
220 out = std::format_to(out,
"(");
224 out = std::format_to(out,
", ");
229 return std::format_to(out,
")");
constexpr Vec operator+() const
Definition Vec.inl:110
static constexpr size_type Size()
Definition Vec.inl:33
constexpr Vec operator-() const
Definition Vec.inl:115
constexpr T * Data()
Definition Vec.inl:23
constexpr Vec & operator+=(const Vec< U, N > &other)
constexpr T & operator[](size_type index)
Definition Vec.inl:13
usize size_type
Definition Vec.cppm:20
constexpr Vec & operator-=(const Vec< U, N > &other)
constexpr Vec & operator*=(const Vec< U, N > &other)
constexpr Vec & operator/=(const Vec< U, N > &other)
constexpr bool operator==(const Vec< U, N > &other) const
Definition Vec.inl:39
Definition Config.cppm:11
constexpr auto operator+(const Mat< T, RowCount, ColCount, Layout > &a, const Mat< U, RowCount, ColCount, Layout > &b) -> MatCommon< T, U, RowCount, ColCount, Layout >
Definition Mat.inl:289
std::size_t usize
Definition Types.cppm:25
constexpr auto operator*(const Mat< T, RowCount, ColCount, Layout > &mat, U scalar) -> MatCommon< T, U, RowCount, ColCount, Layout >
Definition Mat.inl:321
constexpr auto operator/(const Mat< T, RowCount, ColCount, Layout > &mat, U scalar) -> MatCommon< T, U, RowCount, ColCount, Layout >
Definition Mat.inl:343
constexpr auto operator-(const Mat< T, RowCount, ColCount, Layout > &a, const Mat< U, RowCount, ColCount, Layout > &b) -> MatCommon< T, U, RowCount, ColCount, Layout >
Definition Mat.inl:305
Vec< std::common_type_t< T, U >, N > VecCommon
Definition Vec.cppm:66