diff options
author | Steven Le Rouzic <steven.lerouzic@gmail.com> | 2024-11-14 23:28:54 +0100 |
---|---|---|
committer | Steven Le Rouzic <steven.lerouzic@gmail.com> | 2024-12-20 15:35:58 +0100 |
commit | 8aad6443ded53db1b98aec63172b4e9944b3b6e9 (patch) | |
tree | 5f81ef454388ecfb94c9cca7008f45dba8cbbeb6 /asl | |
parent | ae9608d4f69a07c3efcf6ba9f38cb4ac23cc2110 (diff) |
Replace some builtins
Diffstat (limited to 'asl')
-rw-r--r-- | asl/format.cpp | 3 | ||||
-rw-r--r-- | asl/memory.hpp | 16 | ||||
-rw-r--r-- | asl/string_view.hpp | 6 | ||||
-rw-r--r-- | asl/tests/string_view_tests.cpp | 10 |
4 files changed, 25 insertions, 10 deletions
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<isize_t>(__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_t>(size));
+}
+
+constexpr isize_t strlen(const char* s)
+{
+ return static_cast<isize_t>(__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<size_t>(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); |