Browse Source

C++17 is minimum requirement now. So replace pEp::string_view with std::string_view etc.

master
roker 4 years ago
parent
commit
01941f70ad
  1. 2
      Makefile.conf
  2. 26
      src/nfc.cc
  3. 29
      src/nfc.hh
  4. 28
      src/string_view.hh

2
Makefile.conf

@ -12,7 +12,7 @@ DEBUG=1
PREFIX?=$(HOME) PREFIX?=$(HOME)
ENGINE_LIB_PATH=$(PREFIX)/lib ENGINE_LIB_PATH=$(PREFIX)/lib
ENGINE_INC_PATH=$(PREFIX)/include ENGINE_INC_PATH=$(PREFIX)/include
LANG_VERSION=c++14 LANG_VERSION=c++17
CXXFLAGS+=-fPIC CXXFLAGS+=-fPIC

26
src/nfc.cc

@ -118,7 +118,7 @@ namespace
}; };
std::string escape(pEp::string_view s) std::string escape(std::string_view s)
{ {
std::string ret; ret.reserve(s.size() + 16 ); std::string ret; ret.reserve(s.size() + 16 );
for(char c : s) for(char c : s)
@ -136,7 +136,7 @@ namespace
return ret; return ret;
} }
std::string escape(pEp::u16string_view s) std::string escape(std::u16string_view s)
{ {
std::string ret; ret.reserve(s.size() + 16 ); std::string ret; ret.reserve(s.size() + 16 );
for(char16_t c : s) for(char16_t c : s)
@ -224,7 +224,7 @@ namespace
namespace pEp { namespace pEp {
std::string escape_utf16(u16string_view s) std::string escape_utf16(std::u16string_view s)
{ {
return escape(s); return escape(s);
} }
@ -435,11 +435,11 @@ std::basic_string<CharT> UTF<CharT>::generate(const std::u32string& u32)
illegal_utf::illegal_utf( string_view s, unsigned position, const std::string& reason) illegal_utf::illegal_utf( std::string_view s, unsigned position, const std::string& reason)
: std::runtime_error( "Illegal UTF-8 string \"" + escape(s) + "\" at position " + std::to_string(position) + ": " + reason ) : std::runtime_error( "Illegal UTF-8 string \"" + escape(s) + "\" at position " + std::to_string(position) + ": " + reason )
{} {}
illegal_utf::illegal_utf( u16string_view s, unsigned position, const std::string& reason) illegal_utf::illegal_utf( std::u16string_view s, unsigned position, const std::string& reason)
: std::runtime_error( "Illegal UTF-16 string \"" + escape(s) + "\" at position " + std::to_string(position) + ": " + reason ) : std::runtime_error( "Illegal UTF-16 string \"" + escape(s) + "\" at position " + std::to_string(position) + ": " + reason )
{} {}
@ -449,7 +449,7 @@ illegal_utf::illegal_utf( const std::string& msg )
{} {}
void assert_utf8(string_view s) void assert_utf8(std::string_view s)
{ {
const char* begin = s.data(); const char* begin = s.data();
const char* const end = s.data() + s.size(); const char* const end = s.data() + s.size();
@ -470,7 +470,7 @@ void assert_utf8(string_view s)
// creates a NFD string from s // creates a NFD string from s
template<class CharT> template<class CharT>
std::u32string UTF<CharT>::fromUtf_decompose(basic_string_view<CharT> s) std::u32string UTF<CharT>::fromUtf_decompose(std::basic_string_view<CharT> s)
{ {
std::u32string u32s; std::u32string u32s;
u32s.reserve( static_cast<std::size_t>(s.size()*1.25) ); u32s.reserve( static_cast<std::size_t>(s.size()*1.25) );
@ -555,7 +555,7 @@ std::u32string createNFC(std::u32string nfd)
template<class CharT> template<class CharT>
IsNFC UTF<CharT>::isNFC_quick_check(basic_string_view<CharT> s) IsNFC UTF<CharT>::isNFC_quick_check(std::basic_string_view<CharT> s)
{ {
const CharT* begin = s.data(); const CharT* begin = s.data();
const CharT* const end = s.data() + s.size(); const CharT* const end = s.data() + s.size();
@ -585,7 +585,7 @@ IsNFC UTF<CharT>::isNFC_quick_check(basic_string_view<CharT> s)
template<class CharT> template<class CharT>
bool UTF<CharT>::isNFC(basic_string_view<CharT> s) bool UTF<CharT>::isNFC(std::basic_string_view<CharT> s)
{ {
switch( isNFC_quick_check(s) ) switch( isNFC_quick_check(s) )
{ {
@ -618,7 +618,7 @@ try{
// s is ''moved'' to the return value if possible so no copy is done here. // s is ''moved'' to the return value if possible so no copy is done here.
template<class CharT> template<class CharT>
std::basic_string<CharT> UTF<CharT>::toNFC(basic_string_view<CharT> s) std::basic_string<CharT> UTF<CharT>::toNFC(std::basic_string_view<CharT> s)
{ {
if(isNFC_quick_check(s)==IsNFC::Yes) if(isNFC_quick_check(s)==IsNFC::Yes)
return std::basic_string<CharT>{s}; return std::basic_string<CharT>{s};
@ -628,7 +628,7 @@ std::basic_string<CharT> UTF<CharT>::toNFC(basic_string_view<CharT> s)
template<> template<>
size_t UTF<char>::utf_length(u32string_view s) size_t UTF<char>::utf_length(std::u32string_view s)
{ {
size_t len = 0; size_t len = 0;
for(const char32_t c : s) for(const char32_t c : s)
@ -659,7 +659,7 @@ size_t UTF<char>::utf_length(u32string_view s)
template<> template<>
size_t UTF<char16_t>::utf_length(u32string_view s) size_t UTF<char16_t>::utf_length(std::u32string_view s)
{ {
size_t len = 0; size_t len = 0;
for(const char32_t c : s) for(const char32_t c : s)
@ -685,7 +685,7 @@ size_t UTF<char16_t>::utf_length(u32string_view s)
// convenience function to avoid ::strdup(pEp::toNFC<char>(text).c_str()); // convenience function to avoid ::strdup(pEp::toNFC<char>(text).c_str());
// and unecessary temporary std::string etc. // and unecessary temporary std::string etc.
char* strdup_NFC(string_view s) char* strdup_NFC(std::string_view s)
{ {
if(UTF8::isNFC_quick_check(s)==IsNFC::Yes) if(UTF8::isNFC_quick_check(s)==IsNFC::Yes)
return ::new_string(s.data(), s.size()); return ::new_string(s.data(), s.size());

29
src/nfc.hh

@ -4,7 +4,7 @@
#ifndef LIBPEPDATATYPES_NFC_HH #ifndef LIBPEPDATATYPES_NFC_HH
#define LIBPEPDATATYPES_NFC_HH #define LIBPEPDATATYPES_NFC_HH
#include "string_view.hh" // to switch between std::string_view or boost::string_view.hh #include <string_view>
#include <string> #include <string>
#include <stdexcept> #include <stdexcept>
#include <iosfwd> #include <iosfwd>
@ -25,8 +25,8 @@ std::ostream& operator<<(std::ostream& o, IsNFC is_nfc);
class illegal_utf : public std::runtime_error class illegal_utf : public std::runtime_error
{ {
public: public:
illegal_utf( string_view, unsigned position, const std::string& reason); illegal_utf( std::string_view, unsigned position, const std::string& reason);
illegal_utf(u16string_view, unsigned position, const std::string& reason); illegal_utf(std::u16string_view, unsigned position, const std::string& reason);
protected: protected:
explicit illegal_utf(const std::string& message); explicit illegal_utf(const std::string& message);
}; };
@ -51,22 +51,22 @@ public:
/// return No or Maybe, if at least one character with NFC_Quickcheck class is "No" or "Maybe" /// return No or Maybe, if at least one character with NFC_Quickcheck class is "No" or "Maybe"
/// might throw illegal_utf exception /// might throw illegal_utf exception
static static
IsNFC isNFC_quick_check(basic_string_view<CharT> s); IsNFC isNFC_quick_check(std::basic_string_view<CharT> s);
/// runs first quick check and a deep test if quick check returns "Maybe". /// runs first quick check and a deep test if quick check returns "Maybe".
static static
bool isNFC(basic_string_view<CharT> s); bool isNFC(std::basic_string_view<CharT> s);
/// returns true if the sequence is valid UTF-8 /// returns true if the sequence is valid UTF-8
bool isUtf(const CharT* begin, const CharT* end); bool isUtf(const CharT* begin, const CharT* end);
/// converts a C++ string (in UTF-8/-16) into NFC form /// converts a C++ string (in UTF-8/-16) into NFC form
static static
std::basic_string<CharT> toNFC(basic_string_view<CharT> s); std::basic_string<CharT> toNFC(std::basic_string_view<CharT> s);
/// calculates the number of "code units" in the target Unicode Transfer Format. /// calculates the number of "code units" in the target Unicode Transfer Format.
static static
size_t utf_length(u32string_view s); size_t utf_length(std::u32string_view s);
/// generates a whole u32string at once /// generates a whole u32string at once
static static
@ -74,7 +74,7 @@ public:
/// creates an NFD u32string from UTF-8/UTF-16 input string s /// creates an NFD u32string from UTF-8/UTF-16 input string s
static static
std::u32string fromUtf_decompose(basic_string_view<CharT> s); std::u32string fromUtf_decompose(std::basic_string_view<CharT> s);
}; };
using UTF8 = UTF<char>; using UTF8 = UTF<char>;
@ -82,7 +82,7 @@ using UTF16 = UTF<char16_t>;
// throws illegal_utf8 exception if s is not valid UTF-8 // throws illegal_utf8 exception if s is not valid UTF-8
void assert_utf8(string_view s); void assert_utf8(std::string_view s);
// convert NFD to NFC // convert NFD to NFC
@ -92,11 +92,11 @@ std::u32string createNFC(std::u32string nfd_string);
// return No or Maybe, if at least one character with NFC_Quickcheck class is "No" or "Maybe" // return No or Maybe, if at least one character with NFC_Quickcheck class is "No" or "Maybe"
// might throw illegal_utf exception // might throw illegal_utf exception
template<class CharT> template<class CharT>
IsNFC isNFC_quick_check(basic_string_view<CharT> s); IsNFC isNFC_quick_check(std::basic_string_view<CharT> s);
// runs first quick check and a deep test if quick check returns "Maybe". // runs first quick check and a deep test if quick check returns "Maybe".
template<class CharT> template<class CharT>
bool isNFC(basic_string_view<CharT> s); bool isNFC(std::basic_string_view<CharT> s);
// returns true if the sequence is valid UTF-8 // returns true if the sequence is valid UTF-8
bool isUtf8(const char* begin, const char* end); bool isUtf8(const char* begin, const char* end);
@ -104,15 +104,16 @@ bool isUtf8(const char* begin, const char* end);
// converts a C++ string (in UTF-8) into NFC form // converts a C++ string (in UTF-8) into NFC form
// s is ''moved'' to the return value if possible so no copy is done here. // s is ''moved'' to the return value if possible so no copy is done here.
template<class CharT> template<class CharT>
std::basic_string<CharT> toNFC(basic_string_view<CharT> s); std::basic_string<CharT> toNFC(std::basic_string_view<CharT> s);
*/ */
// creates a UTF-8-encoded NFC string from s // creates a UTF-8-encoded NFC string from s
std::string toNFC_8(u16string_view s); std::string toNFC_8(std::u16string_view s);
// convenience functions to avoid ::strdup(pEp::toNFC<char>(text).c_str()); // convenience functions to avoid ::strdup(pEp::toNFC<char>(text).c_str());
// and unecessary temporary std::string etc. // and unecessary temporary std::string etc.
char* strdup_NFC(string_view s); char* strdup_NFC(std::string_view s);
pEp_identity *identity_dup_NFC(const ::pEp_identity* value); pEp_identity *identity_dup_NFC(const ::pEp_identity* value);
::identity_list* identity_list_dup_NFC(const ::identity_list* value); ::identity_list* identity_list_dup_NFC(const ::identity_list* value);

28
src/string_view.hh

@ -1,28 +0,0 @@
// This file is under GNU General Public License 3.0
// see LICENSE.txt
#ifndef PEP_DATATYPES_STRING_VIEW_HH
#define PEP_DATATYPES_STRING_VIEW_HH
#include <string_view>
namespace pEp
{
template<class CharT>
using basic_string_view = std::basic_string_view<CharT>;
typedef std::string_view string_view;
typedef std::u16string_view u16string_view;
typedef std::u32string_view u32string_view;
}
namespace pEp
{
constexpr
string_view operator""_sv(const char* s, size_t sz) noexcept
{
return string_view(s,sz);
}
}
#endif // PEP_DATATYPES_STRING_VIEW_HH
Loading…
Cancel
Save