From 8aad6443ded53db1b98aec63172b4e9944b3b6e9 Mon Sep 17 00:00:00 2001 From: Steven Le Rouzic Date: Thu, 14 Nov 2024 23:28:54 +0100 Subject: Replace some builtins --- asl/format.cpp | 3 ++- asl/memory.hpp | 16 ++++++++++++++++ asl/string_view.hpp | 6 ++---- asl/tests/string_view_tests.cpp | 10 +++++----- 4 files changed, 25 insertions(+), 10 deletions(-) (limited to 'asl') diff --git a/asl/format.cpp b/asl/format.cpp index 5c22026..f0b51e1 100644 --- a/asl/format.cpp +++ b/asl/format.cpp @@ -1,6 +1,7 @@ #include "asl/format.hpp" #include "asl/utility.hpp" #include "asl/assert.hpp" +#include "asl/memory.hpp" void asl::format_internals::format( writer* writer, @@ -75,7 +76,7 @@ void asl::format_internals::format( void asl::AslFormat(formatter& f, const char* str) { - f.write({str, static_cast(__builtin_strlen(str))}); + f.write({str, asl::strlen(str)}); } void asl::AslFormat(formatter& f, float) diff --git a/asl/memory.hpp b/asl/memory.hpp index c73a165..33b10fe 100644 --- a/asl/memory.hpp +++ b/asl/memory.hpp @@ -6,3 +6,19 @@ constexpr void* operator new(size_t, void* ptr) { return ptr; } + +namespace asl +{ + +constexpr isize_t memcmp(const void* a, const void* b, isize_t size) +{ + return __builtin_memcmp(a, b, static_cast(size)); +} + +constexpr isize_t strlen(const char* s) +{ + return static_cast(__builtin_strlen(s)); +} + +} // namespace asl + diff --git a/asl/string_view.hpp b/asl/string_view.hpp index 85f1323..51d4234 100644 --- a/asl/string_view.hpp +++ b/asl/string_view.hpp @@ -3,12 +3,11 @@ #include "asl/integers.hpp" #include "asl/meta.hpp" #include "asl/span.hpp" +#include "asl/memory.hpp" namespace asl { -// @Todo Replace all the __builtin_strlen - class string_view { const char* m_data{}; @@ -74,8 +73,7 @@ public: constexpr bool operator==(string_view other) const { if (m_size != other.m_size) { return false; } - // @Todo Remove builtin_memcmp - return __builtin_memcmp(m_data, other.m_data, static_cast(m_size)) == 0; + return memcmp(m_data, other.m_data, m_size) == 0; } }; diff --git a/asl/tests/string_view_tests.cpp b/asl/tests/string_view_tests.cpp index 8f7ff28..1340247 100644 --- a/asl/tests/string_view_tests.cpp +++ b/asl/tests/string_view_tests.cpp @@ -17,7 +17,7 @@ ASL_TEST(from_literal) { asl::string_view s1 = "Hello"_sv; ASL_TEST_ASSERT(s1.size() == 5); - ASL_TEST_EXPECT(__builtin_memcmp(s1.data(), "Hello", 5) == 0); + ASL_TEST_EXPECT(asl::memcmp(s1.data(), "Hello", 5) == 0); asl::string_view s2 = ""_sv; ASL_TEST_EXPECT(s2.is_empty()); @@ -29,11 +29,11 @@ ASL_TEST(substr1) asl::string_view s2 = s1.substr(0); ASL_TEST_ASSERT(s2.size() == 4); - ASL_TEST_EXPECT(__builtin_memcmp(s2.data(), "abcd", 4) == 0); + ASL_TEST_EXPECT(asl::memcmp(s2.data(), "abcd", 4) == 0); s2 = s1.substr(2); ASL_TEST_ASSERT(s2.size() == 2); - ASL_TEST_EXPECT(__builtin_memcmp(s2.data(), "cd", 2) == 0); + ASL_TEST_EXPECT(asl::memcmp(s2.data(), "cd", 2) == 0); s2 = s1.substr(4); ASL_TEST_ASSERT(s2.size() == 0); @@ -45,11 +45,11 @@ ASL_TEST(substr2) asl::string_view s2 = s1.substr(0, 4); ASL_TEST_ASSERT(s2.size() == 4); - ASL_TEST_EXPECT(__builtin_memcmp(s2.data(), "abcd", 4) == 0); + ASL_TEST_EXPECT(asl::memcmp(s2.data(), "abcd", 4) == 0); s2 = s1.substr(1, 2); ASL_TEST_ASSERT(s2.size() == 2); - ASL_TEST_EXPECT(__builtin_memcmp(s2.data(), "bc", 2) == 0); + ASL_TEST_EXPECT(asl::memcmp(s2.data(), "bc", 2) == 0); s2 = s1.substr(4, 0); ASL_TEST_ASSERT(s2.size() == 0); -- cgit