Skip to content

Commit 5b827fa

Browse files
committed
Move utility::conversions::print_string and utility::conversions::scan_string. Internal utility functions should be marked internal.
1 parent fd8c1d8 commit 5b827fa

File tree

9 files changed

+41
-49
lines changed

9 files changed

+41
-49
lines changed

Release/include/cpprest/asyncrt_utils.h

Lines changed: 9 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -177,12 +177,15 @@ namespace conversions
177177
/// Decode the given base64 string to a byte array
178178
/// </summary>
179179
_ASYNCRTIMP std::vector<unsigned char> __cdecl from_base64(const utility::string_t& str);
180+
}
180181

182+
namespace details
183+
{
181184
template <typename Source>
182-
utility::string_t print_string(const Source &val, const std::locale &loc)
185+
utility::string_t print_string(const Source &val)
183186
{
184187
utility::ostringstream_t oss;
185-
oss.imbue(loc);
188+
oss.imbue(std::locale::classic());
186189
oss << val;
187190
if (oss.bad())
188191
{
@@ -191,18 +194,12 @@ namespace conversions
191194
return oss.str();
192195
}
193196

194-
template <typename Source>
195-
utility::string_t print_string(const Source &val)
196-
{
197-
return print_string(val, std::locale());
198-
}
199-
200197
template <typename Target>
201-
Target scan_string(const std::string &str, const std::locale &loc = std::locale())
198+
Target scan_string(const std::string &str)
202199
{
203200
Target t;
204201
std::istringstream iss(str);
205-
iss.imbue(loc);
202+
iss.imbue(std::locale::classic());
206203
iss >> t;
207204
if (iss.bad() || iss.fail())
208205
{
@@ -212,11 +209,11 @@ namespace conversions
212209
}
213210
#if !defined(_LIBCPP_VERSION)
214211
template <typename Target>
215-
Target scan_string(const utf16string &str, const std::locale &loc = std::locale())
212+
Target scan_string(const utf16string &str)
216213
{
217214
Target t;
218215
utf16istringstream iss(str);
219-
iss.imbue(loc);
216+
iss.imbue(std::locale::classic());
220217
iss >> t;
221218
if (iss.bad() || iss.fail())
222219
{
@@ -226,10 +223,6 @@ namespace conversions
226223
}
227224
#endif
228225

229-
}
230-
231-
namespace details
232-
{
233226
/// <summary>
234227
/// Our own implementation of alpha numeric instead of std::isalnum to avoid
235228
/// taking global lock for performance reasons.

Release/include/cpprest/http_headers.h

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -159,11 +159,11 @@ class http_headers
159159
{
160160
if (has(name))
161161
{
162-
m_headers[name] = m_headers[name].append(_XPLATSTR(", ") + utility::conversions::print_string(value));
162+
m_headers[name].append(_XPLATSTR(", ")).append(utility::details::print_string(value));
163163
}
164164
else
165165
{
166-
m_headers[name] = utility::conversions::print_string(value);
166+
m_headers[name] = utility::details::print_string(value);
167167
}
168168
}
169169

Release/include/cpprest/oauth1.h

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -513,7 +513,7 @@ class oauth1_config
513513

514514
static utility::string_t _generate_timestamp()
515515
{
516-
return utility::conversions::print_string(utility::datetime::utc_timestamp(), std::locale::classic());
516+
return utility::details::print_string(utility::datetime::utc_timestamp());
517517
}
518518

519519
_ASYNCRTIMP static std::vector<unsigned char> __cdecl _hmac_sha1(const utility::string_t& key, const utility::string_t& data);

Release/include/cpprest/uri_builder.h

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -238,7 +238,7 @@ namespace web
238238
uri_builder &append_query(const utility::string_t &name, const T &value, bool do_encoding = true)
239239
{
240240
auto encodedName = name;
241-
auto encodedValue = ::utility::conversions::print_string(value, std::locale::classic());
241+
auto encodedValue = ::utility::details::print_string(value);
242242

243243
if (do_encoding)
244244
{

Release/src/http/common/http_msg.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -220,7 +220,7 @@ utility::size64_t http_headers::content_length() const
220220

221221
void http_headers::set_content_length(utility::size64_t length)
222222
{
223-
m_headers[http::header_names::content_length] = utility::conversions::print_string(length, std::locale::classic());
223+
m_headers[http::header_names::content_length] = utility::details::print_string(length);
224224
}
225225

226226
namespace details {

Release/src/http/oauth/oauth2.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -200,7 +200,7 @@ oauth2_token oauth2_config::_parse_token_from_json(const json::value& token_json
200200
{
201201
// Handle the case of a number as a JSON "string".
202202
// Using streams because std::stoll isn't avaliable on Android.
203-
int64_t expires = utility::conversions::scan_string<int64_t>(json_expires_in_val.as_string());
203+
int64_t expires = utility::details::scan_string<int64_t>(json_expires_in_val.as_string());
204204
result.set_expires_in(expires);
205205
}
206206
}

Release/src/uri/uri_parser.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -277,7 +277,7 @@ bool inner_parse(
277277
//skip the colon
278278
port_begin++;
279279

280-
*port = utility::conversions::scan_string<int>(utility::string_t(port_begin, authority_end), std::locale::classic());
280+
*port = utility::details::scan_string<int>(utility::string_t(port_begin, authority_end));
281281
}
282282
else
283283
{

Release/tests/functional/http/client/header_tests.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -391,7 +391,7 @@ TEST_FIXTURE(uri_address, overwrite_http_header)
391391
// Test default case of cpprestsdk setting host header as host:port
392392
auto& host = m_uri.host();
393393
int port = m_uri.port();
394-
utility::string_t expected_default_header = host + U(":") + utility::conversions::print_string(port);
394+
utility::string_t expected_default_header = host + U(":") + utility::details::print_string(port);
395395
http_request default_host_headers_request(methods::GET);
396396
scoped.server()->next_request().then([&](test_request *p_request)
397397
{

Release/tests/functional/utils/strings.cpp

Lines changed: 24 additions & 25 deletions
Original file line numberDiff line numberDiff line change
@@ -297,59 +297,58 @@ TEST(latin1_to_utf16)
297297
}
298298
}
299299

300-
TEST(print_string_locale, "Ignore:Android", "Locale unsupported on Android")
300+
TEST(print_string)
301+
{
302+
VERIFY_ARE_EQUAL(_XPLATSTR("1.5"), utility::details::print_string(1.5));
303+
}
304+
305+
TEST(print_string_fr_locale, "Ignore:Android", "Locale unsupported on Android")
301306
{
302-
std::locale changedLocale;
303307
try
304308
{
305309
#ifdef _WIN32
306-
changedLocale = std::locale("fr-FR");
310+
tests::common::utilities::locale_guard loc(std::locale("fr-FR"));
307311
#else
308-
changedLocale = std::locale("fr_FR.UTF-8");
312+
tests::common::utilities::locale_guard loc(std::locale("fr_FR.UTF-8"));
309313
#endif
314+
315+
VERIFY_ARE_EQUAL(_XPLATSTR("1.5"), utility::details::print_string(1.5));
310316
}
311317
catch (const std::exception &)
312318
{
313319
// Silently pass if locale isn't installed on machine.
314320
return;
315321
}
322+
}
316323

317-
tests::common::utilities::locale_guard loc(changedLocale);
318-
319-
utility::ostringstream_t oss;
320-
oss << 1000;
321-
VERIFY_ARE_EQUAL(oss.str(), utility::conversions::print_string(1000));
322-
VERIFY_ARE_EQUAL(_XPLATSTR("1000"), utility::conversions::print_string(1000, std::locale::classic()));
324+
TEST(scan_string)
325+
{
326+
VERIFY_ARE_EQUAL(1.5, utility::details::scan_string<double>("1.5"));
327+
#ifdef WIN32
328+
VERIFY_ARE_EQUAL(1.5, utility::details::scan_string<double>(L"1.5"));
329+
#endif
323330
}
324331

325332
TEST(scan_string_locale, "Ignore:Android", "Locale unsupported on Android")
326333
{
327-
std::locale changedLocale;
328334
try
329335
{
330336
#ifdef _WIN32
331-
changedLocale = std::locale("fr-FR");
337+
tests::common::utilities::locale_guard loc(std::locale("fr-FR"));
332338
#else
333-
changedLocale = std::locale("fr_FR.UTF-8");
339+
tests::common::utilities::locale_guard loc(std::locale("fr_FR.UTF-8"));
340+
#endif
341+
342+
VERIFY_ARE_EQUAL(1.5, utility::details::scan_string<double>("1.5"));
343+
#ifdef WIN32
344+
VERIFY_ARE_EQUAL(1.5, utility::details::scan_string<double>(L"1.5"));
334345
#endif
335346
}
336347
catch (const std::exception &)
337348
{
338349
// Silently pass if locale isn't installed on machine.
339350
return;
340351
}
341-
342-
VERIFY_ARE_EQUAL(_XPLATSTR("1000"), utility::conversions::scan_string<utility::string_t>(utility::string_t(_XPLATSTR("1000"))));
343-
VERIFY_ARE_EQUAL(_XPLATSTR("1,000"), utility::conversions::scan_string<utility::string_t>(utility::string_t(_XPLATSTR("1,000"))));
344-
345-
VERIFY_ARE_EQUAL(_XPLATSTR("1000"), utility::conversions::scan_string<utility::string_t>(utility::string_t(_XPLATSTR("1000")), changedLocale));
346-
VERIFY_ARE_EQUAL(_XPLATSTR("1,000"), utility::conversions::scan_string<utility::string_t>(utility::string_t(_XPLATSTR("1,000")), changedLocale));
347-
348-
{
349-
tests::common::utilities::locale_guard loc(changedLocale);
350-
VERIFY_ARE_EQUAL(_XPLATSTR("1000"), utility::conversions::scan_string<utility::string_t>(utility::string_t(_XPLATSTR("1000")), std::locale::classic()));
351-
VERIFY_ARE_EQUAL(_XPLATSTR("1,000"), utility::conversions::scan_string<utility::string_t>(utility::string_t(_XPLATSTR("1,000")), std::locale::classic()));
352-
}
353352
}
354353

355354
}

0 commit comments

Comments
 (0)