diff options
Diffstat (limited to 'src/codepoint_iterator.h')
-rw-r--r-- | src/codepoint_iterator.h | 49 |
1 files changed, 49 insertions, 0 deletions
diff --git a/src/codepoint_iterator.h b/src/codepoint_iterator.h new file mode 100644 index 0000000..938f53d --- /dev/null +++ b/src/codepoint_iterator.h @@ -0,0 +1,49 @@ +#ifndef CODEPOINT_ITERATOR_H_ +#define CODEPOINT_ITERATOR_H_ + +#include <iterator> +#include <string> +#include <exception> + +namespace UTF8 { + +class CodepointIterator : public std::iterator<std::bidirectional_iterator_tag, + char32_t, + std::string::difference_type, + const char32_t*, + const char32_t&> { + public: + CodepointIterator(std::string::const_iterator); + CodepointIterator(const CodepointIterator&); + + CodepointIterator& operator=(const CodepointIterator&); + + bool operator==(const CodepointIterator&) const; + bool operator==(const std::string::const_iterator&) const; + + bool operator!=(const CodepointIterator&) const; + bool operator!=(const std::string::const_iterator&) const; + + char32_t operator*(); + + CodepointIterator& operator++(); + CodepointIterator& operator--(); + + CodepointIterator operator++(int); + CodepointIterator operator--(int); + + private: + std::string::const_iterator iterator_; + bool dereferenced_; + char32_t codepoint_; +}; + +class codepoint_invalid: public std::exception { + virtual const char* what() const throw() { + return "codepoint_invalid"; + } +}; + +} + +#endif // CODEPOINT_ITERATOR_H_ |