libfilezilla
Classes | Namespaces | Macros | Typedefs | Functions
string.hpp File Reference

String types and assorted functions. More...

#include "libfilezilla.hpp"
#include <algorithm>
#include <string>
#include <string_view>
#include <vector>
Include dependency graph for string.hpp:
This graph shows which files directly or indirectly include this file:

Go to the source code of this file.

Classes

struct  less_insensitive_ascii
 Comparator to be used for std::map for case-insentitive keys. More...
 

Namespaces

 fz
 The namespace used by libfilezilla.
 

Macros

#define fzT(x)   L ## x
 Macro for a string literal in system-native character type.
Note: Macro definition changes depending on platform! More...
 
#define fzS(Char, s)   fz::choose_string<Char>(s, L ## s)
 Macro to get const pointer to a string of the corresponding type. More...
 

Typedefs

typedef std::wstring native_string
 A string in the system's native character type and encoding.
Note: This typedef changes depending on platform! More...
 
typedef std::wstring_view native_string_view
 

Functions

native_string to_native (std::string_view const &in)
 Converts std::string to native_string. More...
 
native_string to_native (std::wstring_view const &in)
 Convert std::wstring to native_string. More...
 
template<typename T , typename std::enable_if_t< std::is_same_v< native_string, typename std::decay_t< T >>, int > = 0>
native_string to_native (T const &in)
 Avoid converting native_string to native_string_view and back to string_view.
 
int stricmp (std::string_view const &a, std::string_view const &b)
 Locale-sensitive stricmp. More...
 
int stricmp (std::wstring_view const &a, std::wstring_view const &b)
 
template<typename Char >
Char tolower_ascii (Char c)
 Converts ASCII uppercase characters to lowercase as if C-locale is used. More...
 
template<>
std::wstring::value_type tolower_ascii (std::wstring::value_type c)
 
template<typename Char >
Char toupper_ascii (Char c)
 Converts ASCII lowercase characters to uppercase as if C-locale is used.
 
template<>
std::wstring::value_type toupper_ascii (std::wstring::value_type c)
 
std::string str_tolower_ascii (std::string_view const &s)
 tr_tolower_ascii does for strings what tolower_ascii does for individual characters
 
std::wstring str_tolower_ascii (std::wstring_view const &s)
 
std::string str_toupper_ascii (std::string_view const &s)
 
std::wstring str_toupper_ascii (std::wstring_view const &s)
 
bool equal_insensitive_ascii (std::string_view a, std::string_view b)
 Locale-insensitive stricmp. More...
 
bool equal_insensitive_ascii (std::wstring_view a, std::wstring_view b)
 
std::wstring to_wstring (std::string_view const &in)
 Converts from std::string in system encoding into std::wstring. More...
 
std::wstring to_wstring (std::wstring const &in)
 Returns identity, that way to_wstring can be called with native_string.
 
template<typename Arg >
std::enable_if< std::is_arithmetic< std::decay_t< Arg > >::value, std::wstring >::type to_wstring (Arg &&arg)
 Converts from arithmetic type to std::wstring.
 
std::wstring to_wstring_from_utf8 (std::string const &in)
 Converts from std::string in UTF-8 into std::wstring. More...
 
std::wstring to_wstring_from_utf8 (char const *s, size_t len)
 
std::string to_string (std::wstring_view const &in)
 Converts from std::wstring into std::string in system encoding. More...
 
std::string to_string (std::string const &in)
 Returns identity, that way to_string can be called with native_string.
 
template<typename Arg >
std::enable_if< std::is_arithmetic< std::decay_t< Arg > >::value, std::string >::type to_string (Arg &&arg)
 Converts from arithmetic type to std::string.
 
template<typename Char >
size_t strlen (Char const *str)
 Returns length of 0-terminated character sequence. Works with both narrow and wide-characters.
 
std::string to_utf8 (std::string_view const &in)
 Converts from std::string in native encoding into std::string in UTF-8. More...
 
std::string to_utf8 (std::wstring_view const &in)
 Converts from std::wstring in native encoding into std::string in UTF-8. More...
 
template<typename String , typename Arg >
auto toString (Arg &&arg) -> typename std::enable_if< std::is_same< String, std::string >::value, decltype(to_string(std::forward< Arg >(arg)))>::type
 Calls either fz::to_string or fz::to_wstring depending on the passed template argument.
 
template<typename Char >
Char const * choose_string (char const *c, wchar_t const *w)
 Returns the function argument of the type matching the template argument. More...
 
template<>
char const * choose_string (char const *c, wchar_t const *)
 Returns the function argument of the type matching the template argument. More...
 
template<>
wchar_t const * choose_string (char const *, wchar_t const *w)
 Returns the function argument of the type matching the template argument. More...
 
std::string replaced_substrings (std::string const &in, std::string const &find, std::string const &replacement)
 Returns in with all occurrences of find in the input string replaced with replacement.
 
std::wstring replaced_substrings (std::wstring const &in, std::wstring const &find, std::wstring const &replacement)
 
bool replace_substrings (std::string &in, std::string const &find, std::string const &replacement)
 Modifies in, replacing all occurrences of find with replacement.
 
bool replace_substrings (std::wstring &in, std::wstring const &find, std::wstring const &replacement)
 
std::vector< std::string > strtok (std::string_view const &tokens, std::string_view const &delims, bool const ignore_empty=true)
 Tokenizes string. More...
 
std::vector< std::wstring > strtok (std::wstring_view const &tokens, std::wstring_view const &delims, bool const ignore_empty=true)
 
auto strtok (std::string_view const &tokens, char const delim, bool const ignore_empty=true)
 
auto strtok (std::wstring_view const &tokens, wchar_t const delim, bool const ignore_empty=true)
 
std::vector< std::string_view > strtok_view (std::string_view const &tokens, std::string_view const &delims, bool const ignore_empty=true)
 Tokenizes string. More...
 
std::vector< std::wstring_view > strtok_view (std::wstring_view const &tokens, std::wstring_view const &delims, bool const ignore_empty=true)
 
auto strtok_view (std::string_view const &tokens, char const delim, bool const ignore_empty=true)
 
auto strtok_view (std::wstring_view const &tokens, wchar_t const delim, bool const ignore_empty=true)
 
template<typename T >
to_integral (std::string_view const &s, T const errorval=T())
 Converts string to integral type T. If string is not convertible, errorval is returned.
 
template<typename T >
to_integral (std::wstring_view const &s, T const errorval=T())
 
template<typename T , typename StringType >
to_integral (std::basic_string_view< StringType > const &s, T const errorval=T())
 
template<typename String >
bool str_is_ascii (String const &s)
 Returns true iff the string only has characters in the 7-bit ASCII range.
 
std::string trimmed (std::string_view s, std::string_view const &chars=" \\, bool fromLeft=true, bool fromRight=true)
 Return passed string with all leading and trailing whitespace removed.
 
std::wstring trimmed (std::wstring_view s, std::wstring_view const &chars=L" \\, bool fromLeft=true, bool fromRight=true)
 
std::string ltrimmed (std::string_view s, std::string_view const &chars=" \\)
 
std::wstring ltrimmed (std::wstring_view s, std::wstring_view const &chars=L" \\)
 
std::string rtrimmed (std::string_view s, std::string_view const &chars=" \\)
 
std::wstring rtrimmed (std::wstring_view s, std::wstring_view const &chars=L" \\)
 
template<typename String , typename std::enable_if_t< std::is_same_v< typename String::value_type, char >, int > = 0>
void trim (String &s, std::string_view const &chars=" \\, bool fromLeft=true, bool fromRight=true)
 Remove all leading and trailing whitespace from string.
 
template<typename String , typename std::enable_if_t< std::is_same_v< typename String::value_type, wchar_t >, int > = 0>
void trim (String &s, std::wstring_view const &chars=L" \\, bool fromLeft=true, bool fromRight=true)
 
template<typename String , typename std::enable_if_t< std::is_same_v< typename String::value_type, char >, int > = 0>
void ltrim (String &s, std::string_view const &chars=" \\)
 
template<typename String , typename std::enable_if_t< std::is_same_v< typename String::value_type, wchar_t >, int > = 0>
void ltrim (String &s, std::wstring_view const &chars=L" \\)
 
template<typename String , typename std::enable_if_t< std::is_same_v< typename String::value_type, char >, int > = 0>
void rtrim (String &s, std::string_view const &chars=" \\)
 
template<typename String , typename std::enable_if_t< std::is_same_v< typename String::value_type, wchar_t >, int > = 0>
void rtrim (String &s, std::wstring_view const &chars=L" \\)
 
template<bool insensitive_ascii = false, typename String >
bool starts_with (String const &s, String const &beginning)
 Tests whether the first string starts with the second string. More...
 
template<bool insensitive_ascii = false, typename String >
bool ends_with (String const &s, String const &ending)
 Tests whether the first string ends with the second string. More...
 

Detailed Description

String types and assorted functions.

Defines the fz::native_string type and offers various functions to convert between different string types.

Macro Definition Documentation

◆ fzS

#define fzS (   Char,
 
)    fz::choose_string<Char>(s, L ## s)

Macro to get const pointer to a string of the corresponding type.

Useful when using string literals in templates where the type of string is a template argument:

template<typename String>
String append_foo(String const& s) {
s += fzS(String::value_type, "foo");
}

◆ fzT

#define fzT (   x)    L ## x

Macro for a string literal in system-native character type.
Note: Macro definition changes depending on platform!

Example: fzT("this string is wide on Windows and narrow elsewhere")

Examples:
list.cpp, and process.cpp.