summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorLinus Groh <mail@linusgroh.de>2023-02-25 16:14:37 +0100
committerLinus Groh <mail@linusgroh.de>2023-02-25 20:51:49 +0100
commit85414d9338f5b4a25f46f519c07af161c48af45d (patch)
treeb0b53ac6fbfd2c8176344b76714e8f3ed6d4eb31
parent956450df000c4b47f22f8a6c64607b9acc5e2cf1 (diff)
downloadserenity-85414d9338f5b4a25f46f519c07af161c48af45d.zip
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.
-rw-r--r--AK/FlyString.h5
-rw-r--r--AK/String.h10
2 files changed, 15 insertions, 0 deletions
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<FlyString> : Formatter<StringView> {
}
+[[nodiscard]] ALWAYS_INLINE AK::ErrorOr<AK::FlyString> 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<String> : Formatter<StringView> {
};
}
+
+[[nodiscard]] ALWAYS_INLINE AK::ErrorOr<AK::String> 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));
+}