summaryrefslogtreecommitdiffhomepage
path: root/src/tile-iterator.hpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/tile-iterator.hpp')
-rw-r--r--src/tile-iterator.hpp28
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 {