diff options
| author | Stanislaw Halik <sthalik@misaki.pl> | 2022-10-07 21:38:42 +0200 |
|---|---|---|
| committer | Stanislaw Halik <sthalik@misaki.pl> | 2022-10-07 21:38:42 +0200 |
| commit | d19a44bcb53cebbee0ae51981f66b93b31cb9dcb (patch) | |
| tree | f7d7d5ece879418b0a19e3b61cae2b0136096d87 /src/tile-iterator.cpp | |
| parent | 6e19e9446b436d9608b5a4931f25d328a5e56f93 (diff) | |
a
Diffstat (limited to 'src/tile-iterator.cpp')
| -rw-r--r-- | src/tile-iterator.cpp | 31 |
1 files changed, 31 insertions, 0 deletions
diff --git a/src/tile-iterator.cpp b/src/tile-iterator.cpp index ea98a6ee..d2dbf98d 100644 --- a/src/tile-iterator.cpp +++ b/src/tile-iterator.cpp @@ -1,7 +1,38 @@ #include "tile-iterator.hpp" +#include "tile.hpp" namespace Magnum::Examples { +template <typename T> +void basic_tile_iterator<T>::swap(basic_tile_iterator<T>& other) +{ + using std::swap; + swap(ptr, other.ptr); + swap(pos, other.pos); +} + +template <typename T> +template <std::size_t N> +typename std::tuple_element<N, basic_tile_iterator<T>>::type basic_tile_iterator<T>::get() +{ + if constexpr(N == 0) + return pos == TILE_COUNT ? ptr[0] : ptr[pos]; + else if constexpr(N == 1) + return pos; + else if constexpr(N == 2) + return local_coords{pos}; + else + return std::void_t<std::integral_constant<int, N>>(); +} + +template typename std::tuple_element<0, basic_tile_iterator<tile>>::type basic_tile_iterator<tile>::get<0>(); +template typename std::tuple_element<1, basic_tile_iterator<tile>>::type basic_tile_iterator<tile>::get<1>(); +template typename std::tuple_element<2, basic_tile_iterator<tile>>::type basic_tile_iterator<tile>::get<2>(); + +template typename std::tuple_element<0, basic_tile_iterator<const tile>>::type basic_tile_iterator<const tile>::get<0>(); +template typename std::tuple_element<1, basic_tile_iterator<const tile>>::type basic_tile_iterator<const tile>::get<1>(); +template typename std::tuple_element<2, basic_tile_iterator<const tile>>::type basic_tile_iterator<const tile>::get<2>(); + template class basic_tile_iterator<tile>; template class basic_tile_iterator<const tile>; |
