mirror of
https://github.com/RGBCube/serenity
synced 2025-05-31 10:28:10 +00:00
AK: Use __builtin_memset() and such to reduce header dependencies
We can use __builtin_memset() without including <string.h>. This is pretty neat, as it will allow us to reduce the header deps of AK templates a bit, if applied consistently. Note that this is an enabling change for an upcoming #include removal.
This commit is contained in:
parent
b1058b33fb
commit
35d88f536c
5 changed files with 14 additions and 14 deletions
|
@ -112,7 +112,7 @@ public:
|
||||||
fill(default_value);
|
fill(default_value);
|
||||||
|
|
||||||
if (previous_data != nullptr) {
|
if (previous_data != nullptr) {
|
||||||
memcpy(m_data, previous_data, previous_size_bytes);
|
__builtin_memcpy(m_data, previous_data, previous_size_bytes);
|
||||||
|
|
||||||
if ((previous_size % 8) != 0) {
|
if ((previous_size % 8) != 0) {
|
||||||
if (default_value)
|
if (default_value)
|
||||||
|
@ -127,7 +127,7 @@ public:
|
||||||
|
|
||||||
void fill(bool value)
|
void fill(bool value)
|
||||||
{
|
{
|
||||||
memset(m_data, value ? 0xff : 0x00, size_in_bytes());
|
__builtin_memset(m_data, value ? 0xff : 0x00, size_in_bytes());
|
||||||
}
|
}
|
||||||
|
|
||||||
Optional<size_t> find_first_set() const
|
Optional<size_t> find_first_set() const
|
||||||
|
|
|
@ -213,7 +213,7 @@ public:
|
||||||
{
|
{
|
||||||
int old_size = size();
|
int old_size = size();
|
||||||
grow(size() + data_size);
|
grow(size() + data_size);
|
||||||
memcpy(this->data() + old_size, data, data_size);
|
__builtin_memcpy(this->data() + old_size, data, data_size);
|
||||||
}
|
}
|
||||||
|
|
||||||
private:
|
private:
|
||||||
|
@ -237,7 +237,7 @@ inline ByteBufferImpl::ByteBufferImpl(const void* data, size_t size, Constructio
|
||||||
{
|
{
|
||||||
ASSERT(mode == Copy);
|
ASSERT(mode == Copy);
|
||||||
m_data = static_cast<u8*>(kmalloc(size));
|
m_data = static_cast<u8*>(kmalloc(size));
|
||||||
memcpy(m_data, data, size);
|
__builtin_memcpy(m_data, data, size);
|
||||||
m_owned = true;
|
m_owned = true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -257,7 +257,7 @@ inline void ByteBufferImpl::grow(size_t size)
|
||||||
ASSERT(size > m_size);
|
ASSERT(size > m_size);
|
||||||
ASSERT(m_owned);
|
ASSERT(m_owned);
|
||||||
u8* new_data = static_cast<u8*>(kmalloc(size));
|
u8* new_data = static_cast<u8*>(kmalloc(size));
|
||||||
memcpy(new_data, m_data, m_size);
|
__builtin_memcpy(new_data, m_data, m_size);
|
||||||
u8* old_data = m_data;
|
u8* old_data = m_data;
|
||||||
m_data = new_data;
|
m_data = new_data;
|
||||||
m_size = size;
|
m_size = size;
|
||||||
|
@ -272,7 +272,7 @@ inline NonnullRefPtr<ByteBufferImpl> ByteBufferImpl::create_uninitialized(size_t
|
||||||
inline NonnullRefPtr<ByteBufferImpl> ByteBufferImpl::create_zeroed(size_t size)
|
inline NonnullRefPtr<ByteBufferImpl> ByteBufferImpl::create_zeroed(size_t size)
|
||||||
{
|
{
|
||||||
auto buffer = ::adopt(*new ByteBufferImpl(size));
|
auto buffer = ::adopt(*new ByteBufferImpl(size));
|
||||||
memset(buffer->data(), 0, size);
|
__builtin_memset(buffer->data(), 0, size);
|
||||||
return buffer;
|
return buffer;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -157,7 +157,7 @@ private:
|
||||||
ASSERT(m_has_value);
|
ASSERT(m_has_value);
|
||||||
return *reinterpret_cast<const T*>(&m_storage);
|
return *reinterpret_cast<const T*>(&m_storage);
|
||||||
}
|
}
|
||||||
u8 m_storage[sizeof(T)] { 0 };
|
unsigned char m_storage[sizeof(T)] { 0 };
|
||||||
bool m_has_value { false };
|
bool m_has_value { false };
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
|
@ -177,7 +177,7 @@ public:
|
||||||
return !cstring;
|
return !cstring;
|
||||||
if (!cstring)
|
if (!cstring)
|
||||||
return false;
|
return false;
|
||||||
return !strcmp(characters(), cstring);
|
return !__builtin_strcmp(characters(), cstring);
|
||||||
}
|
}
|
||||||
|
|
||||||
bool operator!=(const char* cstring) const
|
bool operator!=(const char* cstring) const
|
||||||
|
@ -273,7 +273,7 @@ inline bool operator<(const char* characters, const String& string)
|
||||||
if (string.is_null())
|
if (string.is_null())
|
||||||
return false;
|
return false;
|
||||||
|
|
||||||
return strcmp(characters, string.characters()) < 0;
|
return __builtin_strcmp(characters, string.characters()) < 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
inline bool operator>=(const char* characters, const String& string)
|
inline bool operator>=(const char* characters, const String& string)
|
||||||
|
@ -289,7 +289,7 @@ inline bool operator>(const char* characters, const String& string)
|
||||||
if (string.is_null())
|
if (string.is_null())
|
||||||
return false;
|
return false;
|
||||||
|
|
||||||
return strcmp(characters, string.characters()) > 0;
|
return __builtin_strcmp(characters, string.characters()) > 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
inline bool operator<=(const char* characters, const String& string)
|
inline bool operator<=(const char* characters, const String& string)
|
||||||
|
|
|
@ -96,7 +96,7 @@ public:
|
||||||
if (!count)
|
if (!count)
|
||||||
return;
|
return;
|
||||||
if constexpr (Traits<T>::is_trivial()) {
|
if constexpr (Traits<T>::is_trivial()) {
|
||||||
memmove(destination, source, count * sizeof(T));
|
__builtin_memmove(destination, source, count * sizeof(T));
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
for (size_t i = 0; i < count; ++i)
|
for (size_t i = 0; i < count; ++i)
|
||||||
|
@ -108,7 +108,7 @@ public:
|
||||||
if (!count)
|
if (!count)
|
||||||
return;
|
return;
|
||||||
if constexpr (Traits<T>::is_trivial()) {
|
if constexpr (Traits<T>::is_trivial()) {
|
||||||
memmove(destination, source, count * sizeof(T));
|
__builtin_memmove(destination, source, count * sizeof(T));
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
for (size_t i = 0; i < count; ++i)
|
for (size_t i = 0; i < count; ++i)
|
||||||
|
@ -121,7 +121,7 @@ public:
|
||||||
return true;
|
return true;
|
||||||
|
|
||||||
if constexpr (Traits<T>::is_trivial())
|
if constexpr (Traits<T>::is_trivial())
|
||||||
return !memcmp(a, b, count * sizeof(T));
|
return !__builtin_memcmp(a, b, count * sizeof(T));
|
||||||
|
|
||||||
for (size_t i = 0; i < count; ++i) {
|
for (size_t i = 0; i < count; ++i) {
|
||||||
if (a[i] != b[i])
|
if (a[i] != b[i])
|
||||||
|
@ -641,7 +641,7 @@ private:
|
||||||
size_t m_size { 0 };
|
size_t m_size { 0 };
|
||||||
size_t m_capacity { 0 };
|
size_t m_capacity { 0 };
|
||||||
|
|
||||||
alignas(T) u8 m_inline_buffer_storage[sizeof(T) * inline_capacity];
|
alignas(T) unsigned char m_inline_buffer_storage[sizeof(T) * inline_capacity];
|
||||||
T* m_outline_buffer { nullptr };
|
T* m_outline_buffer { nullptr };
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue