From 85414d9338f5b4a25f46f519c07af161c48af45d Mon Sep 17 00:00:00 2001 From: Linus Groh Date: Sat, 25 Feb 2023 16:14:37 +0100 Subject: [PATCH] AK: Add operator""_{short_,}string to create a String from a literal We briefly discussed this when adding the new String type but couldn't settle on a name. However, having to use String::from_utf8() on every literal string is a bit unwieldy, so let's have these options available! Naming-wise '_string' is not as short as 'sv' but should be relatively clear; it also matches '_bigint' and '_ubigint' in length. '_short_string' may be longer than the actual string itself, but it's still an improvement over the static function :^) Since our C++ source files are UTF-8 encoded anyway, it should be impossible to create a string literal with invalid UTF-8, so including that in the name is not as important as in the function that can receive arbitrary data. --- AK/FlyString.h | 5 +++++ AK/String.h | 10 ++++++++++ 2 files changed, 15 insertions(+) diff --git a/AK/FlyString.h b/AK/FlyString.h index 71631024f1..39ff80a730 100644 --- a/AK/FlyString.h +++ b/AK/FlyString.h @@ -69,6 +69,11 @@ struct Formatter : Formatter { } +[[nodiscard]] ALWAYS_INLINE AK::ErrorOr operator""_fly_string(char const* cstring, size_t length) +{ + return AK::FlyString::from_utf8(AK::StringView(cstring, length)); +} + #if USING_AK_GLOBALLY using AK::FlyString; #endif diff --git a/AK/String.h b/AK/String.h index f9d6ec48a6..de54de1e5d 100644 --- a/AK/String.h +++ b/AK/String.h @@ -259,3 +259,13 @@ struct Formatter : Formatter { }; } + +[[nodiscard]] ALWAYS_INLINE AK::ErrorOr operator""_string(char const* cstring, size_t length) +{ + return AK::String::from_utf8(AK::StringView(cstring, length)); +} + +[[nodiscard]] ALWAYS_INLINE consteval AK::String operator""_short_string(char const* cstring, size_t length) +{ + return AK::String::from_utf8_short_string(AK::StringView(cstring, length)); +}