icinga2/third-party/utf8cpp/source/utf8/checked.h

320 lines
11 KiB
C
Raw Normal View History

// Copyright 2006-2016 Nemanja Trifunovic
/*
Permission is hereby granted, free of charge, to any person or organization
obtaining a copy of the software and accompanying documentation covered by
this license (the "Software") to use, reproduce, display, distribute,
execute, and transmit the Software, and to prepare derivative works of the
Software, and to permit third-parties to whom the Software is furnished to
do so, all subject to the following:
The copyright notices in the Software and this entire statement, including
the above license grant, this restriction and the following disclaimer,
must be included in all copies of the Software, in whole or in part, and
all derivative works of the Software, unless such copies or derivative
works are solely in the form of machine-executable object code generated by
a source language processor.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE, TITLE AND NON-INFRINGEMENT. IN NO EVENT
SHALL THE COPYRIGHT HOLDERS OR ANYONE DISTRIBUTING THE SOFTWARE BE LIABLE
FOR ANY DAMAGES OR OTHER LIABILITY, WHETHER IN CONTRACT, TORT OR OTHERWISE,
ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
DEALINGS IN THE SOFTWARE.
*/
#ifndef UTF8_FOR_CPP_CHECKED_H_2675DCD0_9480_4c0c_B92A_CC14C027B731
#define UTF8_FOR_CPP_CHECKED_H_2675DCD0_9480_4c0c_B92A_CC14C027B731
#include "core.h"
#include <stdexcept>
namespace utf8
{
// Base for the exceptions that may be thrown from the library
class exception : public ::std::exception {
};
// Exceptions that may be thrown from the library functions.
class invalid_code_point : public exception {
uint32_t cp;
public:
invalid_code_point(uint32_t codepoint) : cp(codepoint) {}
Squashed 'third-party/utf8cpp/' changes from 82344d605..79835a5fa 79835a5fa Remove -Wsign-conversion from test builds. 53398ca70 Restructure tests. e3e57c811 Fix for issue #92: Clang 10 Compiler warnings d736c29d3 Fix -Wconversion warnings in tests when -funsigned-char option is used. 780bd57d6 Merge pull request #96 from Finkman/provide-ns-on-installed 73b347f31 Adds the following advantages: - utf8::cpp is available, even when installed - cmake is aware of the library version - compatible with previous usage: target utf8cpp available when installed 3ca904b21 Version 3.2.2 aa3b12c52 Added a couple of statis_casts to eliminate signed conversion warnings. ee90a4a52 Added compiler options to enable warnings. d8b92208f Merge pull request #87 from cschreib/patch-1 a92f85526 Add missing export() command b85efd66a Test string literals 4e1149766 Merge pull request #80 from RT222/master ec6747005 Fix the inclusion of both cpp11 and cpp17 headers on C++17 compilation ddd38b304 Version 3.2 2af93bd67 Documentation: C++ 17 support. b6cd18f92 test_utf32to8 tests string_view, not string 0991356b7 find_invalid(string_view) returns string_view::npos, not string::npos 4bed367c1 Update test docker image a7d530de5 C++ 17 support: add tests, remove duplicate utf8::append() 50361edbf Merge pull request #77 from RT222/master fe79d14ae Switching from gtest to ftest for unit-testing. 7d17aed95 Merge pull request #79 from fu7mu4/it-is-code 957e30052 Does it have syntax hilight d40e4948f Support for C++17 e39907b38 Version 3.1.2 3c85cd48f Add prefix to NOEXCEPT and OVERRIDE macros. 944ef0561 Merge pull request #55 from Flamefire/disable_tests_for_subproject dc2442c2e Merge pull request #61 from xenia-project/master 2b1521b48 Fix deprecated std::iterator usage (STL4015). bee3b1349 Enable tests, docu, install only when building as root project c3f9261eb Merge pull request #51 from AkiraMiyakoda/msvc_warning 7fb121130 Fix an MSVC warning about narrowing conversion. 170e2d11f Merge pull request #44 from tvanriper/patch-1 32ccbfb74 Removed utf8 path from #include. 2370b95a8 Compile negative test with C++ 98 89cfc3e38 Replace throw() with noexcept when using C++11 or later 687a59d88 Add override keyword when compiled with C++11 or later f26d39e8a Move C++ version detection to core.h b1002fd19 Introduce UTF_CPP_CPLUSPLUS macro. 088dd3ad7 Merge pull request #40 from xantares/patch-1 afc32b4c0 Always use GNU install layout except MSVC 82c674b7a Version 3.1 33516ff07 Test -fno-exceptions with unchecked api f16bdde67 Merge pull request #37 from nemtrif/unchecked_replace_invalid c52319302 unchecked::replace_invalid() a3fa4ee84 Merge pull request #36 from nemtrif/gtesturl 8fd51836a Submodule url for googletest is https ad27c7d5e Merge pull request #33 from nemtrif/optionalinstall 293f85d97 Installation is optional a540297fd Version 3.0.3 04d29d92a Add inline declarations to non-template functions in cpp11.h 741259277 Merge pull request #30 from nemtrif/ci 335a3ee6a Update docker to 3.0.1 d5e847d0a Update project version e6da1a36a Set up CircleCI 0b45681b6 Add Dockerfile 66804081d Introduce GTest a0a2d9d1e Fix for the cpp11.h header guard 7db72814a Merge pull request #24 from nemtrif/release_3_0 007f8e32c advance() can work in backward direction. 92158c9ce Minor whitespace fixes 236d61942 Update documentation for replace_invalid d8b09b301 Merge pull request #21 from glebm/fix-remove-invalid 3793703e7 Remove unused test data 080f1e6a3 Remove utf8reader sample 00d73e4a0 Remove deprecated functions 2b8596149 Support for C++11 f637e70c1 Merge pull request #22 from AkiraMiyakoda/fix-msvc2019-warning cfc351c86 Fix MSVC 2017-2019 warning about negative unsigned value. 026aed63d replace_invalid: Replace final incomplete sequence git-subtree-dir: third-party/utf8cpp git-subtree-split: 79835a5fa57271f07a90ed36123e30ae9741178e
2023-02-15 11:25:31 +01:00
virtual const char* what() const UTF_CPP_NOEXCEPT UTF_CPP_OVERRIDE { return "Invalid code point"; }
uint32_t code_point() const {return cp;}
};
class invalid_utf8 : public exception {
uint8_t u8;
public:
invalid_utf8 (uint8_t u) : u8(u) {}
Squashed 'third-party/utf8cpp/' changes from 82344d605..79835a5fa 79835a5fa Remove -Wsign-conversion from test builds. 53398ca70 Restructure tests. e3e57c811 Fix for issue #92: Clang 10 Compiler warnings d736c29d3 Fix -Wconversion warnings in tests when -funsigned-char option is used. 780bd57d6 Merge pull request #96 from Finkman/provide-ns-on-installed 73b347f31 Adds the following advantages: - utf8::cpp is available, even when installed - cmake is aware of the library version - compatible with previous usage: target utf8cpp available when installed 3ca904b21 Version 3.2.2 aa3b12c52 Added a couple of statis_casts to eliminate signed conversion warnings. ee90a4a52 Added compiler options to enable warnings. d8b92208f Merge pull request #87 from cschreib/patch-1 a92f85526 Add missing export() command b85efd66a Test string literals 4e1149766 Merge pull request #80 from RT222/master ec6747005 Fix the inclusion of both cpp11 and cpp17 headers on C++17 compilation ddd38b304 Version 3.2 2af93bd67 Documentation: C++ 17 support. b6cd18f92 test_utf32to8 tests string_view, not string 0991356b7 find_invalid(string_view) returns string_view::npos, not string::npos 4bed367c1 Update test docker image a7d530de5 C++ 17 support: add tests, remove duplicate utf8::append() 50361edbf Merge pull request #77 from RT222/master fe79d14ae Switching from gtest to ftest for unit-testing. 7d17aed95 Merge pull request #79 from fu7mu4/it-is-code 957e30052 Does it have syntax hilight d40e4948f Support for C++17 e39907b38 Version 3.1.2 3c85cd48f Add prefix to NOEXCEPT and OVERRIDE macros. 944ef0561 Merge pull request #55 from Flamefire/disable_tests_for_subproject dc2442c2e Merge pull request #61 from xenia-project/master 2b1521b48 Fix deprecated std::iterator usage (STL4015). bee3b1349 Enable tests, docu, install only when building as root project c3f9261eb Merge pull request #51 from AkiraMiyakoda/msvc_warning 7fb121130 Fix an MSVC warning about narrowing conversion. 170e2d11f Merge pull request #44 from tvanriper/patch-1 32ccbfb74 Removed utf8 path from #include. 2370b95a8 Compile negative test with C++ 98 89cfc3e38 Replace throw() with noexcept when using C++11 or later 687a59d88 Add override keyword when compiled with C++11 or later f26d39e8a Move C++ version detection to core.h b1002fd19 Introduce UTF_CPP_CPLUSPLUS macro. 088dd3ad7 Merge pull request #40 from xantares/patch-1 afc32b4c0 Always use GNU install layout except MSVC 82c674b7a Version 3.1 33516ff07 Test -fno-exceptions with unchecked api f16bdde67 Merge pull request #37 from nemtrif/unchecked_replace_invalid c52319302 unchecked::replace_invalid() a3fa4ee84 Merge pull request #36 from nemtrif/gtesturl 8fd51836a Submodule url for googletest is https ad27c7d5e Merge pull request #33 from nemtrif/optionalinstall 293f85d97 Installation is optional a540297fd Version 3.0.3 04d29d92a Add inline declarations to non-template functions in cpp11.h 741259277 Merge pull request #30 from nemtrif/ci 335a3ee6a Update docker to 3.0.1 d5e847d0a Update project version e6da1a36a Set up CircleCI 0b45681b6 Add Dockerfile 66804081d Introduce GTest a0a2d9d1e Fix for the cpp11.h header guard 7db72814a Merge pull request #24 from nemtrif/release_3_0 007f8e32c advance() can work in backward direction. 92158c9ce Minor whitespace fixes 236d61942 Update documentation for replace_invalid d8b09b301 Merge pull request #21 from glebm/fix-remove-invalid 3793703e7 Remove unused test data 080f1e6a3 Remove utf8reader sample 00d73e4a0 Remove deprecated functions 2b8596149 Support for C++11 f637e70c1 Merge pull request #22 from AkiraMiyakoda/fix-msvc2019-warning cfc351c86 Fix MSVC 2017-2019 warning about negative unsigned value. 026aed63d replace_invalid: Replace final incomplete sequence git-subtree-dir: third-party/utf8cpp git-subtree-split: 79835a5fa57271f07a90ed36123e30ae9741178e
2023-02-15 11:25:31 +01:00
invalid_utf8 (char c) : u8(static_cast<uint8_t>(c)) {}
virtual const char* what() const UTF_CPP_NOEXCEPT UTF_CPP_OVERRIDE { return "Invalid UTF-8"; }
uint8_t utf8_octet() const {return u8;}
};
class invalid_utf16 : public exception {
uint16_t u16;
public:
invalid_utf16 (uint16_t u) : u16(u) {}
Squashed 'third-party/utf8cpp/' changes from 82344d605..79835a5fa 79835a5fa Remove -Wsign-conversion from test builds. 53398ca70 Restructure tests. e3e57c811 Fix for issue #92: Clang 10 Compiler warnings d736c29d3 Fix -Wconversion warnings in tests when -funsigned-char option is used. 780bd57d6 Merge pull request #96 from Finkman/provide-ns-on-installed 73b347f31 Adds the following advantages: - utf8::cpp is available, even when installed - cmake is aware of the library version - compatible with previous usage: target utf8cpp available when installed 3ca904b21 Version 3.2.2 aa3b12c52 Added a couple of statis_casts to eliminate signed conversion warnings. ee90a4a52 Added compiler options to enable warnings. d8b92208f Merge pull request #87 from cschreib/patch-1 a92f85526 Add missing export() command b85efd66a Test string literals 4e1149766 Merge pull request #80 from RT222/master ec6747005 Fix the inclusion of both cpp11 and cpp17 headers on C++17 compilation ddd38b304 Version 3.2 2af93bd67 Documentation: C++ 17 support. b6cd18f92 test_utf32to8 tests string_view, not string 0991356b7 find_invalid(string_view) returns string_view::npos, not string::npos 4bed367c1 Update test docker image a7d530de5 C++ 17 support: add tests, remove duplicate utf8::append() 50361edbf Merge pull request #77 from RT222/master fe79d14ae Switching from gtest to ftest for unit-testing. 7d17aed95 Merge pull request #79 from fu7mu4/it-is-code 957e30052 Does it have syntax hilight d40e4948f Support for C++17 e39907b38 Version 3.1.2 3c85cd48f Add prefix to NOEXCEPT and OVERRIDE macros. 944ef0561 Merge pull request #55 from Flamefire/disable_tests_for_subproject dc2442c2e Merge pull request #61 from xenia-project/master 2b1521b48 Fix deprecated std::iterator usage (STL4015). bee3b1349 Enable tests, docu, install only when building as root project c3f9261eb Merge pull request #51 from AkiraMiyakoda/msvc_warning 7fb121130 Fix an MSVC warning about narrowing conversion. 170e2d11f Merge pull request #44 from tvanriper/patch-1 32ccbfb74 Removed utf8 path from #include. 2370b95a8 Compile negative test with C++ 98 89cfc3e38 Replace throw() with noexcept when using C++11 or later 687a59d88 Add override keyword when compiled with C++11 or later f26d39e8a Move C++ version detection to core.h b1002fd19 Introduce UTF_CPP_CPLUSPLUS macro. 088dd3ad7 Merge pull request #40 from xantares/patch-1 afc32b4c0 Always use GNU install layout except MSVC 82c674b7a Version 3.1 33516ff07 Test -fno-exceptions with unchecked api f16bdde67 Merge pull request #37 from nemtrif/unchecked_replace_invalid c52319302 unchecked::replace_invalid() a3fa4ee84 Merge pull request #36 from nemtrif/gtesturl 8fd51836a Submodule url for googletest is https ad27c7d5e Merge pull request #33 from nemtrif/optionalinstall 293f85d97 Installation is optional a540297fd Version 3.0.3 04d29d92a Add inline declarations to non-template functions in cpp11.h 741259277 Merge pull request #30 from nemtrif/ci 335a3ee6a Update docker to 3.0.1 d5e847d0a Update project version e6da1a36a Set up CircleCI 0b45681b6 Add Dockerfile 66804081d Introduce GTest a0a2d9d1e Fix for the cpp11.h header guard 7db72814a Merge pull request #24 from nemtrif/release_3_0 007f8e32c advance() can work in backward direction. 92158c9ce Minor whitespace fixes 236d61942 Update documentation for replace_invalid d8b09b301 Merge pull request #21 from glebm/fix-remove-invalid 3793703e7 Remove unused test data 080f1e6a3 Remove utf8reader sample 00d73e4a0 Remove deprecated functions 2b8596149 Support for C++11 f637e70c1 Merge pull request #22 from AkiraMiyakoda/fix-msvc2019-warning cfc351c86 Fix MSVC 2017-2019 warning about negative unsigned value. 026aed63d replace_invalid: Replace final incomplete sequence git-subtree-dir: third-party/utf8cpp git-subtree-split: 79835a5fa57271f07a90ed36123e30ae9741178e
2023-02-15 11:25:31 +01:00
virtual const char* what() const UTF_CPP_NOEXCEPT UTF_CPP_OVERRIDE { return "Invalid UTF-16"; }
uint16_t utf16_word() const {return u16;}
};
class not_enough_room : public exception {
public:
Squashed 'third-party/utf8cpp/' changes from 82344d605..79835a5fa 79835a5fa Remove -Wsign-conversion from test builds. 53398ca70 Restructure tests. e3e57c811 Fix for issue #92: Clang 10 Compiler warnings d736c29d3 Fix -Wconversion warnings in tests when -funsigned-char option is used. 780bd57d6 Merge pull request #96 from Finkman/provide-ns-on-installed 73b347f31 Adds the following advantages: - utf8::cpp is available, even when installed - cmake is aware of the library version - compatible with previous usage: target utf8cpp available when installed 3ca904b21 Version 3.2.2 aa3b12c52 Added a couple of statis_casts to eliminate signed conversion warnings. ee90a4a52 Added compiler options to enable warnings. d8b92208f Merge pull request #87 from cschreib/patch-1 a92f85526 Add missing export() command b85efd66a Test string literals 4e1149766 Merge pull request #80 from RT222/master ec6747005 Fix the inclusion of both cpp11 and cpp17 headers on C++17 compilation ddd38b304 Version 3.2 2af93bd67 Documentation: C++ 17 support. b6cd18f92 test_utf32to8 tests string_view, not string 0991356b7 find_invalid(string_view) returns string_view::npos, not string::npos 4bed367c1 Update test docker image a7d530de5 C++ 17 support: add tests, remove duplicate utf8::append() 50361edbf Merge pull request #77 from RT222/master fe79d14ae Switching from gtest to ftest for unit-testing. 7d17aed95 Merge pull request #79 from fu7mu4/it-is-code 957e30052 Does it have syntax hilight d40e4948f Support for C++17 e39907b38 Version 3.1.2 3c85cd48f Add prefix to NOEXCEPT and OVERRIDE macros. 944ef0561 Merge pull request #55 from Flamefire/disable_tests_for_subproject dc2442c2e Merge pull request #61 from xenia-project/master 2b1521b48 Fix deprecated std::iterator usage (STL4015). bee3b1349 Enable tests, docu, install only when building as root project c3f9261eb Merge pull request #51 from AkiraMiyakoda/msvc_warning 7fb121130 Fix an MSVC warning about narrowing conversion. 170e2d11f Merge pull request #44 from tvanriper/patch-1 32ccbfb74 Removed utf8 path from #include. 2370b95a8 Compile negative test with C++ 98 89cfc3e38 Replace throw() with noexcept when using C++11 or later 687a59d88 Add override keyword when compiled with C++11 or later f26d39e8a Move C++ version detection to core.h b1002fd19 Introduce UTF_CPP_CPLUSPLUS macro. 088dd3ad7 Merge pull request #40 from xantares/patch-1 afc32b4c0 Always use GNU install layout except MSVC 82c674b7a Version 3.1 33516ff07 Test -fno-exceptions with unchecked api f16bdde67 Merge pull request #37 from nemtrif/unchecked_replace_invalid c52319302 unchecked::replace_invalid() a3fa4ee84 Merge pull request #36 from nemtrif/gtesturl 8fd51836a Submodule url for googletest is https ad27c7d5e Merge pull request #33 from nemtrif/optionalinstall 293f85d97 Installation is optional a540297fd Version 3.0.3 04d29d92a Add inline declarations to non-template functions in cpp11.h 741259277 Merge pull request #30 from nemtrif/ci 335a3ee6a Update docker to 3.0.1 d5e847d0a Update project version e6da1a36a Set up CircleCI 0b45681b6 Add Dockerfile 66804081d Introduce GTest a0a2d9d1e Fix for the cpp11.h header guard 7db72814a Merge pull request #24 from nemtrif/release_3_0 007f8e32c advance() can work in backward direction. 92158c9ce Minor whitespace fixes 236d61942 Update documentation for replace_invalid d8b09b301 Merge pull request #21 from glebm/fix-remove-invalid 3793703e7 Remove unused test data 080f1e6a3 Remove utf8reader sample 00d73e4a0 Remove deprecated functions 2b8596149 Support for C++11 f637e70c1 Merge pull request #22 from AkiraMiyakoda/fix-msvc2019-warning cfc351c86 Fix MSVC 2017-2019 warning about negative unsigned value. 026aed63d replace_invalid: Replace final incomplete sequence git-subtree-dir: third-party/utf8cpp git-subtree-split: 79835a5fa57271f07a90ed36123e30ae9741178e
2023-02-15 11:25:31 +01:00
virtual const char* what() const UTF_CPP_NOEXCEPT UTF_CPP_OVERRIDE { return "Not enough space"; }
};
/// The library API - functions intended to be called by the users
template <typename octet_iterator>
octet_iterator append(uint32_t cp, octet_iterator result)
{
if (!utf8::internal::is_code_point_valid(cp))
throw invalid_code_point(cp);
Squashed 'third-party/utf8cpp/' changes from 82344d605..79835a5fa 79835a5fa Remove -Wsign-conversion from test builds. 53398ca70 Restructure tests. e3e57c811 Fix for issue #92: Clang 10 Compiler warnings d736c29d3 Fix -Wconversion warnings in tests when -funsigned-char option is used. 780bd57d6 Merge pull request #96 from Finkman/provide-ns-on-installed 73b347f31 Adds the following advantages: - utf8::cpp is available, even when installed - cmake is aware of the library version - compatible with previous usage: target utf8cpp available when installed 3ca904b21 Version 3.2.2 aa3b12c52 Added a couple of statis_casts to eliminate signed conversion warnings. ee90a4a52 Added compiler options to enable warnings. d8b92208f Merge pull request #87 from cschreib/patch-1 a92f85526 Add missing export() command b85efd66a Test string literals 4e1149766 Merge pull request #80 from RT222/master ec6747005 Fix the inclusion of both cpp11 and cpp17 headers on C++17 compilation ddd38b304 Version 3.2 2af93bd67 Documentation: C++ 17 support. b6cd18f92 test_utf32to8 tests string_view, not string 0991356b7 find_invalid(string_view) returns string_view::npos, not string::npos 4bed367c1 Update test docker image a7d530de5 C++ 17 support: add tests, remove duplicate utf8::append() 50361edbf Merge pull request #77 from RT222/master fe79d14ae Switching from gtest to ftest for unit-testing. 7d17aed95 Merge pull request #79 from fu7mu4/it-is-code 957e30052 Does it have syntax hilight d40e4948f Support for C++17 e39907b38 Version 3.1.2 3c85cd48f Add prefix to NOEXCEPT and OVERRIDE macros. 944ef0561 Merge pull request #55 from Flamefire/disable_tests_for_subproject dc2442c2e Merge pull request #61 from xenia-project/master 2b1521b48 Fix deprecated std::iterator usage (STL4015). bee3b1349 Enable tests, docu, install only when building as root project c3f9261eb Merge pull request #51 from AkiraMiyakoda/msvc_warning 7fb121130 Fix an MSVC warning about narrowing conversion. 170e2d11f Merge pull request #44 from tvanriper/patch-1 32ccbfb74 Removed utf8 path from #include. 2370b95a8 Compile negative test with C++ 98 89cfc3e38 Replace throw() with noexcept when using C++11 or later 687a59d88 Add override keyword when compiled with C++11 or later f26d39e8a Move C++ version detection to core.h b1002fd19 Introduce UTF_CPP_CPLUSPLUS macro. 088dd3ad7 Merge pull request #40 from xantares/patch-1 afc32b4c0 Always use GNU install layout except MSVC 82c674b7a Version 3.1 33516ff07 Test -fno-exceptions with unchecked api f16bdde67 Merge pull request #37 from nemtrif/unchecked_replace_invalid c52319302 unchecked::replace_invalid() a3fa4ee84 Merge pull request #36 from nemtrif/gtesturl 8fd51836a Submodule url for googletest is https ad27c7d5e Merge pull request #33 from nemtrif/optionalinstall 293f85d97 Installation is optional a540297fd Version 3.0.3 04d29d92a Add inline declarations to non-template functions in cpp11.h 741259277 Merge pull request #30 from nemtrif/ci 335a3ee6a Update docker to 3.0.1 d5e847d0a Update project version e6da1a36a Set up CircleCI 0b45681b6 Add Dockerfile 66804081d Introduce GTest a0a2d9d1e Fix for the cpp11.h header guard 7db72814a Merge pull request #24 from nemtrif/release_3_0 007f8e32c advance() can work in backward direction. 92158c9ce Minor whitespace fixes 236d61942 Update documentation for replace_invalid d8b09b301 Merge pull request #21 from glebm/fix-remove-invalid 3793703e7 Remove unused test data 080f1e6a3 Remove utf8reader sample 00d73e4a0 Remove deprecated functions 2b8596149 Support for C++11 f637e70c1 Merge pull request #22 from AkiraMiyakoda/fix-msvc2019-warning cfc351c86 Fix MSVC 2017-2019 warning about negative unsigned value. 026aed63d replace_invalid: Replace final incomplete sequence git-subtree-dir: third-party/utf8cpp git-subtree-split: 79835a5fa57271f07a90ed36123e30ae9741178e
2023-02-15 11:25:31 +01:00
return internal::append(cp, result);
}
template <typename octet_iterator, typename output_iterator>
output_iterator replace_invalid(octet_iterator start, octet_iterator end, output_iterator out, uint32_t replacement)
{
while (start != end) {
octet_iterator sequence_start = start;
internal::utf_error err_code = utf8::internal::validate_next(start, end);
switch (err_code) {
case internal::UTF8_OK :
for (octet_iterator it = sequence_start; it != start; ++it)
*out++ = *it;
break;
case internal::NOT_ENOUGH_ROOM:
Squashed 'third-party/utf8cpp/' changes from 82344d605..79835a5fa 79835a5fa Remove -Wsign-conversion from test builds. 53398ca70 Restructure tests. e3e57c811 Fix for issue #92: Clang 10 Compiler warnings d736c29d3 Fix -Wconversion warnings in tests when -funsigned-char option is used. 780bd57d6 Merge pull request #96 from Finkman/provide-ns-on-installed 73b347f31 Adds the following advantages: - utf8::cpp is available, even when installed - cmake is aware of the library version - compatible with previous usage: target utf8cpp available when installed 3ca904b21 Version 3.2.2 aa3b12c52 Added a couple of statis_casts to eliminate signed conversion warnings. ee90a4a52 Added compiler options to enable warnings. d8b92208f Merge pull request #87 from cschreib/patch-1 a92f85526 Add missing export() command b85efd66a Test string literals 4e1149766 Merge pull request #80 from RT222/master ec6747005 Fix the inclusion of both cpp11 and cpp17 headers on C++17 compilation ddd38b304 Version 3.2 2af93bd67 Documentation: C++ 17 support. b6cd18f92 test_utf32to8 tests string_view, not string 0991356b7 find_invalid(string_view) returns string_view::npos, not string::npos 4bed367c1 Update test docker image a7d530de5 C++ 17 support: add tests, remove duplicate utf8::append() 50361edbf Merge pull request #77 from RT222/master fe79d14ae Switching from gtest to ftest for unit-testing. 7d17aed95 Merge pull request #79 from fu7mu4/it-is-code 957e30052 Does it have syntax hilight d40e4948f Support for C++17 e39907b38 Version 3.1.2 3c85cd48f Add prefix to NOEXCEPT and OVERRIDE macros. 944ef0561 Merge pull request #55 from Flamefire/disable_tests_for_subproject dc2442c2e Merge pull request #61 from xenia-project/master 2b1521b48 Fix deprecated std::iterator usage (STL4015). bee3b1349 Enable tests, docu, install only when building as root project c3f9261eb Merge pull request #51 from AkiraMiyakoda/msvc_warning 7fb121130 Fix an MSVC warning about narrowing conversion. 170e2d11f Merge pull request #44 from tvanriper/patch-1 32ccbfb74 Removed utf8 path from #include. 2370b95a8 Compile negative test with C++ 98 89cfc3e38 Replace throw() with noexcept when using C++11 or later 687a59d88 Add override keyword when compiled with C++11 or later f26d39e8a Move C++ version detection to core.h b1002fd19 Introduce UTF_CPP_CPLUSPLUS macro. 088dd3ad7 Merge pull request #40 from xantares/patch-1 afc32b4c0 Always use GNU install layout except MSVC 82c674b7a Version 3.1 33516ff07 Test -fno-exceptions with unchecked api f16bdde67 Merge pull request #37 from nemtrif/unchecked_replace_invalid c52319302 unchecked::replace_invalid() a3fa4ee84 Merge pull request #36 from nemtrif/gtesturl 8fd51836a Submodule url for googletest is https ad27c7d5e Merge pull request #33 from nemtrif/optionalinstall 293f85d97 Installation is optional a540297fd Version 3.0.3 04d29d92a Add inline declarations to non-template functions in cpp11.h 741259277 Merge pull request #30 from nemtrif/ci 335a3ee6a Update docker to 3.0.1 d5e847d0a Update project version e6da1a36a Set up CircleCI 0b45681b6 Add Dockerfile 66804081d Introduce GTest a0a2d9d1e Fix for the cpp11.h header guard 7db72814a Merge pull request #24 from nemtrif/release_3_0 007f8e32c advance() can work in backward direction. 92158c9ce Minor whitespace fixes 236d61942 Update documentation for replace_invalid d8b09b301 Merge pull request #21 from glebm/fix-remove-invalid 3793703e7 Remove unused test data 080f1e6a3 Remove utf8reader sample 00d73e4a0 Remove deprecated functions 2b8596149 Support for C++11 f637e70c1 Merge pull request #22 from AkiraMiyakoda/fix-msvc2019-warning cfc351c86 Fix MSVC 2017-2019 warning about negative unsigned value. 026aed63d replace_invalid: Replace final incomplete sequence git-subtree-dir: third-party/utf8cpp git-subtree-split: 79835a5fa57271f07a90ed36123e30ae9741178e
2023-02-15 11:25:31 +01:00
out = utf8::append (replacement, out);
start = end;
break;
case internal::INVALID_LEAD:
out = utf8::append (replacement, out);
++start;
break;
case internal::INCOMPLETE_SEQUENCE:
case internal::OVERLONG_SEQUENCE:
case internal::INVALID_CODE_POINT:
out = utf8::append (replacement, out);
++start;
// just one replacement mark for the sequence
while (start != end && utf8::internal::is_trail(*start))
++start;
break;
}
}
return out;
}
template <typename octet_iterator, typename output_iterator>
inline output_iterator replace_invalid(octet_iterator start, octet_iterator end, output_iterator out)
{
static const uint32_t replacement_marker = utf8::internal::mask16(0xfffd);
return utf8::replace_invalid(start, end, out, replacement_marker);
}
template <typename octet_iterator>
uint32_t next(octet_iterator& it, octet_iterator end)
{
uint32_t cp = 0;
internal::utf_error err_code = utf8::internal::validate_next(it, end, cp);
switch (err_code) {
case internal::UTF8_OK :
break;
case internal::NOT_ENOUGH_ROOM :
throw not_enough_room();
case internal::INVALID_LEAD :
case internal::INCOMPLETE_SEQUENCE :
case internal::OVERLONG_SEQUENCE :
Squashed 'third-party/utf8cpp/' changes from 82344d605..79835a5fa 79835a5fa Remove -Wsign-conversion from test builds. 53398ca70 Restructure tests. e3e57c811 Fix for issue #92: Clang 10 Compiler warnings d736c29d3 Fix -Wconversion warnings in tests when -funsigned-char option is used. 780bd57d6 Merge pull request #96 from Finkman/provide-ns-on-installed 73b347f31 Adds the following advantages: - utf8::cpp is available, even when installed - cmake is aware of the library version - compatible with previous usage: target utf8cpp available when installed 3ca904b21 Version 3.2.2 aa3b12c52 Added a couple of statis_casts to eliminate signed conversion warnings. ee90a4a52 Added compiler options to enable warnings. d8b92208f Merge pull request #87 from cschreib/patch-1 a92f85526 Add missing export() command b85efd66a Test string literals 4e1149766 Merge pull request #80 from RT222/master ec6747005 Fix the inclusion of both cpp11 and cpp17 headers on C++17 compilation ddd38b304 Version 3.2 2af93bd67 Documentation: C++ 17 support. b6cd18f92 test_utf32to8 tests string_view, not string 0991356b7 find_invalid(string_view) returns string_view::npos, not string::npos 4bed367c1 Update test docker image a7d530de5 C++ 17 support: add tests, remove duplicate utf8::append() 50361edbf Merge pull request #77 from RT222/master fe79d14ae Switching from gtest to ftest for unit-testing. 7d17aed95 Merge pull request #79 from fu7mu4/it-is-code 957e30052 Does it have syntax hilight d40e4948f Support for C++17 e39907b38 Version 3.1.2 3c85cd48f Add prefix to NOEXCEPT and OVERRIDE macros. 944ef0561 Merge pull request #55 from Flamefire/disable_tests_for_subproject dc2442c2e Merge pull request #61 from xenia-project/master 2b1521b48 Fix deprecated std::iterator usage (STL4015). bee3b1349 Enable tests, docu, install only when building as root project c3f9261eb Merge pull request #51 from AkiraMiyakoda/msvc_warning 7fb121130 Fix an MSVC warning about narrowing conversion. 170e2d11f Merge pull request #44 from tvanriper/patch-1 32ccbfb74 Removed utf8 path from #include. 2370b95a8 Compile negative test with C++ 98 89cfc3e38 Replace throw() with noexcept when using C++11 or later 687a59d88 Add override keyword when compiled with C++11 or later f26d39e8a Move C++ version detection to core.h b1002fd19 Introduce UTF_CPP_CPLUSPLUS macro. 088dd3ad7 Merge pull request #40 from xantares/patch-1 afc32b4c0 Always use GNU install layout except MSVC 82c674b7a Version 3.1 33516ff07 Test -fno-exceptions with unchecked api f16bdde67 Merge pull request #37 from nemtrif/unchecked_replace_invalid c52319302 unchecked::replace_invalid() a3fa4ee84 Merge pull request #36 from nemtrif/gtesturl 8fd51836a Submodule url for googletest is https ad27c7d5e Merge pull request #33 from nemtrif/optionalinstall 293f85d97 Installation is optional a540297fd Version 3.0.3 04d29d92a Add inline declarations to non-template functions in cpp11.h 741259277 Merge pull request #30 from nemtrif/ci 335a3ee6a Update docker to 3.0.1 d5e847d0a Update project version e6da1a36a Set up CircleCI 0b45681b6 Add Dockerfile 66804081d Introduce GTest a0a2d9d1e Fix for the cpp11.h header guard 7db72814a Merge pull request #24 from nemtrif/release_3_0 007f8e32c advance() can work in backward direction. 92158c9ce Minor whitespace fixes 236d61942 Update documentation for replace_invalid d8b09b301 Merge pull request #21 from glebm/fix-remove-invalid 3793703e7 Remove unused test data 080f1e6a3 Remove utf8reader sample 00d73e4a0 Remove deprecated functions 2b8596149 Support for C++11 f637e70c1 Merge pull request #22 from AkiraMiyakoda/fix-msvc2019-warning cfc351c86 Fix MSVC 2017-2019 warning about negative unsigned value. 026aed63d replace_invalid: Replace final incomplete sequence git-subtree-dir: third-party/utf8cpp git-subtree-split: 79835a5fa57271f07a90ed36123e30ae9741178e
2023-02-15 11:25:31 +01:00
throw invalid_utf8(static_cast<uint8_t>(*it));
case internal::INVALID_CODE_POINT :
throw invalid_code_point(cp);
}
return cp;
}
template <typename octet_iterator>
uint32_t peek_next(octet_iterator it, octet_iterator end)
{
return utf8::next(it, end);
}
template <typename octet_iterator>
uint32_t prior(octet_iterator& it, octet_iterator start)
{
// can't do much if it == start
if (it == start)
throw not_enough_room();
octet_iterator end = it;
// Go back until we hit either a lead octet or start
while (utf8::internal::is_trail(*(--it)))
if (it == start)
throw invalid_utf8(*it); // error - no lead byte in the sequence
return utf8::peek_next(it, end);
}
template <typename octet_iterator, typename distance_type>
void advance (octet_iterator& it, distance_type n, octet_iterator end)
{
Squashed 'third-party/utf8cpp/' changes from 82344d605..79835a5fa 79835a5fa Remove -Wsign-conversion from test builds. 53398ca70 Restructure tests. e3e57c811 Fix for issue #92: Clang 10 Compiler warnings d736c29d3 Fix -Wconversion warnings in tests when -funsigned-char option is used. 780bd57d6 Merge pull request #96 from Finkman/provide-ns-on-installed 73b347f31 Adds the following advantages: - utf8::cpp is available, even when installed - cmake is aware of the library version - compatible with previous usage: target utf8cpp available when installed 3ca904b21 Version 3.2.2 aa3b12c52 Added a couple of statis_casts to eliminate signed conversion warnings. ee90a4a52 Added compiler options to enable warnings. d8b92208f Merge pull request #87 from cschreib/patch-1 a92f85526 Add missing export() command b85efd66a Test string literals 4e1149766 Merge pull request #80 from RT222/master ec6747005 Fix the inclusion of both cpp11 and cpp17 headers on C++17 compilation ddd38b304 Version 3.2 2af93bd67 Documentation: C++ 17 support. b6cd18f92 test_utf32to8 tests string_view, not string 0991356b7 find_invalid(string_view) returns string_view::npos, not string::npos 4bed367c1 Update test docker image a7d530de5 C++ 17 support: add tests, remove duplicate utf8::append() 50361edbf Merge pull request #77 from RT222/master fe79d14ae Switching from gtest to ftest for unit-testing. 7d17aed95 Merge pull request #79 from fu7mu4/it-is-code 957e30052 Does it have syntax hilight d40e4948f Support for C++17 e39907b38 Version 3.1.2 3c85cd48f Add prefix to NOEXCEPT and OVERRIDE macros. 944ef0561 Merge pull request #55 from Flamefire/disable_tests_for_subproject dc2442c2e Merge pull request #61 from xenia-project/master 2b1521b48 Fix deprecated std::iterator usage (STL4015). bee3b1349 Enable tests, docu, install only when building as root project c3f9261eb Merge pull request #51 from AkiraMiyakoda/msvc_warning 7fb121130 Fix an MSVC warning about narrowing conversion. 170e2d11f Merge pull request #44 from tvanriper/patch-1 32ccbfb74 Removed utf8 path from #include. 2370b95a8 Compile negative test with C++ 98 89cfc3e38 Replace throw() with noexcept when using C++11 or later 687a59d88 Add override keyword when compiled with C++11 or later f26d39e8a Move C++ version detection to core.h b1002fd19 Introduce UTF_CPP_CPLUSPLUS macro. 088dd3ad7 Merge pull request #40 from xantares/patch-1 afc32b4c0 Always use GNU install layout except MSVC 82c674b7a Version 3.1 33516ff07 Test -fno-exceptions with unchecked api f16bdde67 Merge pull request #37 from nemtrif/unchecked_replace_invalid c52319302 unchecked::replace_invalid() a3fa4ee84 Merge pull request #36 from nemtrif/gtesturl 8fd51836a Submodule url for googletest is https ad27c7d5e Merge pull request #33 from nemtrif/optionalinstall 293f85d97 Installation is optional a540297fd Version 3.0.3 04d29d92a Add inline declarations to non-template functions in cpp11.h 741259277 Merge pull request #30 from nemtrif/ci 335a3ee6a Update docker to 3.0.1 d5e847d0a Update project version e6da1a36a Set up CircleCI 0b45681b6 Add Dockerfile 66804081d Introduce GTest a0a2d9d1e Fix for the cpp11.h header guard 7db72814a Merge pull request #24 from nemtrif/release_3_0 007f8e32c advance() can work in backward direction. 92158c9ce Minor whitespace fixes 236d61942 Update documentation for replace_invalid d8b09b301 Merge pull request #21 from glebm/fix-remove-invalid 3793703e7 Remove unused test data 080f1e6a3 Remove utf8reader sample 00d73e4a0 Remove deprecated functions 2b8596149 Support for C++11 f637e70c1 Merge pull request #22 from AkiraMiyakoda/fix-msvc2019-warning cfc351c86 Fix MSVC 2017-2019 warning about negative unsigned value. 026aed63d replace_invalid: Replace final incomplete sequence git-subtree-dir: third-party/utf8cpp git-subtree-split: 79835a5fa57271f07a90ed36123e30ae9741178e
2023-02-15 11:25:31 +01:00
const distance_type zero(0);
if (n < zero) {
// backward
for (distance_type i = n; i < zero; ++i)
utf8::prior(it, end);
} else {
// forward
for (distance_type i = zero; i < n; ++i)
utf8::next(it, end);
}
}
template <typename octet_iterator>
typename std::iterator_traits<octet_iterator>::difference_type
distance (octet_iterator first, octet_iterator last)
{
typename std::iterator_traits<octet_iterator>::difference_type dist;
for (dist = 0; first < last; ++dist)
utf8::next(first, last);
return dist;
}
template <typename u16bit_iterator, typename octet_iterator>
octet_iterator utf16to8 (u16bit_iterator start, u16bit_iterator end, octet_iterator result)
{
while (start != end) {
uint32_t cp = utf8::internal::mask16(*start++);
// Take care of surrogate pairs first
if (utf8::internal::is_lead_surrogate(cp)) {
if (start != end) {
uint32_t trail_surrogate = utf8::internal::mask16(*start++);
if (utf8::internal::is_trail_surrogate(trail_surrogate))
cp = (cp << 10) + trail_surrogate + internal::SURROGATE_OFFSET;
else
throw invalid_utf16(static_cast<uint16_t>(trail_surrogate));
}
else
throw invalid_utf16(static_cast<uint16_t>(cp));
}
// Lone trail surrogate
else if (utf8::internal::is_trail_surrogate(cp))
throw invalid_utf16(static_cast<uint16_t>(cp));
result = utf8::append(cp, result);
}
return result;
}
template <typename u16bit_iterator, typename octet_iterator>
u16bit_iterator utf8to16 (octet_iterator start, octet_iterator end, u16bit_iterator result)
{
while (start < end) {
uint32_t cp = utf8::next(start, end);
if (cp > 0xffff) { //make a surrogate pair
*result++ = static_cast<uint16_t>((cp >> 10) + internal::LEAD_OFFSET);
*result++ = static_cast<uint16_t>((cp & 0x3ff) + internal::TRAIL_SURROGATE_MIN);
}
else
*result++ = static_cast<uint16_t>(cp);
}
return result;
}
template <typename octet_iterator, typename u32bit_iterator>
octet_iterator utf32to8 (u32bit_iterator start, u32bit_iterator end, octet_iterator result)
{
while (start != end)
result = utf8::append(*(start++), result);
return result;
}
template <typename octet_iterator, typename u32bit_iterator>
u32bit_iterator utf8to32 (octet_iterator start, octet_iterator end, u32bit_iterator result)
{
while (start < end)
(*result++) = utf8::next(start, end);
return result;
}
// The iterator class
template <typename octet_iterator>
Squashed 'third-party/utf8cpp/' changes from 82344d605..79835a5fa 79835a5fa Remove -Wsign-conversion from test builds. 53398ca70 Restructure tests. e3e57c811 Fix for issue #92: Clang 10 Compiler warnings d736c29d3 Fix -Wconversion warnings in tests when -funsigned-char option is used. 780bd57d6 Merge pull request #96 from Finkman/provide-ns-on-installed 73b347f31 Adds the following advantages: - utf8::cpp is available, even when installed - cmake is aware of the library version - compatible with previous usage: target utf8cpp available when installed 3ca904b21 Version 3.2.2 aa3b12c52 Added a couple of statis_casts to eliminate signed conversion warnings. ee90a4a52 Added compiler options to enable warnings. d8b92208f Merge pull request #87 from cschreib/patch-1 a92f85526 Add missing export() command b85efd66a Test string literals 4e1149766 Merge pull request #80 from RT222/master ec6747005 Fix the inclusion of both cpp11 and cpp17 headers on C++17 compilation ddd38b304 Version 3.2 2af93bd67 Documentation: C++ 17 support. b6cd18f92 test_utf32to8 tests string_view, not string 0991356b7 find_invalid(string_view) returns string_view::npos, not string::npos 4bed367c1 Update test docker image a7d530de5 C++ 17 support: add tests, remove duplicate utf8::append() 50361edbf Merge pull request #77 from RT222/master fe79d14ae Switching from gtest to ftest for unit-testing. 7d17aed95 Merge pull request #79 from fu7mu4/it-is-code 957e30052 Does it have syntax hilight d40e4948f Support for C++17 e39907b38 Version 3.1.2 3c85cd48f Add prefix to NOEXCEPT and OVERRIDE macros. 944ef0561 Merge pull request #55 from Flamefire/disable_tests_for_subproject dc2442c2e Merge pull request #61 from xenia-project/master 2b1521b48 Fix deprecated std::iterator usage (STL4015). bee3b1349 Enable tests, docu, install only when building as root project c3f9261eb Merge pull request #51 from AkiraMiyakoda/msvc_warning 7fb121130 Fix an MSVC warning about narrowing conversion. 170e2d11f Merge pull request #44 from tvanriper/patch-1 32ccbfb74 Removed utf8 path from #include. 2370b95a8 Compile negative test with C++ 98 89cfc3e38 Replace throw() with noexcept when using C++11 or later 687a59d88 Add override keyword when compiled with C++11 or later f26d39e8a Move C++ version detection to core.h b1002fd19 Introduce UTF_CPP_CPLUSPLUS macro. 088dd3ad7 Merge pull request #40 from xantares/patch-1 afc32b4c0 Always use GNU install layout except MSVC 82c674b7a Version 3.1 33516ff07 Test -fno-exceptions with unchecked api f16bdde67 Merge pull request #37 from nemtrif/unchecked_replace_invalid c52319302 unchecked::replace_invalid() a3fa4ee84 Merge pull request #36 from nemtrif/gtesturl 8fd51836a Submodule url for googletest is https ad27c7d5e Merge pull request #33 from nemtrif/optionalinstall 293f85d97 Installation is optional a540297fd Version 3.0.3 04d29d92a Add inline declarations to non-template functions in cpp11.h 741259277 Merge pull request #30 from nemtrif/ci 335a3ee6a Update docker to 3.0.1 d5e847d0a Update project version e6da1a36a Set up CircleCI 0b45681b6 Add Dockerfile 66804081d Introduce GTest a0a2d9d1e Fix for the cpp11.h header guard 7db72814a Merge pull request #24 from nemtrif/release_3_0 007f8e32c advance() can work in backward direction. 92158c9ce Minor whitespace fixes 236d61942 Update documentation for replace_invalid d8b09b301 Merge pull request #21 from glebm/fix-remove-invalid 3793703e7 Remove unused test data 080f1e6a3 Remove utf8reader sample 00d73e4a0 Remove deprecated functions 2b8596149 Support for C++11 f637e70c1 Merge pull request #22 from AkiraMiyakoda/fix-msvc2019-warning cfc351c86 Fix MSVC 2017-2019 warning about negative unsigned value. 026aed63d replace_invalid: Replace final incomplete sequence git-subtree-dir: third-party/utf8cpp git-subtree-split: 79835a5fa57271f07a90ed36123e30ae9741178e
2023-02-15 11:25:31 +01:00
class iterator {
octet_iterator it;
octet_iterator range_start;
octet_iterator range_end;
public:
Squashed 'third-party/utf8cpp/' changes from 82344d605..79835a5fa 79835a5fa Remove -Wsign-conversion from test builds. 53398ca70 Restructure tests. e3e57c811 Fix for issue #92: Clang 10 Compiler warnings d736c29d3 Fix -Wconversion warnings in tests when -funsigned-char option is used. 780bd57d6 Merge pull request #96 from Finkman/provide-ns-on-installed 73b347f31 Adds the following advantages: - utf8::cpp is available, even when installed - cmake is aware of the library version - compatible with previous usage: target utf8cpp available when installed 3ca904b21 Version 3.2.2 aa3b12c52 Added a couple of statis_casts to eliminate signed conversion warnings. ee90a4a52 Added compiler options to enable warnings. d8b92208f Merge pull request #87 from cschreib/patch-1 a92f85526 Add missing export() command b85efd66a Test string literals 4e1149766 Merge pull request #80 from RT222/master ec6747005 Fix the inclusion of both cpp11 and cpp17 headers on C++17 compilation ddd38b304 Version 3.2 2af93bd67 Documentation: C++ 17 support. b6cd18f92 test_utf32to8 tests string_view, not string 0991356b7 find_invalid(string_view) returns string_view::npos, not string::npos 4bed367c1 Update test docker image a7d530de5 C++ 17 support: add tests, remove duplicate utf8::append() 50361edbf Merge pull request #77 from RT222/master fe79d14ae Switching from gtest to ftest for unit-testing. 7d17aed95 Merge pull request #79 from fu7mu4/it-is-code 957e30052 Does it have syntax hilight d40e4948f Support for C++17 e39907b38 Version 3.1.2 3c85cd48f Add prefix to NOEXCEPT and OVERRIDE macros. 944ef0561 Merge pull request #55 from Flamefire/disable_tests_for_subproject dc2442c2e Merge pull request #61 from xenia-project/master 2b1521b48 Fix deprecated std::iterator usage (STL4015). bee3b1349 Enable tests, docu, install only when building as root project c3f9261eb Merge pull request #51 from AkiraMiyakoda/msvc_warning 7fb121130 Fix an MSVC warning about narrowing conversion. 170e2d11f Merge pull request #44 from tvanriper/patch-1 32ccbfb74 Removed utf8 path from #include. 2370b95a8 Compile negative test with C++ 98 89cfc3e38 Replace throw() with noexcept when using C++11 or later 687a59d88 Add override keyword when compiled with C++11 or later f26d39e8a Move C++ version detection to core.h b1002fd19 Introduce UTF_CPP_CPLUSPLUS macro. 088dd3ad7 Merge pull request #40 from xantares/patch-1 afc32b4c0 Always use GNU install layout except MSVC 82c674b7a Version 3.1 33516ff07 Test -fno-exceptions with unchecked api f16bdde67 Merge pull request #37 from nemtrif/unchecked_replace_invalid c52319302 unchecked::replace_invalid() a3fa4ee84 Merge pull request #36 from nemtrif/gtesturl 8fd51836a Submodule url for googletest is https ad27c7d5e Merge pull request #33 from nemtrif/optionalinstall 293f85d97 Installation is optional a540297fd Version 3.0.3 04d29d92a Add inline declarations to non-template functions in cpp11.h 741259277 Merge pull request #30 from nemtrif/ci 335a3ee6a Update docker to 3.0.1 d5e847d0a Update project version e6da1a36a Set up CircleCI 0b45681b6 Add Dockerfile 66804081d Introduce GTest a0a2d9d1e Fix for the cpp11.h header guard 7db72814a Merge pull request #24 from nemtrif/release_3_0 007f8e32c advance() can work in backward direction. 92158c9ce Minor whitespace fixes 236d61942 Update documentation for replace_invalid d8b09b301 Merge pull request #21 from glebm/fix-remove-invalid 3793703e7 Remove unused test data 080f1e6a3 Remove utf8reader sample 00d73e4a0 Remove deprecated functions 2b8596149 Support for C++11 f637e70c1 Merge pull request #22 from AkiraMiyakoda/fix-msvc2019-warning cfc351c86 Fix MSVC 2017-2019 warning about negative unsigned value. 026aed63d replace_invalid: Replace final incomplete sequence git-subtree-dir: third-party/utf8cpp git-subtree-split: 79835a5fa57271f07a90ed36123e30ae9741178e
2023-02-15 11:25:31 +01:00
typedef uint32_t value_type;
typedef uint32_t* pointer;
typedef uint32_t& reference;
typedef std::ptrdiff_t difference_type;
typedef std::bidirectional_iterator_tag iterator_category;
iterator () {}
explicit iterator (const octet_iterator& octet_it,
const octet_iterator& rangestart,
const octet_iterator& rangeend) :
it(octet_it), range_start(rangestart), range_end(rangeend)
{
if (it < range_start || it > range_end)
throw std::out_of_range("Invalid utf-8 iterator position");
}
// the default "big three" are OK
octet_iterator base () const { return it; }
uint32_t operator * () const
{
octet_iterator temp = it;
return utf8::next(temp, range_end);
}
bool operator == (const iterator& rhs) const
{
if (range_start != rhs.range_start || range_end != rhs.range_end)
throw std::logic_error("Comparing utf-8 iterators defined with different ranges");
return (it == rhs.it);
}
bool operator != (const iterator& rhs) const
{
return !(operator == (rhs));
}
iterator& operator ++ ()
{
utf8::next(it, range_end);
return *this;
}
iterator operator ++ (int)
{
iterator temp = *this;
utf8::next(it, range_end);
return temp;
}
iterator& operator -- ()
{
utf8::prior(it, range_start);
return *this;
}
iterator operator -- (int)
{
iterator temp = *this;
utf8::prior(it, range_start);
return temp;
}
}; // class iterator
} // namespace utf8
Squashed 'third-party/utf8cpp/' changes from 82344d605..79835a5fa 79835a5fa Remove -Wsign-conversion from test builds. 53398ca70 Restructure tests. e3e57c811 Fix for issue #92: Clang 10 Compiler warnings d736c29d3 Fix -Wconversion warnings in tests when -funsigned-char option is used. 780bd57d6 Merge pull request #96 from Finkman/provide-ns-on-installed 73b347f31 Adds the following advantages: - utf8::cpp is available, even when installed - cmake is aware of the library version - compatible with previous usage: target utf8cpp available when installed 3ca904b21 Version 3.2.2 aa3b12c52 Added a couple of statis_casts to eliminate signed conversion warnings. ee90a4a52 Added compiler options to enable warnings. d8b92208f Merge pull request #87 from cschreib/patch-1 a92f85526 Add missing export() command b85efd66a Test string literals 4e1149766 Merge pull request #80 from RT222/master ec6747005 Fix the inclusion of both cpp11 and cpp17 headers on C++17 compilation ddd38b304 Version 3.2 2af93bd67 Documentation: C++ 17 support. b6cd18f92 test_utf32to8 tests string_view, not string 0991356b7 find_invalid(string_view) returns string_view::npos, not string::npos 4bed367c1 Update test docker image a7d530de5 C++ 17 support: add tests, remove duplicate utf8::append() 50361edbf Merge pull request #77 from RT222/master fe79d14ae Switching from gtest to ftest for unit-testing. 7d17aed95 Merge pull request #79 from fu7mu4/it-is-code 957e30052 Does it have syntax hilight d40e4948f Support for C++17 e39907b38 Version 3.1.2 3c85cd48f Add prefix to NOEXCEPT and OVERRIDE macros. 944ef0561 Merge pull request #55 from Flamefire/disable_tests_for_subproject dc2442c2e Merge pull request #61 from xenia-project/master 2b1521b48 Fix deprecated std::iterator usage (STL4015). bee3b1349 Enable tests, docu, install only when building as root project c3f9261eb Merge pull request #51 from AkiraMiyakoda/msvc_warning 7fb121130 Fix an MSVC warning about narrowing conversion. 170e2d11f Merge pull request #44 from tvanriper/patch-1 32ccbfb74 Removed utf8 path from #include. 2370b95a8 Compile negative test with C++ 98 89cfc3e38 Replace throw() with noexcept when using C++11 or later 687a59d88 Add override keyword when compiled with C++11 or later f26d39e8a Move C++ version detection to core.h b1002fd19 Introduce UTF_CPP_CPLUSPLUS macro. 088dd3ad7 Merge pull request #40 from xantares/patch-1 afc32b4c0 Always use GNU install layout except MSVC 82c674b7a Version 3.1 33516ff07 Test -fno-exceptions with unchecked api f16bdde67 Merge pull request #37 from nemtrif/unchecked_replace_invalid c52319302 unchecked::replace_invalid() a3fa4ee84 Merge pull request #36 from nemtrif/gtesturl 8fd51836a Submodule url for googletest is https ad27c7d5e Merge pull request #33 from nemtrif/optionalinstall 293f85d97 Installation is optional a540297fd Version 3.0.3 04d29d92a Add inline declarations to non-template functions in cpp11.h 741259277 Merge pull request #30 from nemtrif/ci 335a3ee6a Update docker to 3.0.1 d5e847d0a Update project version e6da1a36a Set up CircleCI 0b45681b6 Add Dockerfile 66804081d Introduce GTest a0a2d9d1e Fix for the cpp11.h header guard 7db72814a Merge pull request #24 from nemtrif/release_3_0 007f8e32c advance() can work in backward direction. 92158c9ce Minor whitespace fixes 236d61942 Update documentation for replace_invalid d8b09b301 Merge pull request #21 from glebm/fix-remove-invalid 3793703e7 Remove unused test data 080f1e6a3 Remove utf8reader sample 00d73e4a0 Remove deprecated functions 2b8596149 Support for C++11 f637e70c1 Merge pull request #22 from AkiraMiyakoda/fix-msvc2019-warning cfc351c86 Fix MSVC 2017-2019 warning about negative unsigned value. 026aed63d replace_invalid: Replace final incomplete sequence git-subtree-dir: third-party/utf8cpp git-subtree-split: 79835a5fa57271f07a90ed36123e30ae9741178e
2023-02-15 11:25:31 +01:00
#if UTF_CPP_CPLUSPLUS >= 201703L // C++ 17 or later
#include "cpp17.h"
#elif UTF_CPP_CPLUSPLUS >= 201103L // C++ 11 or later
#include "cpp11.h"
#endif // C++ 11 or later
Squashed 'third-party/utf8cpp/' changes from 82344d605..79835a5fa 79835a5fa Remove -Wsign-conversion from test builds. 53398ca70 Restructure tests. e3e57c811 Fix for issue #92: Clang 10 Compiler warnings d736c29d3 Fix -Wconversion warnings in tests when -funsigned-char option is used. 780bd57d6 Merge pull request #96 from Finkman/provide-ns-on-installed 73b347f31 Adds the following advantages: - utf8::cpp is available, even when installed - cmake is aware of the library version - compatible with previous usage: target utf8cpp available when installed 3ca904b21 Version 3.2.2 aa3b12c52 Added a couple of statis_casts to eliminate signed conversion warnings. ee90a4a52 Added compiler options to enable warnings. d8b92208f Merge pull request #87 from cschreib/patch-1 a92f85526 Add missing export() command b85efd66a Test string literals 4e1149766 Merge pull request #80 from RT222/master ec6747005 Fix the inclusion of both cpp11 and cpp17 headers on C++17 compilation ddd38b304 Version 3.2 2af93bd67 Documentation: C++ 17 support. b6cd18f92 test_utf32to8 tests string_view, not string 0991356b7 find_invalid(string_view) returns string_view::npos, not string::npos 4bed367c1 Update test docker image a7d530de5 C++ 17 support: add tests, remove duplicate utf8::append() 50361edbf Merge pull request #77 from RT222/master fe79d14ae Switching from gtest to ftest for unit-testing. 7d17aed95 Merge pull request #79 from fu7mu4/it-is-code 957e30052 Does it have syntax hilight d40e4948f Support for C++17 e39907b38 Version 3.1.2 3c85cd48f Add prefix to NOEXCEPT and OVERRIDE macros. 944ef0561 Merge pull request #55 from Flamefire/disable_tests_for_subproject dc2442c2e Merge pull request #61 from xenia-project/master 2b1521b48 Fix deprecated std::iterator usage (STL4015). bee3b1349 Enable tests, docu, install only when building as root project c3f9261eb Merge pull request #51 from AkiraMiyakoda/msvc_warning 7fb121130 Fix an MSVC warning about narrowing conversion. 170e2d11f Merge pull request #44 from tvanriper/patch-1 32ccbfb74 Removed utf8 path from #include. 2370b95a8 Compile negative test with C++ 98 89cfc3e38 Replace throw() with noexcept when using C++11 or later 687a59d88 Add override keyword when compiled with C++11 or later f26d39e8a Move C++ version detection to core.h b1002fd19 Introduce UTF_CPP_CPLUSPLUS macro. 088dd3ad7 Merge pull request #40 from xantares/patch-1 afc32b4c0 Always use GNU install layout except MSVC 82c674b7a Version 3.1 33516ff07 Test -fno-exceptions with unchecked api f16bdde67 Merge pull request #37 from nemtrif/unchecked_replace_invalid c52319302 unchecked::replace_invalid() a3fa4ee84 Merge pull request #36 from nemtrif/gtesturl 8fd51836a Submodule url for googletest is https ad27c7d5e Merge pull request #33 from nemtrif/optionalinstall 293f85d97 Installation is optional a540297fd Version 3.0.3 04d29d92a Add inline declarations to non-template functions in cpp11.h 741259277 Merge pull request #30 from nemtrif/ci 335a3ee6a Update docker to 3.0.1 d5e847d0a Update project version e6da1a36a Set up CircleCI 0b45681b6 Add Dockerfile 66804081d Introduce GTest a0a2d9d1e Fix for the cpp11.h header guard 7db72814a Merge pull request #24 from nemtrif/release_3_0 007f8e32c advance() can work in backward direction. 92158c9ce Minor whitespace fixes 236d61942 Update documentation for replace_invalid d8b09b301 Merge pull request #21 from glebm/fix-remove-invalid 3793703e7 Remove unused test data 080f1e6a3 Remove utf8reader sample 00d73e4a0 Remove deprecated functions 2b8596149 Support for C++11 f637e70c1 Merge pull request #22 from AkiraMiyakoda/fix-msvc2019-warning cfc351c86 Fix MSVC 2017-2019 warning about negative unsigned value. 026aed63d replace_invalid: Replace final incomplete sequence git-subtree-dir: third-party/utf8cpp git-subtree-split: 79835a5fa57271f07a90ed36123e30ae9741178e
2023-02-15 11:25:31 +01:00
#endif //header guard