From 4cfb46ff2e6c63c28c1881b366e33d817c45b637 Mon Sep 17 00:00:00 2001 From: Maxime Coste Date: Wed, 31 Oct 2018 19:41:12 +1100 Subject: Support different type for iterators and sentinel in utf8 functions --- src/utf8_iterator.hh | 16 +++++++++++----- 1 file changed, 11 insertions(+), 5 deletions(-) (limited to 'src/utf8_iterator.hh') diff --git a/src/utf8_iterator.hh b/src/utf8_iterator.hh index 20386069..c145f900 100644 --- a/src/utf8_iterator.hh +++ b/src/utf8_iterator.hh @@ -14,6 +14,7 @@ namespace utf8 // adapter for an iterator on bytes which permits to iterate // on unicode codepoints instead. template @@ -25,7 +26,7 @@ public: iterator() = default; constexpr static bool noexcept_policy = noexcept(InvalidPolicy{}(0)); - iterator(BaseIt it, BaseIt begin, BaseIt end) noexcept + iterator(BaseIt it, Sentinel begin, Sentinel end) noexcept : m_it{std::move(it)}, m_begin{std::move(begin)}, m_end{std::move(end)} {} @@ -105,8 +106,13 @@ public: bool operator> (const iterator& other) const noexcept { return m_it > other.m_it; } bool operator>= (const iterator& other) const noexcept { return m_it >= other.m_it; } - bool operator==(const BaseIt& other) const noexcept { return m_it == other; } - bool operator!=(const BaseIt& other) const noexcept { return m_it != other; } + template + std::enable_if_t::value or std::is_same::value, bool> + operator==(const T& other) const noexcept { return m_it == other; } + + template + std::enable_if_t::value or std::is_same::value, bool> + operator!=(const T& other) const noexcept { return m_it != other; } bool operator< (const BaseIt& other) const noexcept { return m_it < other; } bool operator<= (const BaseIt& other) const noexcept { return m_it <= other; } @@ -136,8 +142,8 @@ private: } BaseIt m_it; - BaseIt m_begin; - BaseIt m_end; + Sentinel m_begin; + Sentinel m_end; mutable CodepointType m_value = -1; }; -- cgit v1.2.3