From 58a7b18ba7d593b52521e4d70b4c1b546876c678 Mon Sep 17 00:00:00 2001 From: Roland Reichwein Date: Sun, 2 Jan 2022 18:18:15 +0100 Subject: Bugfix for C++17, fix comments, fix GCC warnings --- Makefile | 2 +- include/unicode.h | 5 ++--- include/unicode/iso.h | 1 + include/unicode/utf.h | 8 ++++---- src/test-unicode.cpp | 9 +++++---- 5 files changed, 13 insertions(+), 12 deletions(-) diff --git a/Makefile b/Makefile index 02498b3..55f0464 100644 --- a/Makefile +++ b/Makefile @@ -45,7 +45,7 @@ ifeq ($(CXX),clang++-13) ifeq ($(ONDEBIAN),yes) COMPILER_SUITE=clang LIBS+=-fuse-ld=lld-13 -STANDARD=c++20 +#STANDARD=c++20 endif endif diff --git a/include/unicode.h b/include/unicode.h index 34812df..feb012a 100644 --- a/include/unicode.h +++ b/include/unicode.h @@ -235,8 +235,7 @@ namespace unicode { }); accu = 0; bytes_in_accu = 0; - } else - if ((accu & 0x80) == 0) { // 1 byte sequence + } else if ((accu & 0x80) == 0) { // 1 byte sequence append_utf<7>(result, static_cast(accu & 0x7F)); accu >>= 8; bytes_in_accu -= 1; @@ -307,7 +306,7 @@ namespace unicode { while (s_index < s_size || bytes_in_accu > 0) { while (s_index < s_size && bytes_in_accu < 8) { - accu |= static_cast(*reinterpret_cast(&(s.data()[s_index]))) << (bytes_in_accu * 8); + accu |= static_cast(*reinterpret_cast(&(s.data()[s_index]))) << (bytes_in_accu * 8); ++s_index; bytes_in_accu += sizeof(typename From::value_type); } diff --git a/include/unicode/iso.h b/include/unicode/iso.h index 9b20afd..1f5f007 100644 --- a/include/unicode/iso.h +++ b/include/unicode/iso.h @@ -2,6 +2,7 @@ #include "types.h" +#include #include #include #include diff --git a/include/unicode/utf.h b/include/unicode/utf.h index 6d7c2f7..1d2f28e 100644 --- a/include/unicode/utf.h +++ b/include/unicode/utf.h @@ -43,8 +43,8 @@ namespace unicode::detail { template, bool> = true> inline bool validate_utf(const std::basic_string& s) { - int i{}; - auto size{s.size()}; + size_t i{}; + size_t size{s.size()}; while (i < size) { if (is_utf8_sequence(s[i])) { i++; @@ -86,8 +86,8 @@ namespace unicode::detail { template, bool> = true> inline bool validate_utf(const std::basic_string& s) { - int i{}; - auto size{s.size()}; + size_t i{}; + size_t size{s.size()}; while (i < size) { if (is_utf16_sequence(s[i])) { i++; diff --git a/src/test-unicode.cpp b/src/test-unicode.cpp index 7216cff..6eb523e 100644 --- a/src/test-unicode.cpp +++ b/src/test-unicode.cpp @@ -49,6 +49,7 @@ std::vector success_sets { // separators SUCCESS_TUPLE("abc\r\ndef"), SUCCESS_TUPLE("äöü\0\u20ac"), + SUCCESS_TUPLE("äöü0\u20ac"), // optimization relevant strings SUCCESS_TUPLE("01234567\u20ac01234567"), @@ -306,7 +307,7 @@ void test_utf_to_utf(std::tuple& t) result = unicode::convert(std::get(t)); BOOST_CHECK_MESSAGE(std::get(t) == result, "Container: From " << typeid(From).name() << "(" << i << ", " << std::get(t) << ") to " << typeid(To).name() << "(" << j << ", " << std::get(t) << "), got " << result); - // test facet interface + // test encoding interface result = unicode::convert, typename unicode::Encoding_t>(std::get(t)); BOOST_CHECK_MESSAGE(std::get(t) == result, "Encoding: From " << typeid(From).name() << "(" << i << ", " << std::get(t) << ") to " << typeid(To).name() << "(" << j << ", " << std::get(t) << "), got " << result); @@ -384,7 +385,7 @@ void test_utf_to_utf_failure(std::basic_string& s) BOOST_ERROR("Unexpected error on convert(): " << ex.what()); }; - // via facet + // via encoding try { (void) unicode::convert,typename unicode::Encoding_t>(s); BOOST_ERROR("Encoding: Expected exception at index: " << index << ", " << typeid(From).name() << " -> " << typeid(To).name()); @@ -530,7 +531,7 @@ void test_random_invalid(random_context& rc, size_t length) BOOST_ERROR("Unexpected error on convert(): " << ex.what()); } - // facet interface + // encoding interface try { To result{unicode::convert,typename unicode::Encoding_t>(r)}; @@ -602,7 +603,7 @@ void test_random_valid(random_context& rc, size_t length, const std::string& des return unicode::convert>(s); }); - for (int i = 0; i < list.size(); i++) { + for (size_t i = 0; i < list.size(); i++) { BOOST_CHECK(list[i].size() >= u32list[i].size()); To result{unicode::convert,typename unicode::Encoding_t>(list[i])}; BOOST_CHECK(result.size() >= u32list[i].size()); -- cgit v1.2.3