diff options
| author | Maxime Coste <mawww@kakoune.org> | 2017-06-07 10:58:49 +0100 |
|---|---|---|
| committer | Maxime Coste <mawww@kakoune.org> | 2017-06-07 10:58:49 +0100 |
| commit | 5a5d2ad7cbe19099ae2128be9921bc174e6b119f (patch) | |
| tree | afab3b83470898e0a770d441388c80e1fb3cdefe /src | |
| parent | cb6ef4afb63b6b3cf994d51cb001e78e1538b8e7 (diff) | |
noexcept-ify utf8::iterator methods
Diffstat (limited to 'src')
| -rw-r--r-- | src/utf8_iterator.hh | 53 |
1 files changed, 27 insertions, 26 deletions
diff --git a/src/utf8_iterator.hh b/src/utf8_iterator.hh index 999ebd4d..20dc0b83 100644 --- a/src/utf8_iterator.hh +++ b/src/utf8_iterator.hh @@ -22,45 +22,46 @@ class iterator : public std::iterator<std::bidirectional_iterator_tag, { public: iterator() = default; + constexpr static bool noexcept_policy = noexcept(InvalidPolicy{}(0)); - iterator(BaseIt it, BaseIt begin, BaseIt end) + iterator(BaseIt it, BaseIt begin, BaseIt end) noexcept : m_it{std::move(it)}, m_begin{std::move(begin)}, m_end{std::move(end)} {} template<typename Container> - iterator(BaseIt it, const Container& c) + iterator(BaseIt it, const Container& c) noexcept : m_it{std::move(it)}, m_begin{std::begin(c)}, m_end{std::end(c)} {} - iterator& operator++() + iterator& operator++() noexcept { utf8::to_next(m_it, m_end); invalidate_value(); return *this; } - iterator operator++(int) + iterator operator++(int) noexcept { iterator save = *this; ++*this; return save; } - iterator& operator--() + iterator& operator--() noexcept { utf8::to_previous(m_it, m_begin); invalidate_value(); return *this; } - iterator operator--(int) + iterator operator--(int) noexcept { iterator save = *this; --*this; return save; } - iterator operator+(DifferenceType count) const + iterator operator+(DifferenceType count) const noexcept { if (count < 0) return operator-(-count); @@ -71,7 +72,7 @@ public: return res; } - iterator operator-(DifferenceType count) const + iterator operator-(DifferenceType count) const noexcept { if (count < 0) return operator+(-count); @@ -82,39 +83,39 @@ public: return res; } - bool operator==(const iterator& other) const { return m_it == other.m_it; } - bool operator!=(const iterator& other) const { return m_it != other.m_it; } + 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 iterator& other) const { return m_it < other.m_it; } - bool operator<= (const iterator& other) const { return m_it <= other.m_it; } + 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 iterator& other) const { return m_it > other.m_it; } - bool operator>= (const iterator& other) const { return m_it >= other.m_it; } + 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) { return m_it == other; } - bool operator!=(const BaseIt& other) { return m_it != other; } + bool operator==(const BaseIt& other) noexcept { return m_it == other; } + bool operator!=(const BaseIt& other) noexcept { return m_it != other; } - bool operator< (const BaseIt& other) const { return m_it < other; } - bool operator<= (const BaseIt& other) const { 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; } - bool operator> (const BaseIt& other) const { return m_it > other; } - bool operator>= (const BaseIt& other) const { 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; } - DifferenceType operator-(const iterator& other) const + DifferenceType operator-(const iterator& other) const noexcept(noexcept_policy) { - return (DifferenceType)utf8::distance(other.m_it, m_it); + return (DifferenceType)utf8::distance<InvalidPolicy>(other.m_it, m_it); } - CodepointType operator*() const + CodepointType operator*() const noexcept(noexcept_policy) { return get_value(); } - const BaseIt& base() const { return m_it; } + const BaseIt& base() const noexcept(noexcept_policy) { return m_it; } private: - void invalidate_value() { m_value = -1; } - CodepointType get_value() const + void invalidate_value() noexcept { m_value = -1; } + CodepointType get_value() const noexcept(noexcept_policy) { if (m_value == (CodepointType)-1) m_value = (CodepointType)utf8::codepoint<InvalidPolicy>(m_it, m_end); |
