Audacity 3.2.0
Namespaces | Classes | Functions
internal Namespace Reference

Namespaces

namespace  dtoa_impl
 
namespace  itoa_impl
 
namespace  x11
 

Classes

class  ComponentHandler
 
class  ConnectionProxy
 Host's proxy object between connection points. More...
 
class  ParameterChanges
 
class  ParameterQueuePool
 
class  ParameterValueQueue
 
class  PlugFrame
 Dispatches window resize events from VST PlugView to the wxWindow. More...
 

Functions

template<typename T >
ToCharsResult float_to_chars (char *first, char *last, T value, int digitsAfterDecimalPoint)
 

Function Documentation

◆ float_to_chars()

template<typename T >
ToCharsResult internal::float_to_chars ( char *  first,
char *  last,
value,
int  digitsAfterDecimalPoint 
)

The format of the resulting decimal representation is similar to printf's g format. Returns an iterator pointing past-the-end of the decimal representation.

Note
The input number must be finite, i.e. NaN's and Inf's are not supported.
The buffer must be large enough.
The result is NOT null-terminated.

Definition at line 1178 of file ToChars.cpp.

1180{
1181 if (first >= last || first == nullptr)
1182 return { last, std::errc::value_too_large };
1183
1184 if (value == 0)
1185 {
1186 *first++ = '0';
1187
1188 return { first, std::errc() };
1189 }
1190
1191 if (std::signbit(value))
1192 {
1193 value = -value;
1194 *first++ = '-';
1195 }
1196 // Compute v = buffer * 10^decimal_exponent.
1197 // The decimal digits are stored in the buffer, which needs to be interpreted
1198 // as an unsigned decimal integer.
1199 // len is the length of the buffer, i.e. the number of decimal digits.
1200 int len = 0;
1201 int decimal_exponent = 0;
1202 if (!dtoa_impl::grisu2(first, last, len, decimal_exponent, value))
1203 return { last, std::errc::value_too_large };
1204 // Format the buffer like printf("%.*g", prec, value)
1205 const int kMinExp = digitsAfterDecimalPoint < 0 ? -4 : -digitsAfterDecimalPoint;
1206 constexpr int kMaxExp = std::numeric_limits<double>::digits10;
1207
1208 // Audacity specific extension imitating Internat::ToDisplayString
1209 // for a consistent behavior
1210 if (digitsAfterDecimalPoint >= 0)
1211 {
1212 if (len + decimal_exponent > 0 && -decimal_exponent > digitsAfterDecimalPoint)
1213 {
1214 const int difference = digitsAfterDecimalPoint + decimal_exponent;
1215 decimal_exponent = -digitsAfterDecimalPoint;
1216 len += difference;
1217 }
1218 }
1219
1221 first, last, len, decimal_exponent, kMinExp, kMaxExp);
1222}
bool grisu2(char *buf, char *last, int &len, int &decimal_exponent, FloatType value)
Definition: ToChars.cpp:982
ToCharsResult format_buffer(char *buf, char *last, int len, int decimal_exponent, int min_exp, int max_exp)
prettify v = buf * 10^decimal_exponent If v is in the range [10^min_exp, 10^max_exp) it will be print...
Definition: ToChars.cpp:1076

References internal::dtoa_impl::format_buffer(), and internal::dtoa_impl::grisu2().

Referenced by ToChars().

Here is the call graph for this function:
Here is the caller graph for this function: