libfilezilla
string.hpp
Go to the documentation of this file.
1 #ifndef LIBFILEZILLA_STRING_HEADER
2 #define LIBFILEZILLA_STRING_HEADER
3 
4 #include "libfilezilla.hpp"
5 
6 #include <string>
7 
15 namespace fz {
16 
29 #ifdef FZ_WINDOWS
30 typedef std::wstring native_string;
31 #endif
32 #if defined(FZ_UNIX) || defined(FZ_MAC)
33 typedef std::string native_string;
34 #endif
35 
40 native_string FZ_PUBLIC_SYMBOL to_native(std::string const& in);
41 
46 native_string FZ_PUBLIC_SYMBOL to_native(std::wstring const& in);
47 
54 int FZ_PUBLIC_SYMBOL stricmp(std::string const& a, std::string const& b);
55 int FZ_PUBLIC_SYMBOL stricmp(std::wstring const& a, std::wstring const& b);
56 
74 template<typename Char>
75 Char tolower_ascii(Char c) {
76  if (c >= 'A' && c <= 'Z') {
77  return c + ('a' - 'A');
78  }
79  return c;
80 }
81 
82 template<>
83 std::wstring::value_type FZ_PUBLIC_SYMBOL tolower_ascii(std::wstring::value_type c);
84 
87  // Note: For UTF-8 strings it works on individual octets!
88 template<typename String>
89 String str_tolower_ascii(String const& s)
90 {
91  String ret = s;
92  for (auto& c : ret) {
93  c = tolower_ascii(c);
94  }
95  return ret;
96 }
97 
104 std::wstring FZ_PUBLIC_SYMBOL to_wstring(std::string const& in);
105 
107 inline std::wstring FZ_PUBLIC_SYMBOL to_wstring(std::wstring const& in) { return in; }
108 
113 std::wstring FZ_PUBLIC_SYMBOL to_wstring_from_utf8(std::string const& in);
114 
121 std::string FZ_PUBLIC_SYMBOL to_string(std::wstring const& in);
122 
124 inline std::string FZ_PUBLIC_SYMBOL to_string(std::string const& in) { return in; }
125 
127 template<typename Char>
128 size_t strlen(Char const* str) {
129  return std::char_traits<Char>::length(str);
130 }
131 
132 
139 std::string FZ_PUBLIC_SYMBOL to_utf8(std::string const& in);
140 
147 std::string FZ_PUBLIC_SYMBOL to_utf8(std::wstring const& in);
148 
149 
156 template<typename Char>
157 int hex_char_to_int(Char c)
158 {
159  if (c >= 'a')
160  return c - 'a' + 10;
161  if (c >= 'A')
162  return c - 'A' + 10;
163  else
164  return c - '0';
165 }
166 
173 template<typename Char = char>
174 Char int_to_hex_char(int d)
175 {
176  if (d > 9) {
177  return 'a' + d - 10;
178  }
179  else {
180  return '0' + d;
181  }
182 }
183 
185 template<typename String, typename Int>
186 inline typename std::enable_if<std::is_same<String, std::string>::value, std::string>::type
187 convert(Int i) { return std::to_string(i); };
188 
189 template<typename String, typename Int>
190 inline typename std::enable_if<std::is_same<String, std::wstring>::value, std::wstring>::type
191 convert(Int i) { return std::to_wstring(i); };
192 
193 #if !defined(fzT) || defined(DOXYGEN)
194 #ifdef FZ_WINDOWS
195 
199 #define fzT(x) L ## x
200 #else
201 
205 #define fzT(x) x
206 #endif
207 #endif
208 
210 template<typename Char>
211 Char const* choose_string(char const* c, wchar_t const* w);
212 
213 template<> inline char const* choose_string(char const* c, wchar_t const*) { return c; }
214 template<> inline wchar_t const* choose_string(char const*, wchar_t const* w) { return w; }
215 
216 #if !defined(fzS) || defined(DOXYGEN)
217 
228 #define fzS(Char, s) choose_string<Char>(s, L ## s)
229 #endif
230 }
231 
232 #endif
std::wstring to_wstring_from_utf8(std::string const &in)
Converts from std::string in UTF-8 into std::wstring.
Char int_to_hex_char(int d)
Converts an integer to the corresponding lowercase hex digit.
Definition: string.hpp:174
int hex_char_to_int(Char c)
Converts a hex digit to decimal int.
Definition: string.hpp:157
std::string to_string(std::string const &in)
Returns identity, that way to_string can be called with native_string.
Definition: string.hpp:124
std::wstring to_wstring(std::wstring const &in)
Returns identity, that way to_wstring can be called with native_string.
Definition: string.hpp:107
int stricmp(std::string const &a, std::string const &b)
Locale-sensitive stricmp.
Char tolower_ascii(Char c)
Converts ASCII uppercase characters to lowercase as if C-locale is used.
Definition: string.hpp:75
std::enable_if< std::is_same< String, std::string >::value, std::string >::type convert(Int i)
Convert integer to string.
Definition: string.hpp:187
std::string to_utf8(std::string const &in)
Converts from std::string in native encoding into std::string in UTF-8.
size_t strlen(Char const *str)
Returns length of 0-terminated character sequence. Works with both narrow and wide-characters.
Definition: string.hpp:128
std::wstring native_string
A string in the system&#39;s native character type and encoding. Note: This typedef changes depending on...
Definition: string.hpp:30
std::string to_string(std::wstring const &in)
Converts from std::wstring into std::string in system encoding.
The namespace used by libfilezilla.
Definition: apply.hpp:16
Char const * choose_string(char const *c, wchar_t const *w)
Returns the function argument of the type matching the template argument.
Definition: string.hpp:213
String str_tolower_ascii(String const &s)
tr_tolower_ascii does for strings what tolower_ascii does for individual characters ...
Definition: string.hpp:89
Sets some global macros and further includes string.hpp.
native_string to_native(std::string const &in)
Converts std::string to native_string.
std::wstring to_wstring(std::string const &in)
Converts from std::string in system encoding into std::wstring.