40 lines
1.1 KiB
C++
40 lines
1.1 KiB
C++
|
///////////////////////////////////////////////////////////////
|
||
|
// Copyright 2019 John Maddock. Distributed under the Boost
|
||
|
// Software License, Version 1.0. (See accompanying file
|
||
|
// LICENSE_1_0.txt or copy at https://www.boost.org/LICENSE_1_0.txt
|
||
|
//
|
||
|
// We used to use lexical_cast internally for quick conversions from integers
|
||
|
// to strings, but that breaks if the global locale is something other than "C".
|
||
|
// See https://github.com/boostorg/multiprecision/issues/167.
|
||
|
//
|
||
|
#ifndef BOOST_MP_DETAIL_ITOS_HPP
|
||
|
#define BOOST_MP_DETAIL_ITOS_HPP
|
||
|
|
||
|
namespace boost { namespace multiprecision { namespace detail {
|
||
|
|
||
|
template <class Integer>
|
||
|
std::string itos(Integer val)
|
||
|
{
|
||
|
if (!val) return "0";
|
||
|
std::string result;
|
||
|
bool isneg = false;
|
||
|
if (val < 0)
|
||
|
{
|
||
|
val = -val;
|
||
|
isneg = true;
|
||
|
}
|
||
|
while (val)
|
||
|
{
|
||
|
result.insert(result.begin(), char('0' + (val % 10)));
|
||
|
val /= 10;
|
||
|
}
|
||
|
if (isneg)
|
||
|
result.insert(result.begin(), '-');
|
||
|
return result;
|
||
|
}
|
||
|
|
||
|
|
||
|
}}} // namespace boost::multiprecision::detail
|
||
|
|
||
|
#endif
|