diff options
author | arkady-e1ppa <arkady-e1ppa@yandex-team.com> | 2024-06-13 16:50:14 +0300 |
---|---|---|
committer | arkady-e1ppa <arkady-e1ppa@yandex-team.com> | 2024-06-13 17:13:41 +0300 |
commit | 3a8a5fac5ba669fa5bed1ccd92e75bdfc6d30d21 (patch) | |
tree | 6282648de72746e2de7193e12ecc3ee7e4ad40f5 /library/cpp/yt/string/format_string-inl.h | |
parent | 3021b75cb7c16df7e4c99f77ef1509c72a79c876 (diff) | |
download | ydb-3a8a5fac5ba669fa5bed1ccd92e75bdfc6d30d21.tar.gz |
YT-21868: Enable stat analysis in some other places
We slightly rework inner workings of stat analysis. For almost any sane use case the behavior is identical, but should compile a little faster.
If you send string literals like `char[N]` or `const char*` make them constexpr. If you can't (e.g. `ex.what()` case) wrap it in `TStringBuf`, if you want the "by the book; 100% right" solution then wrap it in `TRuntimeFormat` instead.
`SetRequestInfo` methods now statically checks the format. Only one error was found -- hooray!
Some other internal stuff was added, a lot removed -- don't worry about it. You won't be able to see the difference
62050dfe8a9cedc1289f18e80397ff33a8e2ecdb
Diffstat (limited to 'library/cpp/yt/string/format_string-inl.h')
-rw-r--r-- | library/cpp/yt/string/format_string-inl.h | 26 |
1 files changed, 17 insertions, 9 deletions
diff --git a/library/cpp/yt/string/format_string-inl.h b/library/cpp/yt/string/format_string-inl.h index 5187a2ac6b..a692d9648d 100644 --- a/library/cpp/yt/string/format_string-inl.h +++ b/library/cpp/yt/string/format_string-inl.h @@ -11,7 +11,7 @@ namespace NYT { template <class... TArgs> template <class T> requires std::constructible_from<std::string_view, T> -consteval TBasicStaticFormat<TArgs...>::TBasicStaticFormat(const T& fmt) +consteval TBasicFormatString<TArgs...>::TBasicFormatString(const T& fmt) : Format_(fmt) { CheckFormattability(); @@ -21,13 +21,13 @@ consteval TBasicStaticFormat<TArgs...>::TBasicStaticFormat(const T& fmt) } template <class... TArgs> -TStringBuf TBasicStaticFormat<TArgs...>::Get() const noexcept +TStringBuf TBasicFormatString<TArgs...>::Get() const noexcept { return {Format_}; } template <class... TArgs> -consteval void TBasicStaticFormat<TArgs...>::CheckFormattability() +consteval void TBasicFormatString<TArgs...>::CheckFormattability() { #if !defined(NDEBUG) && !defined(YT_DISABLE_FORMAT_STATIC_ANALYSIS) using TTuple = std::tuple<std::remove_cvref_t<TArgs>...>; @@ -42,13 +42,21 @@ consteval void TBasicStaticFormat<TArgs...>::CheckFormattability() #endif } -inline TRuntimeFormat::TRuntimeFormat(TStringBuf fmt) - : Format_(fmt) -{ } - -inline TStringBuf TRuntimeFormat::Get() const noexcept +template <class... TArgs> +TBasicFormatString<TArgs...>::TBasicFormatString(TRuntimeFormat fmt) + : Format_(fmt.Get()) { - return Format_; + // NB(arkady-e1ppa): StaticFormat performs the + // formattability check of the args in a way + // that provides more useful information + // than a simple static_assert with conjunction. + // Additionally, the latter doesn't work properly + // for older clang version. + static constexpr auto argsChecker = [] { + CheckFormattability(); + return 42; + } (); + Y_UNUSED(argsChecker); } //////////////////////////////////////////////////////////////////////////////// |