summaryrefslogtreecommitdiff
path: root/asl
diff options
context:
space:
mode:
authorSteven Le Rouzic <steven.lerouzic@gmail.com>2024-11-14 23:28:54 +0100
committerSteven Le Rouzic <steven.lerouzic@gmail.com>2024-12-20 15:35:58 +0100
commit8aad6443ded53db1b98aec63172b4e9944b3b6e9 (patch)
tree5f81ef454388ecfb94c9cca7008f45dba8cbbeb6 /asl
parentae9608d4f69a07c3efcf6ba9f38cb4ac23cc2110 (diff)
Replace some builtins
Diffstat (limited to 'asl')
-rw-r--r--asl/format.cpp3
-rw-r--r--asl/memory.hpp16
-rw-r--r--asl/string_view.hpp6
-rw-r--r--asl/tests/string_view_tests.cpp10
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);