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

104 lines
3.2 KiB
C
Raw Normal View History

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
// Copyright 2018 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_7e906c01_03a3_4daf_b420_ea7ea952b3c9
#define UTF8_FOR_CPP_7e906c01_03a3_4daf_b420_ea7ea952b3c9
#include "checked.h"
#include <string>
namespace utf8
{
inline void append(char32_t cp, std::string& s)
{
append(uint32_t(cp), std::back_inserter(s));
}
inline std::string utf16to8(std::u16string_view s)
{
std::string result;
utf16to8(s.begin(), s.end(), std::back_inserter(result));
return result;
}
inline std::u16string utf8to16(std::string_view s)
{
std::u16string result;
utf8to16(s.begin(), s.end(), std::back_inserter(result));
return result;
}
inline std::string utf32to8(std::u32string_view s)
{
std::string result;
utf32to8(s.begin(), s.end(), std::back_inserter(result));
return result;
}
inline std::u32string utf8to32(std::string_view s)
{
std::u32string result;
utf8to32(s.begin(), s.end(), std::back_inserter(result));
return result;
}
inline std::size_t find_invalid(std::string_view s)
{
std::string_view::const_iterator invalid = find_invalid(s.begin(), s.end());
return (invalid == s.end()) ? std::string_view::npos : static_cast<std::size_t>(invalid - s.begin());
}
inline bool is_valid(std::string_view s)
{
return is_valid(s.begin(), s.end());
}
inline std::string replace_invalid(std::string_view s, char32_t replacement)
{
std::string result;
replace_invalid(s.begin(), s.end(), std::back_inserter(result), replacement);
return result;
}
inline std::string replace_invalid(std::string_view s)
{
std::string result;
replace_invalid(s.begin(), s.end(), std::back_inserter(result));
return result;
}
inline bool starts_with_bom(std::string_view s)
{
return starts_with_bom(s.begin(), s.end());
}
} // namespace utf8
#endif // header guard