aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAdrian Kummerländer2014-04-10 20:26:20 +0200
committerAdrian Kummerländer2014-04-10 20:26:20 +0200
commitc61de194f49c47880f8a886c88dcf044f893861a (patch)
tree18bf3086d007d4098fddcbbe62b0469c548a944e
parent572af7499d088a239d37e9dc09e5e7ac45c13d29 (diff)
downloadCodepointIterator-c61de194f49c47880f8a886c88dcf044f893861a.tar
CodepointIterator-c61de194f49c47880f8a886c88dcf044f893861a.tar.gz
CodepointIterator-c61de194f49c47880f8a886c88dcf044f893861a.tar.bz2
CodepointIterator-c61de194f49c47880f8a886c88dcf044f893861a.tar.lz
CodepointIterator-c61de194f49c47880f8a886c88dcf044f893861a.tar.xz
CodepointIterator-c61de194f49c47880f8a886c88dcf044f893861a.tar.zst
CodepointIterator-c61de194f49c47880f8a886c88dcf044f893861a.zip
Added operator- member implementation and improved test cases
* operator- takes a reference to a const std::string::const_iterator and as such enables determining the actual position of a codepoint within a string * ranged for loops in test cases now take the iterator value by rvalue reference instead of by value
-rw-r--r--src/codepoint_iterator.cc5
-rw-r--r--src/codepoint_iterator.h2
-rw-r--r--test.cc6
3 files changed, 10 insertions, 3 deletions
diff --git a/src/codepoint_iterator.cc b/src/codepoint_iterator.cc
index b2f6d81..59cb23b 100644
--- a/src/codepoint_iterator.cc
+++ b/src/codepoint_iterator.cc
@@ -34,6 +34,11 @@ bool CodepointIterator::operator!=(
return this->iterator_ != src;
}
+std::ptrdiff_t CodepointIterator::operator-(
+ const std::string::const_iterator& src) const {
+ return this->iterator_ - src;
+}
+
char32_t CodepointIterator::operator*() {
std::uint8_t currByte = *(this->iterator_);
char32_t codePoint = 0;
diff --git a/src/codepoint_iterator.h b/src/codepoint_iterator.h
index b505587..d1806e5 100644
--- a/src/codepoint_iterator.h
+++ b/src/codepoint_iterator.h
@@ -22,6 +22,8 @@ class CodepointIterator : public std::iterator<std::bidirectional_iterator_tag,
bool operator!=(const CodepointIterator&) const;
bool operator!=(const std::string::const_iterator&) const;
+ std::ptrdiff_t operator-(const std::string::const_iterator&) const;
+
char32_t operator*();
CodepointIterator& operator++();
diff --git a/test.cc b/test.cc
index 0693970..f0feb74 100644
--- a/test.cc
+++ b/test.cc
@@ -43,7 +43,7 @@ class CodepointIteratorTest : public ::testing::Test {
};
TEST_F(CodepointIteratorTest, ForwardIteration) {
- for ( auto tmp : this->sample_ ) {
+ for ( auto&& tmp : this->sample_ ) {
size_t length = 0;
for ( UTF8::CodepointIterator iter(tmp.text.cbegin());
@@ -57,7 +57,7 @@ TEST_F(CodepointIteratorTest, ForwardIteration) {
}
TEST_F(CodepointIteratorTest, ReverseIteration) {
- for ( auto tmp : this->sample_ ) {
+ for ( auto&& tmp : this->sample_ ) {
size_t length = 0;
for ( UTF8::CodepointIterator iter(tmp.text.cend());
@@ -71,7 +71,7 @@ TEST_F(CodepointIteratorTest, ReverseIteration) {
}
TEST_F(CodepointIteratorTest, Dereferencing) {
- for ( auto tmp : this->sample_ ) {
+ for ( auto&& tmp : this->sample_ ) {
size_t index = 0;
for ( UTF8::CodepointIterator iter(tmp.text.cbegin());