diff options
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>; |