diff options
author | Stanislaw Halik <sthalik@misaki.pl> | 2019-03-18 15:29:48 +0100 |
---|---|---|
committer | Stanislaw Halik <sthalik@misaki.pl> | 2019-03-18 16:50:19 +0100 |
commit | 46300d64f240343aa02a4ea154817eae59945552 (patch) | |
tree | 14913a9a30d12ba61e0eae067a896208732a8a91 | |
parent | ee2580a056368e2fe5c9e026b3691d2e919c6fe9 (diff) |
compat/simple-mat: add tuple destructuring
-rw-r--r-- | compat/simple-mat.hpp | 20 |
1 files changed, 20 insertions, 0 deletions
diff --git a/compat/simple-mat.hpp b/compat/simple-mat.hpp index d499ee36..01af1c99 100644 --- a/compat/simple-mat.hpp +++ b/compat/simple-mat.hpp @@ -8,6 +8,7 @@ #pragma once +#include <cstddef> #include <type_traits> #include <utility> #include <cmath> @@ -286,6 +287,12 @@ public: } }; +template<unsigned k, typename num, int h, int w> +constexpr num get(const Mat<num, h, w>& m) { return m(k); } + +template<unsigned k, typename num, int h, int w> +constexpr num& get(Mat<num, h, w>& m) { return m(k); } + } // ns simple_mat template<typename num, int h, int w> @@ -306,3 +313,16 @@ constexpr Mat<num, H, W> operator*(const Mat<num, H, W>& self, num other) ret(j, i) = self(j, i) * other; return ret; } + +namespace std { + template<typename num, int H, int W> + struct tuple_size<Mat<num, H, W>> : + std::integral_constant<std::size_t, H == 1 || W == 1 ? W * H : 0> + {}; + + template<std::size_t k, typename num, int h, int w> + struct tuple_element<k, Mat<num, h, w>> + { + using type = std::remove_const_t<std::remove_reference_t<num>>; + }; +} // ns std |