Skip to content

Commit 37120ed

Browse files
Reduce inclusion for <queue>, <stack>, <stacktrace>, and <thread> (#5003)
Co-authored-by: Stephan T. Lavavej <[email protected]>
1 parent 5bb81f6 commit 37120ed

File tree

20 files changed

+1737
-1350
lines changed

20 files changed

+1737
-1350
lines changed

stl/CMakeLists.txt

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,7 @@ set(HEADERS
2020
${CMAKE_CURRENT_LIST_DIR}/inc/__msvc_ostream.hpp
2121
${CMAKE_CURRENT_LIST_DIR}/inc/__msvc_print.hpp
2222
${CMAKE_CURRENT_LIST_DIR}/inc/__msvc_ranges_to.hpp
23+
${CMAKE_CURRENT_LIST_DIR}/inc/__msvc_ranges_tuple_formatter.hpp
2324
${CMAKE_CURRENT_LIST_DIR}/inc/__msvc_sanitizer_annotate_container.hpp
2425
${CMAKE_CURRENT_LIST_DIR}/inc/__msvc_string_view.hpp
2526
${CMAKE_CURRENT_LIST_DIR}/inc/__msvc_system_error_abi.hpp

stl/inc/__msvc_formatter.hpp

Lines changed: 41 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -123,6 +123,8 @@ struct _Dynamic_format_specs : _Basic_format_specs<_CharT> {
123123
int _Dynamic_precision_index = -1;
124124
};
125125

126+
[[noreturn]] inline void _Throw_format_error(const char* _Message);
127+
126128
_EXPORT_STD template <class _CharT>
127129
class basic_format_parse_context;
128130

@@ -398,6 +400,45 @@ constexpr bool enable_nonlocking_formatter_optimization<pair<_Ty1, _Ty2>> =
398400
template <class... _Ts>
399401
constexpr bool enable_nonlocking_formatter_optimization<tuple<_Ts...>> =
400402
(enable_nonlocking_formatter_optimization<_Ts> && ...);
403+
404+
template <class _CharT>
405+
struct _Fill_align_and_width_specs {
406+
int _Width = -1;
407+
int _Dynamic_width_index = -1;
408+
_Fmt_align _Alignment = _Fmt_align::_None;
409+
uint8_t _Fill_length = 1;
410+
// At most one codepoint (so one char32_t or four utf-8 char8_t).
411+
_CharT _Fill[4 / sizeof(_CharT)]{' '};
412+
};
413+
414+
// TRANSITION, VSO-1236041: Avoid declaring and defining member functions in different headers.
415+
template <class _CharT, class _Pc>
416+
_NODISCARD constexpr _Pc::iterator _Fill_align_and_width_formatter_parse(
417+
_Fill_align_and_width_specs<_CharT>& _Specs, _Pc& _Parse_ctx);
418+
419+
template <class _CharT, class _FormatContext, class _Func>
420+
_NODISCARD _FormatContext::iterator _Fill_align_and_width_formatter_format(
421+
const _Fill_align_and_width_specs<_CharT>& _Specs, _FormatContext& _Format_ctx, int _Width,
422+
_Fmt_align _Default_align, _Func&& _Fn);
423+
424+
template <class _CharT>
425+
struct _Fill_align_and_width_formatter {
426+
public:
427+
template <class _ParseContext = basic_format_parse_context<_CharT>> // improves throughput, see GH-5003
428+
_NODISCARD constexpr _ParseContext::iterator _Parse(type_identity_t<_ParseContext&> _Parse_ctx) {
429+
return _STD _Fill_align_and_width_formatter_parse(_Specs, _Parse_ctx);
430+
}
431+
432+
template <class _FormatContext, class _Func>
433+
_NODISCARD constexpr auto _Format(
434+
_FormatContext& _Format_ctx, const int _Width, _Fmt_align _Default_align, _Func&& _Fn) const {
435+
return _STD _Fill_align_and_width_formatter_format(
436+
_Specs, _Format_ctx, _Width, _Default_align, _STD forward<_Func>(_Fn));
437+
}
438+
439+
private:
440+
_Fill_align_and_width_specs<_CharT> _Specs;
441+
};
401442
#endif // _HAS_CXX23
402443
_STD_END
403444

0 commit comments

Comments
 (0)