libstdc++: Skip locale in chrono operator<< for integer seconds precision
Optimizes chrono time_point formatting by skipping locale for integer-second precision, improving performance and reducing complexity.
This commit refactors libstdc++’s chrono time formatting to improve efficiency when dealing with time points that have integer second precision. For such cases, locale-dependent formatting is unnecessary, so the code now conditionally skips the locale argument. This change eliminates a specific locale overload and simplifies initialization, while also including a minor inlining optimization for a helper function.
In Details
This change optimizes operator<< overloads for std::chrono types in libstdc++ when the _Duration type has a period denominator of 1 (representing whole seconds). In these cases, there are no sub-second components, and thus no locale-dependent formatting is required. A new internal function, __detail::__chrono_write_time, is introduced to conditionally handle formatting without a locale, removing the need for a format_to_n overload that took a locale and simplifying basic_format_context initialization.
- libstdc++
- The C++ Standard Library implementation used by GCC. It provides core language features like containers, algorithms, and I/O streams.
- std::chrono
- A C++ library for handling time and dates, providing types for durations, time points, and clocks.
- locale
- A set of parameters that defines user-dependent behavior, such as date and time formatting, number representation, and character classification.
- time_point
- A C++
std::chronotype representing a specific point in time, usually expressed as a duration since a specific epoch. - integer seconds precision
- Indicates that a time duration or point is measured in whole seconds, with no fractional part. In
std::chrono, this corresponds to aperiodwhere the denominator is 1. - __gnu__::__always_inline__
- A GCC-specific attribute that suggests the compiler should always inline the function, even if it might normally decide against it.