diff --git a/include/mtl/vec.hpp b/include/mtl/vec.hpp index 4568ad0..fb3b8fc 100644 --- a/include/mtl/vec.hpp +++ b/include/mtl/vec.hpp @@ -122,7 +122,30 @@ public: return r; } - mat<1, N> transpose() const noexcept; + mat<1, N> transpose() const noexcept { + mat<1, N> r; + +#pragma GCC unroll 4 + for (size_t i = 0; i < N; ++i) { + r.e[0][i] = e[i]; + } + + return r; + } + + bool operator==(const vec& rhs) noexcept { +#pragma GCC unroll 4 + for (size_t i = 0; i < N; ++i) { + if (e[i] != rhs.e[i]) { + return false; + } + } + + return true; + } + bool operator!=(const vec& rhs) noexcept { + return !(*this == rhs); + } }; class vec2 : public vec<2> { @@ -170,5 +193,22 @@ public: } }; +template +STREAM_TYPE& operator<<(STREAM_TYPE& lhs, const vec& rhs) { + lhs << '<'; + + for (size_t i = 0; i < N; ++i) { + lhs << rhs.e[i]; + + if (i < N - 1) { + lhs << ", "; + } + } + + lhs << '>'; + + return lhs; +} + } // namespace mtl