diff options
Diffstat (limited to 'src/tile-iterator.hpp')
-rw-r--r-- | src/tile-iterator.hpp | 28 |
1 files changed, 11 insertions, 17 deletions
diff --git a/src/tile-iterator.hpp b/src/tile-iterator.hpp index 99a40412..0cd6d616 100644 --- a/src/tile-iterator.hpp +++ b/src/tile-iterator.hpp @@ -40,32 +40,26 @@ public: basic_tile_iterator<T>& operator=(const basic_tile_iterator<T>&) = default; basic_tile_iterator<T>& operator++() { pos++; return *this; } - basic_tile_iterator<T> operator++(int) { auto tmp = *this; operator++(); return tmp; } + basic_tile_iterator<T> operator++(int) { auto tmp = *this; operator++(); return tmp; } basic_tile_iterator<T>* operator->() { return this; } basic_tile_iterator<T>& operator*() { return *this; } auto operator<=>(const basic_tile_iterator<T>&) const noexcept = default; - void swap(basic_tile_iterator<T>& other) { - using std::swap; - swap(ptr, other.ptr); - swap(pos, other.pos); - } + void swap(basic_tile_iterator<T>& other); template<std::size_t N> - typename std::tuple_element<N, basic_tile_iterator<T>>::type 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>>(); - } + typename std::tuple_element<N, basic_tile_iterator<T>>::type get(); }; extern template class basic_tile_iterator<tile>; extern template class basic_tile_iterator<const tile>; +extern template typename std::tuple_element<0, basic_tile_iterator<tile>>::type basic_tile_iterator<tile>::get<0>(); +extern template typename std::tuple_element<1, basic_tile_iterator<tile>>::type basic_tile_iterator<tile>::get<1>(); +extern template typename std::tuple_element<2, basic_tile_iterator<tile>>::type basic_tile_iterator<tile>::get<2>(); + +extern template typename std::tuple_element<0, basic_tile_iterator<const tile>>::type basic_tile_iterator<const tile>::get<0>(); +extern template typename std::tuple_element<1, basic_tile_iterator<const tile>>::type basic_tile_iterator<const tile>::get<1>(); +extern template typename std::tuple_element<2, basic_tile_iterator<const tile>>::type basic_tile_iterator<const tile>::get<2>(); + } // namespace Magnum::Examples namespace std { |