summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorSteven Le Rouzic <steven.lerouzic@gmail.com>2025-02-03 23:46:25 +0100
committerSteven Le Rouzic <steven.lerouzic@gmail.com>2025-02-03 23:46:25 +0100
commitf2b1af8d3f23ff47b343cef8feef6e25ff5377e4 (patch)
tree505cca49e57a98d57d6768ed36992e1f1dd11a53
parenta89e72929ed047344e221f65542e763e3f6ac3de (diff)
Add string_view::from_zstr
-rw-r--r--asl/string_view.hpp5
-rw-r--r--asl/tests/string_view_tests.cpp18
2 files changed, 23 insertions, 0 deletions
diff --git a/asl/string_view.hpp b/asl/string_view.hpp
index 6c4d867..c869092 100644
--- a/asl/string_view.hpp
+++ b/asl/string_view.hpp
@@ -32,6 +32,11 @@ public:
ASL_ASSERT(m_data[kSize - 1] == '\0'); // NOLINT(*-pointer-arithmetic)
}
+ static constexpr string_view from_zstr(const char* str)
+ {
+ return string_view(str, asl::strlen(str));
+ }
+
constexpr string_view(const string_view&) = default;
constexpr string_view(string_view&&) = default;
diff --git a/asl/tests/string_view_tests.cpp b/asl/tests/string_view_tests.cpp
index 798acb5..7175661 100644
--- a/asl/tests/string_view_tests.cpp
+++ b/asl/tests/string_view_tests.cpp
@@ -23,6 +23,24 @@ ASL_TEST(from_literal)
ASL_TEST_EXPECT(s2.is_empty());
}
+ASL_TEST(from_zstr)
+{
+ const char* s1 = "";
+ const char* s2 = "abc";
+ const char* s3 = "abc\0def";
+
+ auto sv1 = asl::string_view::from_zstr(s1);
+ auto sv2 = asl::string_view::from_zstr(s2);
+ auto sv3 = asl::string_view::from_zstr(s3);
+
+ ASL_TEST_ASSERT(sv1.size() == 0);
+ ASL_TEST_ASSERT(sv2.size() == 3);
+ ASL_TEST_ASSERT(sv3.size() == 3);
+
+ ASL_TEST_ASSERT(sv2 == "abc"_sv);
+ ASL_TEST_ASSERT(sv3 == "abc"_sv);
+}
+
ASL_TEST(substr1)
{
asl::string_view s1 = "abcd";