mirror of
https://github.com/LadybirdBrowser/ladybird.git
synced 2024-11-25 09:00:22 +00:00
Everywhere: Run clang-format
This commit is contained in:
parent
0376c127f6
commit
086969277e
Notes:
sideshowbarker
2024-07-17 16:21:09 +09:00
Author: https://github.com/IdanHo Commit: https://github.com/SerenityOS/serenity/commit/086969277e Pull-request: https://github.com/SerenityOS/serenity/pull/12321 Reviewed-by: https://github.com/BertalanD Reviewed-by: https://github.com/bgianfo ✅
1665 changed files with 8479 additions and 8479 deletions
12
AK/Atomic.h
12
AK/Atomic.h
|
@ -146,9 +146,9 @@ class Atomic {
|
||||||
|
|
||||||
public:
|
public:
|
||||||
Atomic() noexcept = default;
|
Atomic() noexcept = default;
|
||||||
Atomic& operator=(const Atomic&) volatile = delete;
|
Atomic& operator=(Atomic const&) volatile = delete;
|
||||||
Atomic& operator=(Atomic&&) volatile = delete;
|
Atomic& operator=(Atomic&&) volatile = delete;
|
||||||
Atomic(const Atomic&) = delete;
|
Atomic(Atomic const&) = delete;
|
||||||
Atomic(Atomic&&) = delete;
|
Atomic(Atomic&&) = delete;
|
||||||
|
|
||||||
constexpr Atomic(T val) noexcept
|
constexpr Atomic(T val) noexcept
|
||||||
|
@ -215,9 +215,9 @@ class Atomic<T, DefaultMemoryOrder> {
|
||||||
|
|
||||||
public:
|
public:
|
||||||
Atomic() noexcept = default;
|
Atomic() noexcept = default;
|
||||||
Atomic& operator=(const Atomic&) volatile = delete;
|
Atomic& operator=(Atomic const&) volatile = delete;
|
||||||
Atomic& operator=(Atomic&&) volatile = delete;
|
Atomic& operator=(Atomic&&) volatile = delete;
|
||||||
Atomic(const Atomic&) = delete;
|
Atomic(Atomic const&) = delete;
|
||||||
Atomic(Atomic&&) = delete;
|
Atomic(Atomic&&) = delete;
|
||||||
|
|
||||||
constexpr Atomic(T val) noexcept
|
constexpr Atomic(T val) noexcept
|
||||||
|
@ -346,9 +346,9 @@ class Atomic<T*, DefaultMemoryOrder> {
|
||||||
|
|
||||||
public:
|
public:
|
||||||
Atomic() noexcept = default;
|
Atomic() noexcept = default;
|
||||||
Atomic& operator=(const Atomic&) volatile = delete;
|
Atomic& operator=(Atomic const&) volatile = delete;
|
||||||
Atomic& operator=(Atomic&&) volatile = delete;
|
Atomic& operator=(Atomic&&) volatile = delete;
|
||||||
Atomic(const Atomic&) = delete;
|
Atomic(Atomic const&) = delete;
|
||||||
Atomic(Atomic&&) = delete;
|
Atomic(Atomic&&) = delete;
|
||||||
|
|
||||||
constexpr Atomic(T* val) noexcept
|
constexpr Atomic(T* val) noexcept
|
||||||
|
|
|
@ -17,8 +17,8 @@ private:
|
||||||
friend T;
|
friend T;
|
||||||
constexpr Badge() = default;
|
constexpr Badge() = default;
|
||||||
|
|
||||||
Badge(const Badge&) = delete;
|
Badge(Badge const&) = delete;
|
||||||
Badge& operator=(const Badge&) = delete;
|
Badge& operator=(Badge const&) = delete;
|
||||||
|
|
||||||
Badge(Badge&&) = delete;
|
Badge(Badge&&) = delete;
|
||||||
Badge& operator=(Badge&&) = delete;
|
Badge& operator=(Badge&&) = delete;
|
||||||
|
|
|
@ -126,10 +126,10 @@ String encode_base64(ReadonlyBytes input)
|
||||||
const u8 index2 = ((in1 << 2) | (in2 >> 6)) & 0x3f;
|
const u8 index2 = ((in1 << 2) | (in2 >> 6)) & 0x3f;
|
||||||
const u8 index3 = in2 & 0x3f;
|
const u8 index3 = in2 & 0x3f;
|
||||||
|
|
||||||
const char out0 = alphabet[index0];
|
char const out0 = alphabet[index0];
|
||||||
const char out1 = alphabet[index1];
|
char const out1 = alphabet[index1];
|
||||||
const char out2 = is_16bit ? '=' : alphabet[index2];
|
char const out2 = is_16bit ? '=' : alphabet[index2];
|
||||||
const char out3 = is_8bit ? '=' : alphabet[index3];
|
char const out3 = is_8bit ? '=' : alphabet[index3];
|
||||||
|
|
||||||
output.append(out0);
|
output.append(out0);
|
||||||
output.append(out1);
|
output.append(out1);
|
||||||
|
|
|
@ -74,7 +74,7 @@ public:
|
||||||
}
|
}
|
||||||
|
|
||||||
if (m_next_byte.has_value()) {
|
if (m_next_byte.has_value()) {
|
||||||
const auto bit = (m_next_byte.value() >> m_bit_offset) & 1;
|
auto const bit = (m_next_byte.value() >> m_bit_offset) & 1;
|
||||||
result |= bit << nread;
|
result |= bit << nread;
|
||||||
++nread;
|
++nread;
|
||||||
|
|
||||||
|
@ -109,7 +109,7 @@ public:
|
||||||
nread += 8;
|
nread += 8;
|
||||||
m_next_byte.clear();
|
m_next_byte.clear();
|
||||||
} else {
|
} else {
|
||||||
const auto bit = (m_next_byte.value() >> (7 - m_bit_offset)) & 1;
|
auto const bit = (m_next_byte.value() >> (7 - m_bit_offset)) & 1;
|
||||||
result <<= 1;
|
result <<= 1;
|
||||||
result |= bit;
|
result |= bit;
|
||||||
++nread;
|
++nread;
|
||||||
|
|
|
@ -48,8 +48,8 @@ public:
|
||||||
return 0;
|
return 0;
|
||||||
|
|
||||||
size_t count;
|
size_t count;
|
||||||
const u8* first = &m_data[start / 8];
|
u8 const* first = &m_data[start / 8];
|
||||||
const u8* last = &m_data[(start + len) / 8];
|
u8 const* last = &m_data[(start + len) / 8];
|
||||||
u8 byte = *first;
|
u8 byte = *first;
|
||||||
byte &= bitmask_first_byte[start % 8];
|
byte &= bitmask_first_byte[start % 8];
|
||||||
if (first == last) {
|
if (first == last) {
|
||||||
|
@ -64,19 +64,19 @@ public:
|
||||||
count += popcount(byte);
|
count += popcount(byte);
|
||||||
}
|
}
|
||||||
if (++first < last) {
|
if (++first < last) {
|
||||||
const size_t* ptr_large = (const size_t*)(((FlatPtr)first + sizeof(size_t) - 1) & ~(sizeof(size_t) - 1));
|
size_t const* ptr_large = (size_t const*)(((FlatPtr)first + sizeof(size_t) - 1) & ~(sizeof(size_t) - 1));
|
||||||
if ((const u8*)ptr_large > last)
|
if ((u8 const*)ptr_large > last)
|
||||||
ptr_large = (const size_t*)last;
|
ptr_large = (size_t const*)last;
|
||||||
while (first < (const u8*)ptr_large) {
|
while (first < (u8 const*)ptr_large) {
|
||||||
count += popcount(*first);
|
count += popcount(*first);
|
||||||
first++;
|
first++;
|
||||||
}
|
}
|
||||||
const size_t* last_large = (const size_t*)((FlatPtr)last & ~(sizeof(size_t) - 1));
|
size_t const* last_large = (size_t const*)((FlatPtr)last & ~(sizeof(size_t) - 1));
|
||||||
while (ptr_large < last_large) {
|
while (ptr_large < last_large) {
|
||||||
count += popcount(*ptr_large);
|
count += popcount(*ptr_large);
|
||||||
ptr_large++;
|
ptr_large++;
|
||||||
}
|
}
|
||||||
for (first = (const u8*)ptr_large; first < last; first++)
|
for (first = (u8 const*)ptr_large; first < last; first++)
|
||||||
count += popcount(*first);
|
count += popcount(*first);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -88,24 +88,24 @@ public:
|
||||||
|
|
||||||
[[nodiscard]] bool is_null() const { return m_data == nullptr; }
|
[[nodiscard]] bool is_null() const { return m_data == nullptr; }
|
||||||
|
|
||||||
[[nodiscard]] const u8* data() const { return m_data; }
|
[[nodiscard]] u8 const* data() const { return m_data; }
|
||||||
|
|
||||||
template<bool VALUE>
|
template<bool VALUE>
|
||||||
Optional<size_t> find_one_anywhere(size_t hint = 0) const
|
Optional<size_t> find_one_anywhere(size_t hint = 0) const
|
||||||
{
|
{
|
||||||
VERIFY(hint < m_size);
|
VERIFY(hint < m_size);
|
||||||
const u8* end = &m_data[m_size / 8];
|
u8 const* end = &m_data[m_size / 8];
|
||||||
|
|
||||||
for (;;) {
|
for (;;) {
|
||||||
// We will use hint as what it is: a hint. Because we try to
|
// We will use hint as what it is: a hint. Because we try to
|
||||||
// scan over entire 32 bit words, we may start searching before
|
// scan over entire 32 bit words, we may start searching before
|
||||||
// the hint!
|
// the hint!
|
||||||
const size_t* ptr_large = (const size_t*)((FlatPtr)&m_data[hint / 8] & ~(sizeof(size_t) - 1));
|
size_t const* ptr_large = (size_t const*)((FlatPtr)&m_data[hint / 8] & ~(sizeof(size_t) - 1));
|
||||||
if ((const u8*)ptr_large < &m_data[0]) {
|
if ((u8 const*)ptr_large < &m_data[0]) {
|
||||||
ptr_large++;
|
ptr_large++;
|
||||||
|
|
||||||
// m_data isn't aligned, check first bytes
|
// m_data isn't aligned, check first bytes
|
||||||
size_t start_ptr_large = (const u8*)ptr_large - &m_data[0];
|
size_t start_ptr_large = (u8 const*)ptr_large - &m_data[0];
|
||||||
size_t i = 0;
|
size_t i = 0;
|
||||||
u8 byte = VALUE ? 0x00 : 0xff;
|
u8 byte = VALUE ? 0x00 : 0xff;
|
||||||
while (i < start_ptr_large && m_data[i] == byte)
|
while (i < start_ptr_large && m_data[i] == byte)
|
||||||
|
@ -120,14 +120,14 @@ public:
|
||||||
}
|
}
|
||||||
|
|
||||||
size_t val_large = VALUE ? 0x0 : NumericLimits<size_t>::max();
|
size_t val_large = VALUE ? 0x0 : NumericLimits<size_t>::max();
|
||||||
const size_t* end_large = (const size_t*)((FlatPtr)end & ~(sizeof(size_t) - 1));
|
size_t const* end_large = (size_t const*)((FlatPtr)end & ~(sizeof(size_t) - 1));
|
||||||
while (ptr_large < end_large && *ptr_large == val_large)
|
while (ptr_large < end_large && *ptr_large == val_large)
|
||||||
ptr_large++;
|
ptr_large++;
|
||||||
|
|
||||||
if (ptr_large == end_large) {
|
if (ptr_large == end_large) {
|
||||||
// We didn't find anything, check the remaining few bytes (if any)
|
// We didn't find anything, check the remaining few bytes (if any)
|
||||||
u8 byte = VALUE ? 0x00 : 0xff;
|
u8 byte = VALUE ? 0x00 : 0xff;
|
||||||
size_t i = (const u8*)ptr_large - &m_data[0];
|
size_t i = (u8 const*)ptr_large - &m_data[0];
|
||||||
size_t byte_count = m_size / 8;
|
size_t byte_count = m_size / 8;
|
||||||
VERIFY(i <= byte_count);
|
VERIFY(i <= byte_count);
|
||||||
while (i < byte_count && m_data[i] == byte)
|
while (i < byte_count && m_data[i] == byte)
|
||||||
|
@ -137,7 +137,7 @@ public:
|
||||||
return {}; // We already checked from the beginning
|
return {}; // We already checked from the beginning
|
||||||
|
|
||||||
// Try scanning before the hint
|
// Try scanning before the hint
|
||||||
end = (const u8*)((FlatPtr)&m_data[hint / 8] & ~(sizeof(size_t) - 1));
|
end = (u8 const*)((FlatPtr)&m_data[hint / 8] & ~(sizeof(size_t) - 1));
|
||||||
hint = 0;
|
hint = 0;
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
@ -154,7 +154,7 @@ public:
|
||||||
if constexpr (!VALUE)
|
if constexpr (!VALUE)
|
||||||
val_large = ~val_large;
|
val_large = ~val_large;
|
||||||
VERIFY(val_large != 0);
|
VERIFY(val_large != 0);
|
||||||
return ((const u8*)ptr_large - &m_data[0]) * 8 + bit_scan_forward(val_large) - 1;
|
return ((u8 const*)ptr_large - &m_data[0]) * 8 + bit_scan_forward(val_large) - 1;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -18,34 +18,34 @@ struct ByteReader {
|
||||||
__builtin_memcpy(addr, &value, sizeof(T));
|
__builtin_memcpy(addr, &value, sizeof(T));
|
||||||
}
|
}
|
||||||
template<typename T>
|
template<typename T>
|
||||||
requires(IsTriviallyConstructible<T>) static void load(const u8* addr, T& value)
|
requires(IsTriviallyConstructible<T>) static void load(u8 const* addr, T& value)
|
||||||
{
|
{
|
||||||
__builtin_memcpy(&value, addr, sizeof(T));
|
__builtin_memcpy(&value, addr, sizeof(T));
|
||||||
}
|
}
|
||||||
|
|
||||||
template<typename T>
|
template<typename T>
|
||||||
static T* load_pointer(const u8* address)
|
static T* load_pointer(u8 const* address)
|
||||||
{
|
{
|
||||||
FlatPtr value;
|
FlatPtr value;
|
||||||
load<FlatPtr>(address, value);
|
load<FlatPtr>(address, value);
|
||||||
return reinterpret_cast<T*>(value);
|
return reinterpret_cast<T*>(value);
|
||||||
}
|
}
|
||||||
|
|
||||||
static u16 load16(const u8* address)
|
static u16 load16(u8 const* address)
|
||||||
{
|
{
|
||||||
u16 value;
|
u16 value;
|
||||||
load(address, value);
|
load(address, value);
|
||||||
return value;
|
return value;
|
||||||
}
|
}
|
||||||
|
|
||||||
static u32 load32(const u8* address)
|
static u32 load32(u8 const* address)
|
||||||
{
|
{
|
||||||
u32 value;
|
u32 value;
|
||||||
load(address, value);
|
load(address, value);
|
||||||
return value;
|
return value;
|
||||||
}
|
}
|
||||||
|
|
||||||
static u64 load64(const u8* address)
|
static u64 load64(u8 const* address)
|
||||||
{
|
{
|
||||||
u64 value;
|
u64 value;
|
||||||
load(address, value);
|
load(address, value);
|
||||||
|
|
44
AK/Checked.h
44
AK/Checked.h
|
@ -127,7 +127,7 @@ public:
|
||||||
m_value = value;
|
m_value = value;
|
||||||
}
|
}
|
||||||
|
|
||||||
constexpr Checked(const Checked&) = default;
|
constexpr Checked(Checked const&) = default;
|
||||||
|
|
||||||
constexpr Checked(Checked&& other)
|
constexpr Checked(Checked&& other)
|
||||||
: m_value(exchange(other.m_value, 0))
|
: m_value(exchange(other.m_value, 0))
|
||||||
|
@ -142,7 +142,7 @@ public:
|
||||||
return *this;
|
return *this;
|
||||||
}
|
}
|
||||||
|
|
||||||
constexpr Checked& operator=(const Checked& other) = default;
|
constexpr Checked& operator=(Checked const& other) = default;
|
||||||
|
|
||||||
constexpr Checked& operator=(Checked&& other)
|
constexpr Checked& operator=(Checked&& other)
|
||||||
{
|
{
|
||||||
|
@ -199,7 +199,7 @@ public:
|
||||||
m_value /= other;
|
m_value /= other;
|
||||||
}
|
}
|
||||||
|
|
||||||
constexpr Checked& operator+=(const Checked& other)
|
constexpr Checked& operator+=(Checked const& other)
|
||||||
{
|
{
|
||||||
m_overflow |= other.m_overflow;
|
m_overflow |= other.m_overflow;
|
||||||
add(other.value());
|
add(other.value());
|
||||||
|
@ -212,7 +212,7 @@ public:
|
||||||
return *this;
|
return *this;
|
||||||
}
|
}
|
||||||
|
|
||||||
constexpr Checked& operator-=(const Checked& other)
|
constexpr Checked& operator-=(Checked const& other)
|
||||||
{
|
{
|
||||||
m_overflow |= other.m_overflow;
|
m_overflow |= other.m_overflow;
|
||||||
sub(other.value());
|
sub(other.value());
|
||||||
|
@ -225,7 +225,7 @@ public:
|
||||||
return *this;
|
return *this;
|
||||||
}
|
}
|
||||||
|
|
||||||
constexpr Checked& operator*=(const Checked& other)
|
constexpr Checked& operator*=(Checked const& other)
|
||||||
{
|
{
|
||||||
m_overflow |= other.m_overflow;
|
m_overflow |= other.m_overflow;
|
||||||
mul(other.value());
|
mul(other.value());
|
||||||
|
@ -238,7 +238,7 @@ public:
|
||||||
return *this;
|
return *this;
|
||||||
}
|
}
|
||||||
|
|
||||||
constexpr Checked& operator/=(const Checked& other)
|
constexpr Checked& operator/=(Checked const& other)
|
||||||
{
|
{
|
||||||
m_overflow |= other.m_overflow;
|
m_overflow |= other.m_overflow;
|
||||||
div(other.value());
|
div(other.value());
|
||||||
|
@ -319,7 +319,7 @@ private:
|
||||||
};
|
};
|
||||||
|
|
||||||
template<typename T>
|
template<typename T>
|
||||||
constexpr Checked<T> operator+(const Checked<T>& a, const Checked<T>& b)
|
constexpr Checked<T> operator+(Checked<T> const& a, Checked<T> const& b)
|
||||||
{
|
{
|
||||||
Checked<T> c { a };
|
Checked<T> c { a };
|
||||||
c.add(b.value());
|
c.add(b.value());
|
||||||
|
@ -327,7 +327,7 @@ constexpr Checked<T> operator+(const Checked<T>& a, const Checked<T>& b)
|
||||||
}
|
}
|
||||||
|
|
||||||
template<typename T>
|
template<typename T>
|
||||||
constexpr Checked<T> operator-(const Checked<T>& a, const Checked<T>& b)
|
constexpr Checked<T> operator-(Checked<T> const& a, Checked<T> const& b)
|
||||||
{
|
{
|
||||||
Checked<T> c { a };
|
Checked<T> c { a };
|
||||||
c.sub(b.value());
|
c.sub(b.value());
|
||||||
|
@ -335,7 +335,7 @@ constexpr Checked<T> operator-(const Checked<T>& a, const Checked<T>& b)
|
||||||
}
|
}
|
||||||
|
|
||||||
template<typename T>
|
template<typename T>
|
||||||
constexpr Checked<T> operator*(const Checked<T>& a, const Checked<T>& b)
|
constexpr Checked<T> operator*(Checked<T> const& a, Checked<T> const& b)
|
||||||
{
|
{
|
||||||
Checked<T> c { a };
|
Checked<T> c { a };
|
||||||
c.mul(b.value());
|
c.mul(b.value());
|
||||||
|
@ -343,7 +343,7 @@ constexpr Checked<T> operator*(const Checked<T>& a, const Checked<T>& b)
|
||||||
}
|
}
|
||||||
|
|
||||||
template<typename T>
|
template<typename T>
|
||||||
constexpr Checked<T> operator/(const Checked<T>& a, const Checked<T>& b)
|
constexpr Checked<T> operator/(Checked<T> const& a, Checked<T> const& b)
|
||||||
{
|
{
|
||||||
Checked<T> c { a };
|
Checked<T> c { a };
|
||||||
c.div(b.value());
|
c.div(b.value());
|
||||||
|
@ -351,73 +351,73 @@ constexpr Checked<T> operator/(const Checked<T>& a, const Checked<T>& b)
|
||||||
}
|
}
|
||||||
|
|
||||||
template<typename T>
|
template<typename T>
|
||||||
constexpr bool operator<(const Checked<T>& a, T b)
|
constexpr bool operator<(Checked<T> const& a, T b)
|
||||||
{
|
{
|
||||||
return a.value() < b;
|
return a.value() < b;
|
||||||
}
|
}
|
||||||
|
|
||||||
template<typename T>
|
template<typename T>
|
||||||
constexpr bool operator>(const Checked<T>& a, T b)
|
constexpr bool operator>(Checked<T> const& a, T b)
|
||||||
{
|
{
|
||||||
return a.value() > b;
|
return a.value() > b;
|
||||||
}
|
}
|
||||||
|
|
||||||
template<typename T>
|
template<typename T>
|
||||||
constexpr bool operator>=(const Checked<T>& a, T b)
|
constexpr bool operator>=(Checked<T> const& a, T b)
|
||||||
{
|
{
|
||||||
return a.value() >= b;
|
return a.value() >= b;
|
||||||
}
|
}
|
||||||
|
|
||||||
template<typename T>
|
template<typename T>
|
||||||
constexpr bool operator<=(const Checked<T>& a, T b)
|
constexpr bool operator<=(Checked<T> const& a, T b)
|
||||||
{
|
{
|
||||||
return a.value() <= b;
|
return a.value() <= b;
|
||||||
}
|
}
|
||||||
|
|
||||||
template<typename T>
|
template<typename T>
|
||||||
constexpr bool operator==(const Checked<T>& a, T b)
|
constexpr bool operator==(Checked<T> const& a, T b)
|
||||||
{
|
{
|
||||||
return a.value() == b;
|
return a.value() == b;
|
||||||
}
|
}
|
||||||
|
|
||||||
template<typename T>
|
template<typename T>
|
||||||
constexpr bool operator!=(const Checked<T>& a, T b)
|
constexpr bool operator!=(Checked<T> const& a, T b)
|
||||||
{
|
{
|
||||||
return a.value() != b;
|
return a.value() != b;
|
||||||
}
|
}
|
||||||
|
|
||||||
template<typename T>
|
template<typename T>
|
||||||
constexpr bool operator<(T a, const Checked<T>& b)
|
constexpr bool operator<(T a, Checked<T> const& b)
|
||||||
{
|
{
|
||||||
return a < b.value();
|
return a < b.value();
|
||||||
}
|
}
|
||||||
|
|
||||||
template<typename T>
|
template<typename T>
|
||||||
constexpr bool operator>(T a, const Checked<T>& b)
|
constexpr bool operator>(T a, Checked<T> const& b)
|
||||||
{
|
{
|
||||||
return a > b.value();
|
return a > b.value();
|
||||||
}
|
}
|
||||||
|
|
||||||
template<typename T>
|
template<typename T>
|
||||||
constexpr bool operator>=(T a, const Checked<T>& b)
|
constexpr bool operator>=(T a, Checked<T> const& b)
|
||||||
{
|
{
|
||||||
return a >= b.value();
|
return a >= b.value();
|
||||||
}
|
}
|
||||||
|
|
||||||
template<typename T>
|
template<typename T>
|
||||||
constexpr bool operator<=(T a, const Checked<T>& b)
|
constexpr bool operator<=(T a, Checked<T> const& b)
|
||||||
{
|
{
|
||||||
return a <= b.value();
|
return a <= b.value();
|
||||||
}
|
}
|
||||||
|
|
||||||
template<typename T>
|
template<typename T>
|
||||||
constexpr bool operator==(T a, const Checked<T>& b)
|
constexpr bool operator==(T a, Checked<T> const& b)
|
||||||
{
|
{
|
||||||
return a == b.value();
|
return a == b.value();
|
||||||
}
|
}
|
||||||
|
|
||||||
template<typename T>
|
template<typename T>
|
||||||
constexpr bool operator!=(T a, const Checked<T>& b)
|
constexpr bool operator!=(T a, Checked<T> const& b)
|
||||||
{
|
{
|
||||||
return a != b.value();
|
return a != b.value();
|
||||||
}
|
}
|
||||||
|
|
|
@ -45,7 +45,7 @@ template<typename... Args>
|
||||||
void compiletime_fail(Args...);
|
void compiletime_fail(Args...);
|
||||||
|
|
||||||
template<size_t N>
|
template<size_t N>
|
||||||
consteval auto extract_used_argument_index(const char (&fmt)[N], size_t specifier_start_index, size_t specifier_end_index, size_t& next_implicit_argument_index)
|
consteval auto extract_used_argument_index(char const (&fmt)[N], size_t specifier_start_index, size_t specifier_end_index, size_t& next_implicit_argument_index)
|
||||||
{
|
{
|
||||||
struct {
|
struct {
|
||||||
size_t index_value { 0 };
|
size_t index_value { 0 };
|
||||||
|
@ -69,7 +69,7 @@ consteval auto extract_used_argument_index(const char (&fmt)[N], size_t specifie
|
||||||
|
|
||||||
// FIXME: We should rather parse these format strings at compile-time if possible.
|
// FIXME: We should rather parse these format strings at compile-time if possible.
|
||||||
template<size_t N>
|
template<size_t N>
|
||||||
consteval auto count_fmt_params(const char (&fmt)[N])
|
consteval auto count_fmt_params(char const (&fmt)[N])
|
||||||
{
|
{
|
||||||
struct {
|
struct {
|
||||||
// FIXME: Switch to variable-sized storage whenever we can come up with one :)
|
// FIXME: Switch to variable-sized storage whenever we can come up with one :)
|
||||||
|
@ -118,7 +118,7 @@ consteval auto count_fmt_params(const char (&fmt)[N])
|
||||||
if (result.total_used_last_format_specifier_start_count == 0)
|
if (result.total_used_last_format_specifier_start_count == 0)
|
||||||
compiletime_fail("Format-String Checker internal error: Expected location information");
|
compiletime_fail("Format-String Checker internal error: Expected location information");
|
||||||
|
|
||||||
const auto specifier_start_index = result.last_format_specifier_start[--result.total_used_last_format_specifier_start_count];
|
auto const specifier_start_index = result.last_format_specifier_start[--result.total_used_last_format_specifier_start_count];
|
||||||
|
|
||||||
if (result.total_used_argument_count >= result.used_arguments.size())
|
if (result.total_used_argument_count >= result.used_arguments.size())
|
||||||
compiletime_fail("Format-String Checker internal error: Too many format arguments in format string");
|
compiletime_fail("Format-String Checker internal error: Too many format arguments in format string");
|
||||||
|
@ -146,7 +146,7 @@ namespace AK::Format::Detail {
|
||||||
template<typename... Args>
|
template<typename... Args>
|
||||||
struct CheckedFormatString {
|
struct CheckedFormatString {
|
||||||
template<size_t N>
|
template<size_t N>
|
||||||
consteval CheckedFormatString(const char (&fmt)[N])
|
consteval CheckedFormatString(char const (&fmt)[N])
|
||||||
: m_string { fmt }
|
: m_string { fmt }
|
||||||
{
|
{
|
||||||
#ifdef ENABLE_COMPILETIME_FORMAT_CHECK
|
#ifdef ENABLE_COMPILETIME_FORMAT_CHECK
|
||||||
|
@ -165,7 +165,7 @@ struct CheckedFormatString {
|
||||||
private:
|
private:
|
||||||
#ifdef ENABLE_COMPILETIME_FORMAT_CHECK
|
#ifdef ENABLE_COMPILETIME_FORMAT_CHECK
|
||||||
template<size_t N, size_t param_count>
|
template<size_t N, size_t param_count>
|
||||||
consteval static bool check_format_parameter_consistency(const char (&fmt)[N])
|
consteval static bool check_format_parameter_consistency(char const (&fmt)[N])
|
||||||
{
|
{
|
||||||
auto check = count_fmt_params<N>(fmt);
|
auto check = count_fmt_params<N>(fmt);
|
||||||
if (check.unclosed_braces != 0)
|
if (check.unclosed_braces != 0)
|
||||||
|
|
|
@ -17,7 +17,7 @@ public:
|
||||||
template<typename U = T>
|
template<typename U = T>
|
||||||
void enqueue_begin(U&& value)
|
void enqueue_begin(U&& value)
|
||||||
{
|
{
|
||||||
const auto new_head = (this->m_head - 1 + Capacity) % Capacity;
|
auto const new_head = (this->m_head - 1 + Capacity) % Capacity;
|
||||||
auto& slot = this->elements()[new_head];
|
auto& slot = this->elements()[new_head];
|
||||||
if (this->m_size == Capacity)
|
if (this->m_size == Capacity)
|
||||||
slot.~T();
|
slot.~T();
|
||||||
|
|
|
@ -18,7 +18,7 @@ class CircularDuplexStream : public AK::DuplexStream {
|
||||||
public:
|
public:
|
||||||
size_t write(ReadonlyBytes bytes) override
|
size_t write(ReadonlyBytes bytes) override
|
||||||
{
|
{
|
||||||
const auto nwritten = min(bytes.size(), Capacity - m_queue.size());
|
auto const nwritten = min(bytes.size(), Capacity - m_queue.size());
|
||||||
|
|
||||||
for (size_t idx = 0; idx < nwritten; ++idx)
|
for (size_t idx = 0; idx < nwritten; ++idx)
|
||||||
m_queue.enqueue(bytes[idx]);
|
m_queue.enqueue(bytes[idx]);
|
||||||
|
@ -34,7 +34,7 @@ public:
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
const auto nwritten = write(bytes);
|
auto const nwritten = write(bytes);
|
||||||
VERIFY(nwritten == bytes.size());
|
VERIFY(nwritten == bytes.size());
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
@ -44,7 +44,7 @@ public:
|
||||||
if (has_any_error())
|
if (has_any_error())
|
||||||
return 0;
|
return 0;
|
||||||
|
|
||||||
const auto nread = min(bytes.size(), m_queue.size());
|
auto const nread = min(bytes.size(), m_queue.size());
|
||||||
|
|
||||||
for (size_t idx = 0; idx < nread; ++idx)
|
for (size_t idx = 0; idx < nread; ++idx)
|
||||||
bytes[idx] = m_queue.dequeue();
|
bytes[idx] = m_queue.dequeue();
|
||||||
|
@ -59,10 +59,10 @@ public:
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
const auto nread = min(bytes.size(), seekback);
|
auto const nread = min(bytes.size(), seekback);
|
||||||
|
|
||||||
for (size_t idx = 0; idx < nread; ++idx) {
|
for (size_t idx = 0; idx < nread; ++idx) {
|
||||||
const auto index = (m_total_written - seekback + idx) % Capacity;
|
auto const index = (m_total_written - seekback + idx) % Capacity;
|
||||||
bytes[idx] = m_queue.m_storage[index];
|
bytes[idx] = m_queue.m_storage[index];
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -70,7 +70,7 @@ public:
|
||||||
|
|
||||||
class ConstIterator {
|
class ConstIterator {
|
||||||
public:
|
public:
|
||||||
bool operator!=(const ConstIterator& other) { return m_index != other.m_index; }
|
bool operator!=(ConstIterator const& other) { return m_index != other.m_index; }
|
||||||
ConstIterator& operator++()
|
ConstIterator& operator++()
|
||||||
{
|
{
|
||||||
++m_index;
|
++m_index;
|
||||||
|
@ -81,12 +81,12 @@ public:
|
||||||
|
|
||||||
private:
|
private:
|
||||||
friend class CircularQueue;
|
friend class CircularQueue;
|
||||||
ConstIterator(const CircularQueue& queue, const size_t index)
|
ConstIterator(CircularQueue const& queue, const size_t index)
|
||||||
: m_queue(queue)
|
: m_queue(queue)
|
||||||
, m_index(index)
|
, m_index(index)
|
||||||
{
|
{
|
||||||
}
|
}
|
||||||
const CircularQueue& m_queue;
|
CircularQueue const& m_queue;
|
||||||
size_t m_index { 0 };
|
size_t m_index { 0 };
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
36
AK/Complex.h
36
AK/Complex.h
|
@ -61,7 +61,7 @@ public:
|
||||||
}
|
}
|
||||||
|
|
||||||
template<AK::Concepts::Arithmetic U>
|
template<AK::Concepts::Arithmetic U>
|
||||||
constexpr Complex<T>& operator=(const Complex<U>& other)
|
constexpr Complex<T>& operator=(Complex<U> const& other)
|
||||||
{
|
{
|
||||||
m_real = other.real();
|
m_real = other.real();
|
||||||
m_imag = other.imag();
|
m_imag = other.imag();
|
||||||
|
@ -77,7 +77,7 @@ public:
|
||||||
}
|
}
|
||||||
|
|
||||||
template<AK::Concepts::Arithmetic U>
|
template<AK::Concepts::Arithmetic U>
|
||||||
constexpr Complex<T> operator+=(const Complex<U>& x)
|
constexpr Complex<T> operator+=(Complex<U> const& x)
|
||||||
{
|
{
|
||||||
m_real += x.real();
|
m_real += x.real();
|
||||||
m_imag += x.imag();
|
m_imag += x.imag();
|
||||||
|
@ -92,7 +92,7 @@ public:
|
||||||
}
|
}
|
||||||
|
|
||||||
template<AK::Concepts::Arithmetic U>
|
template<AK::Concepts::Arithmetic U>
|
||||||
constexpr Complex<T> operator-=(const Complex<U>& x)
|
constexpr Complex<T> operator-=(Complex<U> const& x)
|
||||||
{
|
{
|
||||||
m_real -= x.real();
|
m_real -= x.real();
|
||||||
m_imag -= x.imag();
|
m_imag -= x.imag();
|
||||||
|
@ -107,7 +107,7 @@ public:
|
||||||
}
|
}
|
||||||
|
|
||||||
template<AK::Concepts::Arithmetic U>
|
template<AK::Concepts::Arithmetic U>
|
||||||
constexpr Complex<T> operator*=(const Complex<U>& x)
|
constexpr Complex<T> operator*=(Complex<U> const& x)
|
||||||
{
|
{
|
||||||
const T real = m_real;
|
const T real = m_real;
|
||||||
m_real = real * x.real() - m_imag * x.imag();
|
m_real = real * x.real() - m_imag * x.imag();
|
||||||
|
@ -124,7 +124,7 @@ public:
|
||||||
}
|
}
|
||||||
|
|
||||||
template<AK::Concepts::Arithmetic U>
|
template<AK::Concepts::Arithmetic U>
|
||||||
constexpr Complex<T> operator/=(const Complex<U>& x)
|
constexpr Complex<T> operator/=(Complex<U> const& x)
|
||||||
{
|
{
|
||||||
const T real = m_real;
|
const T real = m_real;
|
||||||
const T divisor = x.real() * x.real() + x.imag() * x.imag();
|
const T divisor = x.real() * x.real() + x.imag() * x.imag();
|
||||||
|
@ -142,7 +142,7 @@ public:
|
||||||
}
|
}
|
||||||
|
|
||||||
template<AK::Concepts::Arithmetic U>
|
template<AK::Concepts::Arithmetic U>
|
||||||
constexpr Complex<T> operator+(const Complex<U>& a)
|
constexpr Complex<T> operator+(Complex<U> const& a)
|
||||||
{
|
{
|
||||||
Complex<T> x = *this;
|
Complex<T> x = *this;
|
||||||
x += a;
|
x += a;
|
||||||
|
@ -158,7 +158,7 @@ public:
|
||||||
}
|
}
|
||||||
|
|
||||||
template<AK::Concepts::Arithmetic U>
|
template<AK::Concepts::Arithmetic U>
|
||||||
constexpr Complex<T> operator-(const Complex<U>& a)
|
constexpr Complex<T> operator-(Complex<U> const& a)
|
||||||
{
|
{
|
||||||
Complex<T> x = *this;
|
Complex<T> x = *this;
|
||||||
x -= a;
|
x -= a;
|
||||||
|
@ -174,7 +174,7 @@ public:
|
||||||
}
|
}
|
||||||
|
|
||||||
template<AK::Concepts::Arithmetic U>
|
template<AK::Concepts::Arithmetic U>
|
||||||
constexpr Complex<T> operator*(const Complex<U>& a)
|
constexpr Complex<T> operator*(Complex<U> const& a)
|
||||||
{
|
{
|
||||||
Complex<T> x = *this;
|
Complex<T> x = *this;
|
||||||
x *= a;
|
x *= a;
|
||||||
|
@ -190,7 +190,7 @@ public:
|
||||||
}
|
}
|
||||||
|
|
||||||
template<AK::Concepts::Arithmetic U>
|
template<AK::Concepts::Arithmetic U>
|
||||||
constexpr Complex<T> operator/(const Complex<U>& a)
|
constexpr Complex<T> operator/(Complex<U> const& a)
|
||||||
{
|
{
|
||||||
Complex<T> x = *this;
|
Complex<T> x = *this;
|
||||||
x /= a;
|
x /= a;
|
||||||
|
@ -206,13 +206,13 @@ public:
|
||||||
}
|
}
|
||||||
|
|
||||||
template<AK::Concepts::Arithmetic U>
|
template<AK::Concepts::Arithmetic U>
|
||||||
constexpr bool operator==(const Complex<U>& a) const
|
constexpr bool operator==(Complex<U> const& a) const
|
||||||
{
|
{
|
||||||
return (this->real() == a.real()) && (this->imag() == a.imag());
|
return (this->real() == a.real()) && (this->imag() == a.imag());
|
||||||
}
|
}
|
||||||
|
|
||||||
template<AK::Concepts::Arithmetic U>
|
template<AK::Concepts::Arithmetic U>
|
||||||
constexpr bool operator!=(const Complex<U>& a) const
|
constexpr bool operator!=(Complex<U> const& a) const
|
||||||
{
|
{
|
||||||
return !(*this == a);
|
return !(*this == a);
|
||||||
}
|
}
|
||||||
|
@ -234,7 +234,7 @@ private:
|
||||||
|
|
||||||
// reverse associativity operators for scalars
|
// reverse associativity operators for scalars
|
||||||
template<AK::Concepts::Arithmetic T, AK::Concepts::Arithmetic U>
|
template<AK::Concepts::Arithmetic T, AK::Concepts::Arithmetic U>
|
||||||
constexpr Complex<T> operator+(const U& b, const Complex<T>& a)
|
constexpr Complex<T> operator+(const U& b, Complex<T> const& a)
|
||||||
{
|
{
|
||||||
Complex<T> x = a;
|
Complex<T> x = a;
|
||||||
x += b;
|
x += b;
|
||||||
|
@ -242,7 +242,7 @@ constexpr Complex<T> operator+(const U& b, const Complex<T>& a)
|
||||||
}
|
}
|
||||||
|
|
||||||
template<AK::Concepts::Arithmetic T, AK::Concepts::Arithmetic U>
|
template<AK::Concepts::Arithmetic T, AK::Concepts::Arithmetic U>
|
||||||
constexpr Complex<T> operator-(const U& b, const Complex<T>& a)
|
constexpr Complex<T> operator-(const U& b, Complex<T> const& a)
|
||||||
{
|
{
|
||||||
Complex<T> x = a;
|
Complex<T> x = a;
|
||||||
x -= b;
|
x -= b;
|
||||||
|
@ -250,7 +250,7 @@ constexpr Complex<T> operator-(const U& b, const Complex<T>& a)
|
||||||
}
|
}
|
||||||
|
|
||||||
template<AK::Concepts::Arithmetic T, AK::Concepts::Arithmetic U>
|
template<AK::Concepts::Arithmetic T, AK::Concepts::Arithmetic U>
|
||||||
constexpr Complex<T> operator*(const U& b, const Complex<T>& a)
|
constexpr Complex<T> operator*(const U& b, Complex<T> const& a)
|
||||||
{
|
{
|
||||||
Complex<T> x = a;
|
Complex<T> x = a;
|
||||||
x *= b;
|
x *= b;
|
||||||
|
@ -258,7 +258,7 @@ constexpr Complex<T> operator*(const U& b, const Complex<T>& a)
|
||||||
}
|
}
|
||||||
|
|
||||||
template<AK::Concepts::Arithmetic T, AK::Concepts::Arithmetic U>
|
template<AK::Concepts::Arithmetic T, AK::Concepts::Arithmetic U>
|
||||||
constexpr Complex<T> operator/(const U& b, const Complex<T>& a)
|
constexpr Complex<T> operator/(const U& b, Complex<T> const& a)
|
||||||
{
|
{
|
||||||
Complex<T> x = a;
|
Complex<T> x = a;
|
||||||
x /= b;
|
x /= b;
|
||||||
|
@ -272,15 +272,15 @@ template<AK::Concepts::Arithmetic T>
|
||||||
static constinit Complex<T> complex_imag_unit = Complex<T>((T)0, (T)1);
|
static constinit Complex<T> complex_imag_unit = Complex<T>((T)0, (T)1);
|
||||||
|
|
||||||
template<AK::Concepts::Arithmetic T, AK::Concepts::Arithmetic U>
|
template<AK::Concepts::Arithmetic T, AK::Concepts::Arithmetic U>
|
||||||
static constexpr bool approx_eq(const Complex<T>& a, const Complex<U>& b, const double margin = 0.000001)
|
static constexpr bool approx_eq(Complex<T> const& a, Complex<U> const& b, double const margin = 0.000001)
|
||||||
{
|
{
|
||||||
const auto x = const_cast<Complex<T>&>(a) - const_cast<Complex<U>&>(b);
|
auto const x = const_cast<Complex<T>&>(a) - const_cast<Complex<U>&>(b);
|
||||||
return x.magnitude() <= margin;
|
return x.magnitude() <= margin;
|
||||||
}
|
}
|
||||||
|
|
||||||
// complex version of exp()
|
// complex version of exp()
|
||||||
template<AK::Concepts::Arithmetic T>
|
template<AK::Concepts::Arithmetic T>
|
||||||
static constexpr Complex<T> cexp(const Complex<T>& a)
|
static constexpr Complex<T> cexp(Complex<T> const& a)
|
||||||
{
|
{
|
||||||
// FIXME: this can probably be faster and not use so many "expensive" trigonometric functions
|
// FIXME: this can probably be faster and not use so many "expensive" trigonometric functions
|
||||||
return exp(a.real()) * Complex<T>(cos(a.imag()), sin(a.imag()));
|
return exp(a.real()) * Complex<T>(cos(a.imag()), sin(a.imag()));
|
||||||
|
|
|
@ -63,11 +63,11 @@ public:
|
||||||
constexpr T& value() { return m_value; }
|
constexpr T& value() { return m_value; }
|
||||||
|
|
||||||
// Always implemented: identity.
|
// Always implemented: identity.
|
||||||
constexpr bool operator==(const Self& other) const
|
constexpr bool operator==(Self const& other) const
|
||||||
{
|
{
|
||||||
return this->m_value == other.m_value;
|
return this->m_value == other.m_value;
|
||||||
}
|
}
|
||||||
constexpr bool operator!=(const Self& other) const
|
constexpr bool operator!=(Self const& other) const
|
||||||
{
|
{
|
||||||
return this->m_value != other.m_value;
|
return this->m_value != other.m_value;
|
||||||
}
|
}
|
||||||
|
@ -101,22 +101,22 @@ public:
|
||||||
}
|
}
|
||||||
|
|
||||||
// Only implemented when `Cmp` is true:
|
// Only implemented when `Cmp` is true:
|
||||||
constexpr bool operator>(const Self& other) const
|
constexpr bool operator>(Self const& other) const
|
||||||
{
|
{
|
||||||
static_assert(Cmp, "'a>b' is only available for DistinctNumeric types with 'Cmp'.");
|
static_assert(Cmp, "'a>b' is only available for DistinctNumeric types with 'Cmp'.");
|
||||||
return this->m_value > other.m_value;
|
return this->m_value > other.m_value;
|
||||||
}
|
}
|
||||||
constexpr bool operator<(const Self& other) const
|
constexpr bool operator<(Self const& other) const
|
||||||
{
|
{
|
||||||
static_assert(Cmp, "'a<b' is only available for DistinctNumeric types with 'Cmp'.");
|
static_assert(Cmp, "'a<b' is only available for DistinctNumeric types with 'Cmp'.");
|
||||||
return this->m_value < other.m_value;
|
return this->m_value < other.m_value;
|
||||||
}
|
}
|
||||||
constexpr bool operator>=(const Self& other) const
|
constexpr bool operator>=(Self const& other) const
|
||||||
{
|
{
|
||||||
static_assert(Cmp, "'a>=b' is only available for DistinctNumeric types with 'Cmp'.");
|
static_assert(Cmp, "'a>=b' is only available for DistinctNumeric types with 'Cmp'.");
|
||||||
return this->m_value >= other.m_value;
|
return this->m_value >= other.m_value;
|
||||||
}
|
}
|
||||||
constexpr bool operator<=(const Self& other) const
|
constexpr bool operator<=(Self const& other) const
|
||||||
{
|
{
|
||||||
static_assert(Cmp, "'a<=b' is only available for DistinctNumeric types with 'Cmp'.");
|
static_assert(Cmp, "'a<=b' is only available for DistinctNumeric types with 'Cmp'.");
|
||||||
return this->m_value <= other.m_value;
|
return this->m_value <= other.m_value;
|
||||||
|
@ -140,34 +140,34 @@ public:
|
||||||
static_assert(Flags, "'~a' is only available for DistinctNumeric types with 'Flags'.");
|
static_assert(Flags, "'~a' is only available for DistinctNumeric types with 'Flags'.");
|
||||||
return ~this->m_value;
|
return ~this->m_value;
|
||||||
}
|
}
|
||||||
constexpr Self operator&(const Self& other) const
|
constexpr Self operator&(Self const& other) const
|
||||||
{
|
{
|
||||||
static_assert(Flags, "'a&b' is only available for DistinctNumeric types with 'Flags'.");
|
static_assert(Flags, "'a&b' is only available for DistinctNumeric types with 'Flags'.");
|
||||||
return this->m_value & other.m_value;
|
return this->m_value & other.m_value;
|
||||||
}
|
}
|
||||||
constexpr Self operator|(const Self& other) const
|
constexpr Self operator|(Self const& other) const
|
||||||
{
|
{
|
||||||
static_assert(Flags, "'a|b' is only available for DistinctNumeric types with 'Flags'.");
|
static_assert(Flags, "'a|b' is only available for DistinctNumeric types with 'Flags'.");
|
||||||
return this->m_value | other.m_value;
|
return this->m_value | other.m_value;
|
||||||
}
|
}
|
||||||
constexpr Self operator^(const Self& other) const
|
constexpr Self operator^(Self const& other) const
|
||||||
{
|
{
|
||||||
static_assert(Flags, "'a^b' is only available for DistinctNumeric types with 'Flags'.");
|
static_assert(Flags, "'a^b' is only available for DistinctNumeric types with 'Flags'.");
|
||||||
return this->m_value ^ other.m_value;
|
return this->m_value ^ other.m_value;
|
||||||
}
|
}
|
||||||
constexpr Self& operator&=(const Self& other)
|
constexpr Self& operator&=(Self const& other)
|
||||||
{
|
{
|
||||||
static_assert(Flags, "'a&=b' is only available for DistinctNumeric types with 'Flags'.");
|
static_assert(Flags, "'a&=b' is only available for DistinctNumeric types with 'Flags'.");
|
||||||
this->m_value &= other.m_value;
|
this->m_value &= other.m_value;
|
||||||
return *this;
|
return *this;
|
||||||
}
|
}
|
||||||
constexpr Self& operator|=(const Self& other)
|
constexpr Self& operator|=(Self const& other)
|
||||||
{
|
{
|
||||||
static_assert(Flags, "'a|=b' is only available for DistinctNumeric types with 'Flags'.");
|
static_assert(Flags, "'a|=b' is only available for DistinctNumeric types with 'Flags'.");
|
||||||
this->m_value |= other.m_value;
|
this->m_value |= other.m_value;
|
||||||
return *this;
|
return *this;
|
||||||
}
|
}
|
||||||
constexpr Self& operator^=(const Self& other)
|
constexpr Self& operator^=(Self const& other)
|
||||||
{
|
{
|
||||||
static_assert(Flags, "'a^=b' is only available for DistinctNumeric types with 'Flags'.");
|
static_assert(Flags, "'a^=b' is only available for DistinctNumeric types with 'Flags'.");
|
||||||
this->m_value ^= other.m_value;
|
this->m_value ^= other.m_value;
|
||||||
|
@ -176,23 +176,23 @@ public:
|
||||||
|
|
||||||
// Only implemented when `Shift` is true:
|
// Only implemented when `Shift` is true:
|
||||||
// TODO: Should this take `int` instead?
|
// TODO: Should this take `int` instead?
|
||||||
constexpr Self operator<<(const Self& other) const
|
constexpr Self operator<<(Self const& other) const
|
||||||
{
|
{
|
||||||
static_assert(Shift, "'a<<b' is only available for DistinctNumeric types with 'Shift'.");
|
static_assert(Shift, "'a<<b' is only available for DistinctNumeric types with 'Shift'.");
|
||||||
return this->m_value << other.m_value;
|
return this->m_value << other.m_value;
|
||||||
}
|
}
|
||||||
constexpr Self operator>>(const Self& other) const
|
constexpr Self operator>>(Self const& other) const
|
||||||
{
|
{
|
||||||
static_assert(Shift, "'a>>b' is only available for DistinctNumeric types with 'Shift'.");
|
static_assert(Shift, "'a>>b' is only available for DistinctNumeric types with 'Shift'.");
|
||||||
return this->m_value >> other.m_value;
|
return this->m_value >> other.m_value;
|
||||||
}
|
}
|
||||||
constexpr Self& operator<<=(const Self& other)
|
constexpr Self& operator<<=(Self const& other)
|
||||||
{
|
{
|
||||||
static_assert(Shift, "'a<<=b' is only available for DistinctNumeric types with 'Shift'.");
|
static_assert(Shift, "'a<<=b' is only available for DistinctNumeric types with 'Shift'.");
|
||||||
this->m_value <<= other.m_value;
|
this->m_value <<= other.m_value;
|
||||||
return *this;
|
return *this;
|
||||||
}
|
}
|
||||||
constexpr Self& operator>>=(const Self& other)
|
constexpr Self& operator>>=(Self const& other)
|
||||||
{
|
{
|
||||||
static_assert(Shift, "'a>>=b' is only available for DistinctNumeric types with 'Shift'.");
|
static_assert(Shift, "'a>>=b' is only available for DistinctNumeric types with 'Shift'.");
|
||||||
this->m_value >>= other.m_value;
|
this->m_value >>= other.m_value;
|
||||||
|
@ -200,12 +200,12 @@ public:
|
||||||
}
|
}
|
||||||
|
|
||||||
// Only implemented when `Arith` is true:
|
// Only implemented when `Arith` is true:
|
||||||
constexpr Self operator+(const Self& other) const
|
constexpr Self operator+(Self const& other) const
|
||||||
{
|
{
|
||||||
static_assert(Arith, "'a+b' is only available for DistinctNumeric types with 'Arith'.");
|
static_assert(Arith, "'a+b' is only available for DistinctNumeric types with 'Arith'.");
|
||||||
return this->m_value + other.m_value;
|
return this->m_value + other.m_value;
|
||||||
}
|
}
|
||||||
constexpr Self operator-(const Self& other) const
|
constexpr Self operator-(Self const& other) const
|
||||||
{
|
{
|
||||||
static_assert(Arith, "'a-b' is only available for DistinctNumeric types with 'Arith'.");
|
static_assert(Arith, "'a-b' is only available for DistinctNumeric types with 'Arith'.");
|
||||||
return this->m_value - other.m_value;
|
return this->m_value - other.m_value;
|
||||||
|
@ -220,46 +220,46 @@ public:
|
||||||
static_assert(Arith, "'-a' is only available for DistinctNumeric types with 'Arith'.");
|
static_assert(Arith, "'-a' is only available for DistinctNumeric types with 'Arith'.");
|
||||||
return -this->m_value;
|
return -this->m_value;
|
||||||
}
|
}
|
||||||
constexpr Self operator*(const Self& other) const
|
constexpr Self operator*(Self const& other) const
|
||||||
{
|
{
|
||||||
static_assert(Arith, "'a*b' is only available for DistinctNumeric types with 'Arith'.");
|
static_assert(Arith, "'a*b' is only available for DistinctNumeric types with 'Arith'.");
|
||||||
return this->m_value * other.m_value;
|
return this->m_value * other.m_value;
|
||||||
}
|
}
|
||||||
constexpr Self operator/(const Self& other) const
|
constexpr Self operator/(Self const& other) const
|
||||||
{
|
{
|
||||||
static_assert(Arith, "'a/b' is only available for DistinctNumeric types with 'Arith'.");
|
static_assert(Arith, "'a/b' is only available for DistinctNumeric types with 'Arith'.");
|
||||||
return this->m_value / other.m_value;
|
return this->m_value / other.m_value;
|
||||||
}
|
}
|
||||||
constexpr Self operator%(const Self& other) const
|
constexpr Self operator%(Self const& other) const
|
||||||
{
|
{
|
||||||
static_assert(Arith, "'a%b' is only available for DistinctNumeric types with 'Arith'.");
|
static_assert(Arith, "'a%b' is only available for DistinctNumeric types with 'Arith'.");
|
||||||
return this->m_value % other.m_value;
|
return this->m_value % other.m_value;
|
||||||
}
|
}
|
||||||
constexpr Self& operator+=(const Self& other)
|
constexpr Self& operator+=(Self const& other)
|
||||||
{
|
{
|
||||||
static_assert(Arith, "'a+=b' is only available for DistinctNumeric types with 'Arith'.");
|
static_assert(Arith, "'a+=b' is only available for DistinctNumeric types with 'Arith'.");
|
||||||
this->m_value += other.m_value;
|
this->m_value += other.m_value;
|
||||||
return *this;
|
return *this;
|
||||||
}
|
}
|
||||||
constexpr Self& operator-=(const Self& other)
|
constexpr Self& operator-=(Self const& other)
|
||||||
{
|
{
|
||||||
static_assert(Arith, "'a+=b' is only available for DistinctNumeric types with 'Arith'.");
|
static_assert(Arith, "'a+=b' is only available for DistinctNumeric types with 'Arith'.");
|
||||||
this->m_value += other.m_value;
|
this->m_value += other.m_value;
|
||||||
return *this;
|
return *this;
|
||||||
}
|
}
|
||||||
constexpr Self& operator*=(const Self& other)
|
constexpr Self& operator*=(Self const& other)
|
||||||
{
|
{
|
||||||
static_assert(Arith, "'a*=b' is only available for DistinctNumeric types with 'Arith'.");
|
static_assert(Arith, "'a*=b' is only available for DistinctNumeric types with 'Arith'.");
|
||||||
this->m_value *= other.m_value;
|
this->m_value *= other.m_value;
|
||||||
return *this;
|
return *this;
|
||||||
}
|
}
|
||||||
constexpr Self& operator/=(const Self& other)
|
constexpr Self& operator/=(Self const& other)
|
||||||
{
|
{
|
||||||
static_assert(Arith, "'a/=b' is only available for DistinctNumeric types with 'Arith'.");
|
static_assert(Arith, "'a/=b' is only available for DistinctNumeric types with 'Arith'.");
|
||||||
this->m_value /= other.m_value;
|
this->m_value /= other.m_value;
|
||||||
return *this;
|
return *this;
|
||||||
}
|
}
|
||||||
constexpr Self& operator%=(const Self& other)
|
constexpr Self& operator%=(Self const& other)
|
||||||
{
|
{
|
||||||
static_assert(Arith, "'a%=b' is only available for DistinctNumeric types with 'Arith'.");
|
static_assert(Arith, "'a%=b' is only available for DistinctNumeric types with 'Arith'.");
|
||||||
this->m_value %= other.m_value;
|
this->m_value %= other.m_value;
|
||||||
|
@ -292,7 +292,7 @@ struct Formatter<DistinctNumeric<T, X, Incr, Cmp, Bool, Flags, Shift, Arith>> :
|
||||||
template<typename T, typename X, auto... Args>
|
template<typename T, typename X, auto... Args>
|
||||||
struct Traits<AK::DistinctNumeric<T, X, Args...>> : public GenericTraits<AK::DistinctNumeric<T, X, Args...>> {
|
struct Traits<AK::DistinctNumeric<T, X, Args...>> : public GenericTraits<AK::DistinctNumeric<T, X, Args...>> {
|
||||||
static constexpr bool is_trivial() { return true; }
|
static constexpr bool is_trivial() { return true; }
|
||||||
static constexpr auto hash(const DistinctNumeric<T, X, Args...>& d) { return Traits<T>::hash(d.value()); }
|
static constexpr auto hash(DistinctNumeric<T, X, Args...> const& d) { return Traits<T>::hash(d.value()); }
|
||||||
};
|
};
|
||||||
|
|
||||||
using AK::DistinctNumeric;
|
using AK::DistinctNumeric;
|
||||||
|
|
|
@ -15,8 +15,8 @@ namespace AK {
|
||||||
template<typename ListType, typename ElementType>
|
template<typename ListType, typename ElementType>
|
||||||
class DoublyLinkedListIterator {
|
class DoublyLinkedListIterator {
|
||||||
public:
|
public:
|
||||||
bool operator!=(const DoublyLinkedListIterator& other) const { return m_node != other.m_node; }
|
bool operator!=(DoublyLinkedListIterator const& other) const { return m_node != other.m_node; }
|
||||||
bool operator==(const DoublyLinkedListIterator& other) const { return m_node == other.m_node; }
|
bool operator==(DoublyLinkedListIterator const& other) const { return m_node == other.m_node; }
|
||||||
DoublyLinkedListIterator& operator++()
|
DoublyLinkedListIterator& operator++()
|
||||||
{
|
{
|
||||||
m_node = m_node->next;
|
m_node = m_node->next;
|
||||||
|
|
|
@ -89,7 +89,7 @@ template<typename T>
|
||||||
class [[gnu::packed]] LittleEndian {
|
class [[gnu::packed]] LittleEndian {
|
||||||
public:
|
public:
|
||||||
friend InputStream& operator>><T>(InputStream&, LittleEndian<T>&);
|
friend InputStream& operator>><T>(InputStream&, LittleEndian<T>&);
|
||||||
friend OutputStream& operator<<<T>(OutputStream&, LittleEndian<T>);
|
friend OutputStream& operator<< <T>(OutputStream&, LittleEndian<T>);
|
||||||
|
|
||||||
constexpr LittleEndian() = default;
|
constexpr LittleEndian() = default;
|
||||||
|
|
||||||
|
@ -117,7 +117,7 @@ template<typename T>
|
||||||
class [[gnu::packed]] BigEndian {
|
class [[gnu::packed]] BigEndian {
|
||||||
public:
|
public:
|
||||||
friend InputStream& operator>><T>(InputStream&, BigEndian<T>&);
|
friend InputStream& operator>><T>(InputStream&, BigEndian<T>&);
|
||||||
friend OutputStream& operator<<<T>(OutputStream&, BigEndian<T>);
|
friend OutputStream& operator<< <T>(OutputStream&, BigEndian<T>);
|
||||||
|
|
||||||
constexpr BigEndian() = default;
|
constexpr BigEndian() = default;
|
||||||
|
|
||||||
|
|
|
@ -55,7 +55,7 @@ public:
|
||||||
// the compiler will inline this anyway and therefore not generate any duplicate code.
|
// the compiler will inline this anyway and therefore not generate any duplicate code.
|
||||||
|
|
||||||
template<size_t N>
|
template<size_t N>
|
||||||
static ErrorOr<FixedArray<T>> try_create(T(&&array)[N])
|
static ErrorOr<FixedArray<T>> try_create(T (&&array)[N])
|
||||||
{
|
{
|
||||||
if (N == 0)
|
if (N == 0)
|
||||||
return FixedArray<T>();
|
return FixedArray<T>();
|
||||||
|
|
|
@ -15,8 +15,8 @@
|
||||||
namespace AK {
|
namespace AK {
|
||||||
|
|
||||||
struct FlyStringImplTraits : public Traits<StringImpl*> {
|
struct FlyStringImplTraits : public Traits<StringImpl*> {
|
||||||
static unsigned hash(const StringImpl* s) { return s ? s->hash() : 0; }
|
static unsigned hash(StringImpl const* s) { return s ? s->hash() : 0; }
|
||||||
static bool equals(const StringImpl* a, const StringImpl* b)
|
static bool equals(StringImpl const* a, StringImpl const* b)
|
||||||
{
|
{
|
||||||
VERIFY(a);
|
VERIFY(a);
|
||||||
VERIFY(b);
|
VERIFY(b);
|
||||||
|
@ -36,7 +36,7 @@ void FlyString::did_destroy_impl(Badge<StringImpl>, StringImpl& impl)
|
||||||
fly_impls().remove(&impl);
|
fly_impls().remove(&impl);
|
||||||
}
|
}
|
||||||
|
|
||||||
FlyString::FlyString(const String& string)
|
FlyString::FlyString(String const& string)
|
||||||
{
|
{
|
||||||
if (string.is_null())
|
if (string.is_null())
|
||||||
return;
|
return;
|
||||||
|
@ -115,7 +115,7 @@ FlyString FlyString::to_lowercase() const
|
||||||
return String(*m_impl).to_lowercase();
|
return String(*m_impl).to_lowercase();
|
||||||
}
|
}
|
||||||
|
|
||||||
bool FlyString::operator==(const String& other) const
|
bool FlyString::operator==(String const& other) const
|
||||||
{
|
{
|
||||||
return m_impl == other.impl() || view() == other.view();
|
return m_impl == other.impl() || view() == other.view();
|
||||||
}
|
}
|
||||||
|
@ -125,7 +125,7 @@ bool FlyString::operator==(StringView string) const
|
||||||
return view() == string;
|
return view() == string;
|
||||||
}
|
}
|
||||||
|
|
||||||
bool FlyString::operator==(const char* string) const
|
bool FlyString::operator==(char const* string) const
|
||||||
{
|
{
|
||||||
return view() == string;
|
return view() == string;
|
||||||
}
|
}
|
||||||
|
|
|
@ -14,7 +14,7 @@ namespace AK {
|
||||||
class FlyString {
|
class FlyString {
|
||||||
public:
|
public:
|
||||||
FlyString() = default;
|
FlyString() = default;
|
||||||
FlyString(const FlyString& other)
|
FlyString(FlyString const& other)
|
||||||
: m_impl(other.impl())
|
: m_impl(other.impl())
|
||||||
{
|
{
|
||||||
}
|
}
|
||||||
|
@ -22,9 +22,9 @@ public:
|
||||||
: m_impl(move(other.m_impl))
|
: m_impl(move(other.m_impl))
|
||||||
{
|
{
|
||||||
}
|
}
|
||||||
FlyString(const String&);
|
FlyString(String const&);
|
||||||
FlyString(StringView);
|
FlyString(StringView);
|
||||||
FlyString(const char* string)
|
FlyString(char const* string)
|
||||||
: FlyString(static_cast<String>(string))
|
: FlyString(static_cast<String>(string))
|
||||||
{
|
{
|
||||||
}
|
}
|
||||||
|
@ -37,7 +37,7 @@ public:
|
||||||
return string;
|
return string;
|
||||||
}
|
}
|
||||||
|
|
||||||
FlyString& operator=(const FlyString& other)
|
FlyString& operator=(FlyString const& other)
|
||||||
{
|
{
|
||||||
m_impl = other.m_impl;
|
m_impl = other.m_impl;
|
||||||
return *this;
|
return *this;
|
||||||
|
@ -52,20 +52,20 @@ public:
|
||||||
bool is_empty() const { return !m_impl || !m_impl->length(); }
|
bool is_empty() const { return !m_impl || !m_impl->length(); }
|
||||||
bool is_null() const { return !m_impl; }
|
bool is_null() const { return !m_impl; }
|
||||||
|
|
||||||
bool operator==(const FlyString& other) const { return m_impl == other.m_impl; }
|
bool operator==(FlyString const& other) const { return m_impl == other.m_impl; }
|
||||||
bool operator!=(const FlyString& other) const { return m_impl != other.m_impl; }
|
bool operator!=(FlyString const& other) const { return m_impl != other.m_impl; }
|
||||||
|
|
||||||
bool operator==(const String&) const;
|
bool operator==(String const&) const;
|
||||||
bool operator!=(const String& string) const { return !(*this == string); }
|
bool operator!=(String const& string) const { return !(*this == string); }
|
||||||
|
|
||||||
bool operator==(StringView) const;
|
bool operator==(StringView) const;
|
||||||
bool operator!=(StringView string) const { return !(*this == string); }
|
bool operator!=(StringView string) const { return !(*this == string); }
|
||||||
|
|
||||||
bool operator==(const char*) const;
|
bool operator==(char const*) const;
|
||||||
bool operator!=(const char* string) const { return !(*this == string); }
|
bool operator!=(char const* string) const { return !(*this == string); }
|
||||||
|
|
||||||
const StringImpl* impl() const { return m_impl; }
|
StringImpl const* impl() const { return m_impl; }
|
||||||
const char* characters() const { return m_impl ? m_impl->characters() : nullptr; }
|
char const* characters() const { return m_impl ? m_impl->characters() : nullptr; }
|
||||||
size_t length() const { return m_impl ? m_impl->length() : 0; }
|
size_t length() const { return m_impl ? m_impl->length() : 0; }
|
||||||
|
|
||||||
ALWAYS_INLINE u32 hash() const { return m_impl ? m_impl->existing_hash() : 0; }
|
ALWAYS_INLINE u32 hash() const { return m_impl ? m_impl->existing_hash() : 0; }
|
||||||
|
@ -96,7 +96,7 @@ private:
|
||||||
|
|
||||||
template<>
|
template<>
|
||||||
struct Traits<FlyString> : public GenericTraits<FlyString> {
|
struct Traits<FlyString> : public GenericTraits<FlyString> {
|
||||||
static unsigned hash(const FlyString& s) { return s.hash(); }
|
static unsigned hash(FlyString const& s) { return s.hash(); }
|
||||||
};
|
};
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -51,8 +51,8 @@ static constexpr size_t convert_unsigned_to_string(u64 value, Array<u8, 128>& bu
|
||||||
{
|
{
|
||||||
VERIFY(base >= 2 && base <= 16);
|
VERIFY(base >= 2 && base <= 16);
|
||||||
|
|
||||||
constexpr const char* lowercase_lookup = "0123456789abcdef";
|
constexpr char const* lowercase_lookup = "0123456789abcdef";
|
||||||
constexpr const char* uppercase_lookup = "0123456789ABCDEF";
|
constexpr char const* uppercase_lookup = "0123456789ABCDEF";
|
||||||
|
|
||||||
if (value == 0) {
|
if (value == 0) {
|
||||||
buffer[0] = '0';
|
buffer[0] = '0';
|
||||||
|
@ -77,7 +77,7 @@ static constexpr size_t convert_unsigned_to_string(u64 value, Array<u8, 128>& bu
|
||||||
|
|
||||||
ErrorOr<void> vformat_impl(TypeErasedFormatParams& params, FormatBuilder& builder, FormatParser& parser)
|
ErrorOr<void> vformat_impl(TypeErasedFormatParams& params, FormatBuilder& builder, FormatParser& parser)
|
||||||
{
|
{
|
||||||
const auto literal = parser.consume_literal();
|
auto const literal = parser.consume_literal();
|
||||||
TRY(builder.put_literal(literal));
|
TRY(builder.put_literal(literal));
|
||||||
|
|
||||||
FormatParser::FormatSpecifier specifier;
|
FormatParser::FormatSpecifier specifier;
|
||||||
|
@ -105,7 +105,7 @@ FormatParser::FormatParser(StringView input)
|
||||||
}
|
}
|
||||||
StringView FormatParser::consume_literal()
|
StringView FormatParser::consume_literal()
|
||||||
{
|
{
|
||||||
const auto begin = tell();
|
auto const begin = tell();
|
||||||
|
|
||||||
while (!is_eof()) {
|
while (!is_eof()) {
|
||||||
if (consume_specific("{{"))
|
if (consume_specific("{{"))
|
||||||
|
@ -146,7 +146,7 @@ bool FormatParser::consume_specifier(FormatSpecifier& specifier)
|
||||||
specifier.index = use_next_index;
|
specifier.index = use_next_index;
|
||||||
|
|
||||||
if (consume_specific(':')) {
|
if (consume_specific(':')) {
|
||||||
const auto begin = tell();
|
auto const begin = tell();
|
||||||
|
|
||||||
size_t level = 1;
|
size_t level = 1;
|
||||||
while (level > 0) {
|
while (level > 0) {
|
||||||
|
@ -212,8 +212,8 @@ ErrorOr<void> FormatBuilder::put_string(
|
||||||
size_t max_width,
|
size_t max_width,
|
||||||
char fill)
|
char fill)
|
||||||
{
|
{
|
||||||
const auto used_by_string = min(max_width, value.length());
|
auto const used_by_string = min(max_width, value.length());
|
||||||
const auto used_by_padding = max(min_width, used_by_string) - used_by_string;
|
auto const used_by_padding = max(min_width, used_by_string) - used_by_string;
|
||||||
|
|
||||||
if (used_by_string < value.length())
|
if (used_by_string < value.length())
|
||||||
value = value.substring_view(0, used_by_string);
|
value = value.substring_view(0, used_by_string);
|
||||||
|
@ -222,8 +222,8 @@ ErrorOr<void> FormatBuilder::put_string(
|
||||||
TRY(m_builder.try_append(value));
|
TRY(m_builder.try_append(value));
|
||||||
TRY(put_padding(fill, used_by_padding));
|
TRY(put_padding(fill, used_by_padding));
|
||||||
} else if (align == Align::Center) {
|
} else if (align == Align::Center) {
|
||||||
const auto used_by_left_padding = used_by_padding / 2;
|
auto const used_by_left_padding = used_by_padding / 2;
|
||||||
const auto used_by_right_padding = ceil_div<size_t, size_t>(used_by_padding, 2);
|
auto const used_by_right_padding = ceil_div<size_t, size_t>(used_by_padding, 2);
|
||||||
|
|
||||||
TRY(put_padding(fill, used_by_left_padding));
|
TRY(put_padding(fill, used_by_left_padding));
|
||||||
TRY(m_builder.try_append(value));
|
TRY(m_builder.try_append(value));
|
||||||
|
@ -252,7 +252,7 @@ ErrorOr<void> FormatBuilder::put_u64(
|
||||||
|
|
||||||
Array<u8, 128> buffer;
|
Array<u8, 128> buffer;
|
||||||
|
|
||||||
const auto used_by_digits = convert_unsigned_to_string(value, buffer, base, upper_case);
|
auto const used_by_digits = convert_unsigned_to_string(value, buffer, base, upper_case);
|
||||||
|
|
||||||
size_t used_by_prefix = 0;
|
size_t used_by_prefix = 0;
|
||||||
if (align == Align::Right && zero_pad) {
|
if (align == Align::Right && zero_pad) {
|
||||||
|
@ -273,10 +273,10 @@ ErrorOr<void> FormatBuilder::put_u64(
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
const auto used_by_field = used_by_prefix + used_by_digits;
|
auto const used_by_field = used_by_prefix + used_by_digits;
|
||||||
const auto used_by_padding = max(used_by_field, min_width) - used_by_field;
|
auto const used_by_padding = max(used_by_field, min_width) - used_by_field;
|
||||||
|
|
||||||
const auto put_prefix = [&]() -> ErrorOr<void> {
|
auto const put_prefix = [&]() -> ErrorOr<void> {
|
||||||
if (is_negative)
|
if (is_negative)
|
||||||
TRY(m_builder.try_append('-'));
|
TRY(m_builder.try_append('-'));
|
||||||
else if (sign_mode == SignMode::Always)
|
else if (sign_mode == SignMode::Always)
|
||||||
|
@ -302,28 +302,28 @@ ErrorOr<void> FormatBuilder::put_u64(
|
||||||
return {};
|
return {};
|
||||||
};
|
};
|
||||||
|
|
||||||
const auto put_digits = [&]() -> ErrorOr<void> {
|
auto const put_digits = [&]() -> ErrorOr<void> {
|
||||||
for (size_t i = 0; i < used_by_digits; ++i)
|
for (size_t i = 0; i < used_by_digits; ++i)
|
||||||
TRY(m_builder.try_append(buffer[i]));
|
TRY(m_builder.try_append(buffer[i]));
|
||||||
return {};
|
return {};
|
||||||
};
|
};
|
||||||
|
|
||||||
if (align == Align::Left) {
|
if (align == Align::Left) {
|
||||||
const auto used_by_right_padding = used_by_padding;
|
auto const used_by_right_padding = used_by_padding;
|
||||||
|
|
||||||
TRY(put_prefix());
|
TRY(put_prefix());
|
||||||
TRY(put_digits());
|
TRY(put_digits());
|
||||||
TRY(put_padding(fill, used_by_right_padding));
|
TRY(put_padding(fill, used_by_right_padding));
|
||||||
} else if (align == Align::Center) {
|
} else if (align == Align::Center) {
|
||||||
const auto used_by_left_padding = used_by_padding / 2;
|
auto const used_by_left_padding = used_by_padding / 2;
|
||||||
const auto used_by_right_padding = ceil_div<size_t, size_t>(used_by_padding, 2);
|
auto const used_by_right_padding = ceil_div<size_t, size_t>(used_by_padding, 2);
|
||||||
|
|
||||||
TRY(put_padding(fill, used_by_left_padding));
|
TRY(put_padding(fill, used_by_left_padding));
|
||||||
TRY(put_prefix());
|
TRY(put_prefix());
|
||||||
TRY(put_digits());
|
TRY(put_digits());
|
||||||
TRY(put_padding(fill, used_by_right_padding));
|
TRY(put_padding(fill, used_by_right_padding));
|
||||||
} else if (align == Align::Right) {
|
} else if (align == Align::Right) {
|
||||||
const auto used_by_left_padding = used_by_padding;
|
auto const used_by_left_padding = used_by_padding;
|
||||||
|
|
||||||
if (zero_pad) {
|
if (zero_pad) {
|
||||||
TRY(put_prefix());
|
TRY(put_prefix());
|
||||||
|
@ -349,7 +349,7 @@ ErrorOr<void> FormatBuilder::put_i64(
|
||||||
char fill,
|
char fill,
|
||||||
SignMode sign_mode)
|
SignMode sign_mode)
|
||||||
{
|
{
|
||||||
const auto is_negative = value < 0;
|
auto const is_negative = value < 0;
|
||||||
value = is_negative ? -value : value;
|
value = is_negative ? -value : value;
|
||||||
|
|
||||||
TRY(put_u64(static_cast<u64>(value), base, prefix, upper_case, zero_pad, align, min_width, fill, sign_mode, is_negative));
|
TRY(put_u64(static_cast<u64>(value), base, prefix, upper_case, zero_pad, align, min_width, fill, sign_mode, is_negative));
|
||||||
|
@ -702,7 +702,7 @@ ErrorOr<void> Formatter<T>::format(FormatBuilder& builder, T value)
|
||||||
m_mode = Mode::String;
|
m_mode = Mode::String;
|
||||||
|
|
||||||
Formatter<StringView> formatter { *this };
|
Formatter<StringView> formatter { *this };
|
||||||
return formatter.format(builder, StringView { reinterpret_cast<const char*>(&value), 1 });
|
return formatter.format(builder, StringView { reinterpret_cast<char const*>(&value), 1 });
|
||||||
}
|
}
|
||||||
|
|
||||||
if (m_precision.has_value())
|
if (m_precision.has_value())
|
||||||
|
@ -854,8 +854,8 @@ void vout(FILE* file, StringView fmtstr, TypeErasedFormatParams& params, bool ne
|
||||||
if (newline)
|
if (newline)
|
||||||
builder.append('\n');
|
builder.append('\n');
|
||||||
|
|
||||||
const auto string = builder.string_view();
|
auto const string = builder.string_view();
|
||||||
const auto retval = ::fwrite(string.characters_without_null_termination(), 1, string.length(), file);
|
auto const retval = ::fwrite(string.characters_without_null_termination(), 1, string.length(), file);
|
||||||
if (static_cast<size_t>(retval) != string.length()) {
|
if (static_cast<size_t>(retval) != string.length()) {
|
||||||
auto error = ferror(file);
|
auto error = ferror(file);
|
||||||
dbgln("vout() failed ({} written out of {}), error was {} ({})", retval, string.length(), error, strerror(error));
|
dbgln("vout() failed ({} written out of {}), error was {} ({})", retval, string.length(), error, strerror(error));
|
||||||
|
@ -912,7 +912,7 @@ void vdbgln(StringView fmtstr, TypeErasedFormatParams& params)
|
||||||
MUST(vformat(builder, fmtstr, params));
|
MUST(vformat(builder, fmtstr, params));
|
||||||
builder.append('\n');
|
builder.append('\n');
|
||||||
|
|
||||||
const auto string = builder.string_view();
|
auto const string = builder.string_view();
|
||||||
|
|
||||||
#ifdef __serenity__
|
#ifdef __serenity__
|
||||||
# ifdef KERNEL
|
# ifdef KERNEL
|
||||||
|
@ -949,7 +949,7 @@ void vdmesgln(StringView fmtstr, TypeErasedFormatParams& params)
|
||||||
MUST(vformat(builder, fmtstr, params));
|
MUST(vformat(builder, fmtstr, params));
|
||||||
builder.append('\n');
|
builder.append('\n');
|
||||||
|
|
||||||
const auto string = builder.string_view();
|
auto const string = builder.string_view();
|
||||||
kernelputstr(string.characters_without_null_termination(), string.length());
|
kernelputstr(string.characters_without_null_termination(), string.length());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -971,7 +971,7 @@ void v_critical_dmesgln(StringView fmtstr, TypeErasedFormatParams& params)
|
||||||
MUST(vformat(builder, fmtstr, params));
|
MUST(vformat(builder, fmtstr, params));
|
||||||
builder.append('\n');
|
builder.append('\n');
|
||||||
|
|
||||||
const auto string = builder.string_view();
|
auto const string = builder.string_view();
|
||||||
kernelcriticalputstr(string.characters_without_null_termination(), string.length());
|
kernelcriticalputstr(string.characters_without_null_termination(), string.length());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
54
AK/Format.h
54
AK/Format.h
|
@ -94,21 +94,21 @@ struct TypeErasedParameter {
|
||||||
{
|
{
|
||||||
switch (type) {
|
switch (type) {
|
||||||
case TypeErasedParameter::Type::UInt8:
|
case TypeErasedParameter::Type::UInt8:
|
||||||
return visitor(*static_cast<const u8*>(value));
|
return visitor(*static_cast<u8 const*>(value));
|
||||||
case TypeErasedParameter::Type::UInt16:
|
case TypeErasedParameter::Type::UInt16:
|
||||||
return visitor(*static_cast<const u16*>(value));
|
return visitor(*static_cast<u16 const*>(value));
|
||||||
case TypeErasedParameter::Type::UInt32:
|
case TypeErasedParameter::Type::UInt32:
|
||||||
return visitor(*static_cast<const u32*>(value));
|
return visitor(*static_cast<u32 const*>(value));
|
||||||
case TypeErasedParameter::Type::UInt64:
|
case TypeErasedParameter::Type::UInt64:
|
||||||
return visitor(*static_cast<const u64*>(value));
|
return visitor(*static_cast<u64 const*>(value));
|
||||||
case TypeErasedParameter::Type::Int8:
|
case TypeErasedParameter::Type::Int8:
|
||||||
return visitor(*static_cast<const i8*>(value));
|
return visitor(*static_cast<i8 const*>(value));
|
||||||
case TypeErasedParameter::Type::Int16:
|
case TypeErasedParameter::Type::Int16:
|
||||||
return visitor(*static_cast<const i16*>(value));
|
return visitor(*static_cast<i16 const*>(value));
|
||||||
case TypeErasedParameter::Type::Int32:
|
case TypeErasedParameter::Type::Int32:
|
||||||
return visitor(*static_cast<const i32*>(value));
|
return visitor(*static_cast<i32 const*>(value));
|
||||||
case TypeErasedParameter::Type::Int64:
|
case TypeErasedParameter::Type::Int64:
|
||||||
return visitor(*static_cast<const i64*>(value));
|
return visitor(*static_cast<i64 const*>(value));
|
||||||
default:
|
default:
|
||||||
TODO();
|
TODO();
|
||||||
}
|
}
|
||||||
|
@ -127,7 +127,7 @@ struct TypeErasedParameter {
|
||||||
|
|
||||||
// FIXME: Getters and setters.
|
// FIXME: Getters and setters.
|
||||||
|
|
||||||
const void* value;
|
void const* value;
|
||||||
Type type;
|
Type type;
|
||||||
ErrorOr<void> (*formatter)(TypeErasedFormatParams&, FormatBuilder&, FormatParser&, void const* value);
|
ErrorOr<void> (*formatter)(TypeErasedFormatParams&, FormatBuilder&, FormatParser&, void const* value);
|
||||||
};
|
};
|
||||||
|
@ -227,7 +227,7 @@ public:
|
||||||
size_t width,
|
size_t width,
|
||||||
char fill = ' ');
|
char fill = ' ');
|
||||||
|
|
||||||
const StringBuilder& builder() const
|
StringBuilder const& builder() const
|
||||||
{
|
{
|
||||||
return m_builder;
|
return m_builder;
|
||||||
}
|
}
|
||||||
|
@ -250,7 +250,7 @@ private:
|
||||||
};
|
};
|
||||||
|
|
||||||
template<typename T>
|
template<typename T>
|
||||||
ErrorOr<void> __format_value(TypeErasedFormatParams& params, FormatBuilder& builder, FormatParser& parser, const void* value)
|
ErrorOr<void> __format_value(TypeErasedFormatParams& params, FormatBuilder& builder, FormatParser& parser, void const* value)
|
||||||
{
|
{
|
||||||
Formatter<T> formatter;
|
Formatter<T> formatter;
|
||||||
|
|
||||||
|
@ -263,7 +263,7 @@ class VariadicFormatParams : public TypeErasedFormatParams {
|
||||||
public:
|
public:
|
||||||
static_assert(sizeof...(Parameters) <= max_format_arguments);
|
static_assert(sizeof...(Parameters) <= max_format_arguments);
|
||||||
|
|
||||||
explicit VariadicFormatParams(const Parameters&... parameters)
|
explicit VariadicFormatParams(Parameters const&... parameters)
|
||||||
: m_data({ TypeErasedParameter { ¶meters, TypeErasedParameter::get_type<Parameters>(), __format_value<Parameters> }... })
|
: m_data({ TypeErasedParameter { ¶meters, TypeErasedParameter::get_type<Parameters>(), __format_value<Parameters> }... })
|
||||||
{
|
{
|
||||||
this->set_parameters(m_data);
|
this->set_parameters(m_data);
|
||||||
|
@ -396,8 +396,8 @@ struct Formatter<Bytes> : Formatter<ReadonlyBytes> {
|
||||||
};
|
};
|
||||||
|
|
||||||
template<>
|
template<>
|
||||||
struct Formatter<const char*> : Formatter<StringView> {
|
struct Formatter<char const*> : Formatter<StringView> {
|
||||||
ErrorOr<void> format(FormatBuilder& builder, const char* value)
|
ErrorOr<void> format(FormatBuilder& builder, char const* value)
|
||||||
{
|
{
|
||||||
if (m_mode == Mode::Pointer) {
|
if (m_mode == Mode::Pointer) {
|
||||||
Formatter<FlatPtr> formatter { *this };
|
Formatter<FlatPtr> formatter { *this };
|
||||||
|
@ -407,14 +407,14 @@ struct Formatter<const char*> : Formatter<StringView> {
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
template<>
|
template<>
|
||||||
struct Formatter<char*> : Formatter<const char*> {
|
struct Formatter<char*> : Formatter<char const*> {
|
||||||
};
|
};
|
||||||
template<size_t Size>
|
template<size_t Size>
|
||||||
struct Formatter<char[Size]> : Formatter<const char*> {
|
struct Formatter<char[Size]> : Formatter<char const*> {
|
||||||
};
|
};
|
||||||
template<size_t Size>
|
template<size_t Size>
|
||||||
struct Formatter<unsigned char[Size]> : Formatter<StringView> {
|
struct Formatter<unsigned char[Size]> : Formatter<StringView> {
|
||||||
ErrorOr<void> format(FormatBuilder& builder, const unsigned char* value)
|
ErrorOr<void> format(FormatBuilder& builder, unsigned char const* value)
|
||||||
{
|
{
|
||||||
if (m_mode == Mode::Pointer) {
|
if (m_mode == Mode::Pointer) {
|
||||||
Formatter<FlatPtr> formatter { *this };
|
Formatter<FlatPtr> formatter { *this };
|
||||||
|
@ -535,14 +535,14 @@ ErrorOr<void> vformat(StringBuilder&, StringView fmtstr, TypeErasedFormatParams&
|
||||||
void vout(FILE*, StringView fmtstr, TypeErasedFormatParams&, bool newline = false);
|
void vout(FILE*, StringView fmtstr, TypeErasedFormatParams&, bool newline = false);
|
||||||
|
|
||||||
template<typename... Parameters>
|
template<typename... Parameters>
|
||||||
void out(FILE* file, CheckedFormatString<Parameters...>&& fmtstr, const Parameters&... parameters)
|
void out(FILE* file, CheckedFormatString<Parameters...>&& fmtstr, Parameters const&... parameters)
|
||||||
{
|
{
|
||||||
VariadicFormatParams variadic_format_params { parameters... };
|
VariadicFormatParams variadic_format_params { parameters... };
|
||||||
vout(file, fmtstr.view(), variadic_format_params);
|
vout(file, fmtstr.view(), variadic_format_params);
|
||||||
}
|
}
|
||||||
|
|
||||||
template<typename... Parameters>
|
template<typename... Parameters>
|
||||||
void outln(FILE* file, CheckedFormatString<Parameters...>&& fmtstr, const Parameters&... parameters)
|
void outln(FILE* file, CheckedFormatString<Parameters...>&& fmtstr, Parameters const&... parameters)
|
||||||
{
|
{
|
||||||
VariadicFormatParams variadic_format_params { parameters... };
|
VariadicFormatParams variadic_format_params { parameters... };
|
||||||
vout(file, fmtstr.view(), variadic_format_params, true);
|
vout(file, fmtstr.view(), variadic_format_params, true);
|
||||||
|
@ -551,10 +551,10 @@ void outln(FILE* file, CheckedFormatString<Parameters...>&& fmtstr, const Parame
|
||||||
inline void outln(FILE* file) { fputc('\n', file); }
|
inline void outln(FILE* file) { fputc('\n', file); }
|
||||||
|
|
||||||
template<typename... Parameters>
|
template<typename... Parameters>
|
||||||
void out(CheckedFormatString<Parameters...>&& fmtstr, const Parameters&... parameters) { out(stdout, move(fmtstr), parameters...); }
|
void out(CheckedFormatString<Parameters...>&& fmtstr, Parameters const&... parameters) { out(stdout, move(fmtstr), parameters...); }
|
||||||
|
|
||||||
template<typename... Parameters>
|
template<typename... Parameters>
|
||||||
void outln(CheckedFormatString<Parameters...>&& fmtstr, const Parameters&... parameters) { outln(stdout, move(fmtstr), parameters...); }
|
void outln(CheckedFormatString<Parameters...>&& fmtstr, Parameters const&... parameters) { outln(stdout, move(fmtstr), parameters...); }
|
||||||
|
|
||||||
inline void outln() { outln(stdout); }
|
inline void outln() { outln(stdout); }
|
||||||
|
|
||||||
|
@ -565,13 +565,13 @@ inline void outln() { outln(stdout); }
|
||||||
} while (0)
|
} while (0)
|
||||||
|
|
||||||
template<typename... Parameters>
|
template<typename... Parameters>
|
||||||
void warn(CheckedFormatString<Parameters...>&& fmtstr, const Parameters&... parameters)
|
void warn(CheckedFormatString<Parameters...>&& fmtstr, Parameters const&... parameters)
|
||||||
{
|
{
|
||||||
out(stderr, move(fmtstr), parameters...);
|
out(stderr, move(fmtstr), parameters...);
|
||||||
}
|
}
|
||||||
|
|
||||||
template<typename... Parameters>
|
template<typename... Parameters>
|
||||||
void warnln(CheckedFormatString<Parameters...>&& fmtstr, const Parameters&... parameters) { outln(stderr, move(fmtstr), parameters...); }
|
void warnln(CheckedFormatString<Parameters...>&& fmtstr, Parameters const&... parameters) { outln(stderr, move(fmtstr), parameters...); }
|
||||||
|
|
||||||
inline void warnln() { outln(stderr); }
|
inline void warnln() { outln(stderr); }
|
||||||
|
|
||||||
|
@ -586,7 +586,7 @@ inline void warnln() { outln(stderr); }
|
||||||
void vdbgln(StringView fmtstr, TypeErasedFormatParams&);
|
void vdbgln(StringView fmtstr, TypeErasedFormatParams&);
|
||||||
|
|
||||||
template<typename... Parameters>
|
template<typename... Parameters>
|
||||||
void dbgln(CheckedFormatString<Parameters...>&& fmtstr, const Parameters&... parameters)
|
void dbgln(CheckedFormatString<Parameters...>&& fmtstr, Parameters const&... parameters)
|
||||||
{
|
{
|
||||||
VariadicFormatParams variadic_format_params { parameters... };
|
VariadicFormatParams variadic_format_params { parameters... };
|
||||||
vdbgln(fmtstr.view(), variadic_format_params);
|
vdbgln(fmtstr.view(), variadic_format_params);
|
||||||
|
@ -600,7 +600,7 @@ void set_debug_enabled(bool);
|
||||||
void vdmesgln(StringView fmtstr, TypeErasedFormatParams&);
|
void vdmesgln(StringView fmtstr, TypeErasedFormatParams&);
|
||||||
|
|
||||||
template<typename... Parameters>
|
template<typename... Parameters>
|
||||||
void dmesgln(CheckedFormatString<Parameters...>&& fmt, const Parameters&... parameters)
|
void dmesgln(CheckedFormatString<Parameters...>&& fmt, Parameters const&... parameters)
|
||||||
{
|
{
|
||||||
VariadicFormatParams variadic_format_params { parameters... };
|
VariadicFormatParams variadic_format_params { parameters... };
|
||||||
vdmesgln(fmt.view(), variadic_format_params);
|
vdmesgln(fmt.view(), variadic_format_params);
|
||||||
|
@ -611,7 +611,7 @@ void v_critical_dmesgln(StringView fmtstr, TypeErasedFormatParams&);
|
||||||
// be very careful to not cause any allocations here, since we could be in
|
// be very careful to not cause any allocations here, since we could be in
|
||||||
// a very unstable situation
|
// a very unstable situation
|
||||||
template<typename... Parameters>
|
template<typename... Parameters>
|
||||||
void critical_dmesgln(CheckedFormatString<Parameters...>&& fmt, const Parameters&... parameters)
|
void critical_dmesgln(CheckedFormatString<Parameters...>&& fmt, Parameters const&... parameters)
|
||||||
{
|
{
|
||||||
VariadicFormatParams variadic_format_params { parameters... };
|
VariadicFormatParams variadic_format_params { parameters... };
|
||||||
v_critical_dmesgln(fmt.view(), variadic_format_params);
|
v_critical_dmesgln(fmt.view(), variadic_format_params);
|
||||||
|
@ -656,7 +656,7 @@ struct FormatString {
|
||||||
template<>
|
template<>
|
||||||
struct Formatter<FormatString> : Formatter<StringView> {
|
struct Formatter<FormatString> : Formatter<StringView> {
|
||||||
template<typename... Parameters>
|
template<typename... Parameters>
|
||||||
ErrorOr<void> format(FormatBuilder& builder, StringView fmtstr, const Parameters&... parameters)
|
ErrorOr<void> format(FormatBuilder& builder, StringView fmtstr, Parameters const&... parameters)
|
||||||
{
|
{
|
||||||
VariadicFormatParams variadic_format_params { parameters... };
|
VariadicFormatParams variadic_format_params { parameters... };
|
||||||
return vformat(builder, fmtstr, variadic_format_params);
|
return vformat(builder, fmtstr, variadic_format_params);
|
||||||
|
|
|
@ -69,7 +69,7 @@ StringView GenericLexer::consume_until(char stop)
|
||||||
}
|
}
|
||||||
|
|
||||||
// Consume and return characters until the string `stop` is found
|
// Consume and return characters until the string `stop` is found
|
||||||
StringView GenericLexer::consume_until(const char* stop)
|
StringView GenericLexer::consume_until(char const* stop)
|
||||||
{
|
{
|
||||||
size_t start = m_index;
|
size_t start = m_index;
|
||||||
while (!is_eof() && !next_is(stop))
|
while (!is_eof() && !next_is(stop))
|
||||||
|
|
|
@ -43,7 +43,7 @@ public:
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
constexpr bool next_is(const char* expected) const
|
constexpr bool next_is(char const* expected) const
|
||||||
{
|
{
|
||||||
for (size_t i = 0; expected[i] != '\0'; ++i)
|
for (size_t i = 0; expected[i] != '\0'; ++i)
|
||||||
if (peek(i) != expected[i])
|
if (peek(i) != expected[i])
|
||||||
|
@ -84,13 +84,13 @@ public:
|
||||||
}
|
}
|
||||||
|
|
||||||
#ifndef KERNEL
|
#ifndef KERNEL
|
||||||
bool consume_specific(const String& next)
|
bool consume_specific(String const& next)
|
||||||
{
|
{
|
||||||
return consume_specific(StringView { next });
|
return consume_specific(StringView { next });
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
constexpr bool consume_specific(const char* next)
|
constexpr bool consume_specific(char const* next)
|
||||||
{
|
{
|
||||||
return consume_specific(StringView { next });
|
return consume_specific(StringView { next });
|
||||||
}
|
}
|
||||||
|
@ -114,7 +114,7 @@ public:
|
||||||
StringView consume_all();
|
StringView consume_all();
|
||||||
StringView consume_line();
|
StringView consume_line();
|
||||||
StringView consume_until(char);
|
StringView consume_until(char);
|
||||||
StringView consume_until(const char*);
|
StringView consume_until(char const*);
|
||||||
StringView consume_until(StringView);
|
StringView consume_until(StringView);
|
||||||
StringView consume_quoted_string(char escape_char = 0);
|
StringView consume_quoted_string(char escape_char = 0);
|
||||||
#ifndef KERNEL
|
#ifndef KERNEL
|
||||||
|
@ -144,7 +144,7 @@ public:
|
||||||
ignore();
|
ignore();
|
||||||
}
|
}
|
||||||
|
|
||||||
constexpr void ignore_until(const char* stop)
|
constexpr void ignore_until(char const* stop)
|
||||||
{
|
{
|
||||||
while (!is_eof() && !next_is(stop)) {
|
while (!is_eof() && !next_is(stop)) {
|
||||||
++m_index;
|
++m_index;
|
||||||
|
|
|
@ -21,7 +21,7 @@ constexpr unsigned int_hash(u32 key)
|
||||||
|
|
||||||
constexpr unsigned double_hash(u32 key)
|
constexpr unsigned double_hash(u32 key)
|
||||||
{
|
{
|
||||||
const unsigned magic = 0xBA5EDB01;
|
unsigned const magic = 0xBA5EDB01;
|
||||||
if (key == magic)
|
if (key == magic)
|
||||||
return 0u;
|
return 0u;
|
||||||
if (key == 0u)
|
if (key == 0u)
|
||||||
|
@ -53,7 +53,7 @@ constexpr unsigned ptr_hash(FlatPtr ptr)
|
||||||
return int_hash(ptr);
|
return int_hash(ptr);
|
||||||
}
|
}
|
||||||
|
|
||||||
inline unsigned ptr_hash(const void* ptr)
|
inline unsigned ptr_hash(void const* ptr)
|
||||||
{
|
{
|
||||||
return ptr_hash(FlatPtr(ptr));
|
return ptr_hash(FlatPtr(ptr));
|
||||||
}
|
}
|
||||||
|
|
13
AK/HashMap.h
13
AK/HashMap.h
|
@ -22,8 +22,8 @@ private:
|
||||||
};
|
};
|
||||||
|
|
||||||
struct EntryTraits {
|
struct EntryTraits {
|
||||||
static unsigned hash(const Entry& entry) { return KeyTraits::hash(entry.key); }
|
static unsigned hash(Entry const& entry) { return KeyTraits::hash(entry.key); }
|
||||||
static bool equals(const Entry& a, const Entry& b) { return KeyTraits::equals(a.key, b.key); }
|
static bool equals(Entry const& a, Entry const& b) { return KeyTraits::equals(a.key, b.key); }
|
||||||
};
|
};
|
||||||
|
|
||||||
public:
|
public:
|
||||||
|
@ -152,7 +152,8 @@ public:
|
||||||
}
|
}
|
||||||
|
|
||||||
template<Concepts::HashCompatible<K> Key>
|
template<Concepts::HashCompatible<K> Key>
|
||||||
requires(IsSame<KeyTraits, Traits<K>>) Optional<typename Traits<V>::PeekType> get(const Key& key) const requires(!IsPointer<typename Traits<V>::PeekType>)
|
requires(IsSame<KeyTraits, Traits<K>>) Optional<typename Traits<V>::PeekType> get(Key const& key)
|
||||||
|
const requires(!IsPointer<typename Traits<V>::PeekType>)
|
||||||
{
|
{
|
||||||
auto it = find(key);
|
auto it = find(key);
|
||||||
if (it == end())
|
if (it == end())
|
||||||
|
@ -161,7 +162,8 @@ public:
|
||||||
}
|
}
|
||||||
|
|
||||||
template<Concepts::HashCompatible<K> Key>
|
template<Concepts::HashCompatible<K> Key>
|
||||||
requires(IsSame<KeyTraits, Traits<K>>) Optional<typename Traits<V>::ConstPeekType> get(const Key& key) const requires(IsPointer<typename Traits<V>::PeekType>)
|
requires(IsSame<KeyTraits, Traits<K>>) Optional<typename Traits<V>::ConstPeekType> get(Key const& key)
|
||||||
|
const requires(IsPointer<typename Traits<V>::PeekType>)
|
||||||
{
|
{
|
||||||
auto it = find(key);
|
auto it = find(key);
|
||||||
if (it == end())
|
if (it == end())
|
||||||
|
@ -170,7 +172,8 @@ public:
|
||||||
}
|
}
|
||||||
|
|
||||||
template<Concepts::HashCompatible<K> Key>
|
template<Concepts::HashCompatible<K> Key>
|
||||||
requires(IsSame<KeyTraits, Traits<K>>) Optional<typename Traits<V>::PeekType> get(const Key& key) requires(!IsConst<typename Traits<V>::PeekType>)
|
requires(IsSame<KeyTraits, Traits<K>>) Optional<typename Traits<V>::PeekType> get(Key const& key)
|
||||||
|
requires(!IsConst<typename Traits<V>::PeekType>)
|
||||||
{
|
{
|
||||||
auto it = find(key);
|
auto it = find(key);
|
||||||
if (it == end())
|
if (it == end())
|
||||||
|
|
|
@ -57,8 +57,8 @@ class HashTableIterator {
|
||||||
friend HashTableType;
|
friend HashTableType;
|
||||||
|
|
||||||
public:
|
public:
|
||||||
bool operator==(const HashTableIterator& other) const { return m_bucket == other.m_bucket; }
|
bool operator==(HashTableIterator const& other) const { return m_bucket == other.m_bucket; }
|
||||||
bool operator!=(const HashTableIterator& other) const { return m_bucket != other.m_bucket; }
|
bool operator!=(HashTableIterator const& other) const { return m_bucket != other.m_bucket; }
|
||||||
T& operator*() { return *m_bucket->slot(); }
|
T& operator*() { return *m_bucket->slot(); }
|
||||||
T* operator->() { return m_bucket->slot(); }
|
T* operator->() { return m_bucket->slot(); }
|
||||||
void operator++() { skip_to_next(); }
|
void operator++() { skip_to_next(); }
|
||||||
|
@ -90,8 +90,8 @@ class OrderedHashTableIterator {
|
||||||
friend OrderedHashTableType;
|
friend OrderedHashTableType;
|
||||||
|
|
||||||
public:
|
public:
|
||||||
bool operator==(const OrderedHashTableIterator& other) const { return m_bucket == other.m_bucket; }
|
bool operator==(OrderedHashTableIterator const& other) const { return m_bucket == other.m_bucket; }
|
||||||
bool operator!=(const OrderedHashTableIterator& other) const { return m_bucket != other.m_bucket; }
|
bool operator!=(OrderedHashTableIterator const& other) const { return m_bucket != other.m_bucket; }
|
||||||
T& operator*() { return *m_bucket->slot(); }
|
T& operator*() { return *m_bucket->slot(); }
|
||||||
T* operator->() { return m_bucket->slot(); }
|
T* operator->() { return m_bucket->slot(); }
|
||||||
void operator++() { m_bucket = m_bucket->next; }
|
void operator++() { m_bucket = m_bucket->next; }
|
||||||
|
@ -156,14 +156,14 @@ public:
|
||||||
kfree_sized(m_buckets, size_in_bytes(m_capacity));
|
kfree_sized(m_buckets, size_in_bytes(m_capacity));
|
||||||
}
|
}
|
||||||
|
|
||||||
HashTable(const HashTable& other)
|
HashTable(HashTable const& other)
|
||||||
{
|
{
|
||||||
rehash(other.capacity());
|
rehash(other.capacity());
|
||||||
for (auto& it : other)
|
for (auto& it : other)
|
||||||
set(it);
|
set(it);
|
||||||
}
|
}
|
||||||
|
|
||||||
HashTable& operator=(const HashTable& other)
|
HashTable& operator=(HashTable const& other)
|
||||||
{
|
{
|
||||||
HashTable temporary(other);
|
HashTable temporary(other);
|
||||||
swap(*this, temporary);
|
swap(*this, temporary);
|
||||||
|
|
|
@ -21,11 +21,11 @@ ErrorOr<ByteBuffer> decode_hex(StringView input)
|
||||||
auto output = TRY(ByteBuffer::create_zeroed(input.length() / 2));
|
auto output = TRY(ByteBuffer::create_zeroed(input.length() / 2));
|
||||||
|
|
||||||
for (size_t i = 0; i < input.length() / 2; ++i) {
|
for (size_t i = 0; i < input.length() / 2; ++i) {
|
||||||
const auto c1 = decode_hex_digit(input[i * 2]);
|
auto const c1 = decode_hex_digit(input[i * 2]);
|
||||||
if (c1 >= 16)
|
if (c1 >= 16)
|
||||||
return Error::from_string_literal("Hex string contains invalid digit");
|
return Error::from_string_literal("Hex string contains invalid digit");
|
||||||
|
|
||||||
const auto c2 = decode_hex_digit(input[i * 2 + 1]);
|
auto const c2 = decode_hex_digit(input[i * 2 + 1]);
|
||||||
if (c2 >= 16)
|
if (c2 >= 16)
|
||||||
return Error::from_string_literal("Hex string contains invalid digit");
|
return Error::from_string_literal("Hex string contains invalid digit");
|
||||||
|
|
||||||
|
|
|
@ -89,7 +89,7 @@ public:
|
||||||
if (string.is_null())
|
if (string.is_null())
|
||||||
return {};
|
return {};
|
||||||
|
|
||||||
const auto parts = string.split_view('.');
|
auto const parts = string.split_view('.');
|
||||||
|
|
||||||
u32 a {};
|
u32 a {};
|
||||||
u32 b {};
|
u32 b {};
|
||||||
|
@ -122,8 +122,8 @@ public:
|
||||||
constexpr in_addr_t to_in_addr_t() const { return m_data; }
|
constexpr in_addr_t to_in_addr_t() const { return m_data; }
|
||||||
constexpr u32 to_u32() const { return m_data; }
|
constexpr u32 to_u32() const { return m_data; }
|
||||||
|
|
||||||
constexpr bool operator==(const IPv4Address& other) const = default;
|
constexpr bool operator==(IPv4Address const& other) const = default;
|
||||||
constexpr bool operator!=(const IPv4Address& other) const = default;
|
constexpr bool operator!=(IPv4Address const& other) const = default;
|
||||||
|
|
||||||
constexpr bool is_zero() const
|
constexpr bool is_zero() const
|
||||||
{
|
{
|
||||||
|
@ -135,7 +135,7 @@ private:
|
||||||
{
|
{
|
||||||
NetworkOrdered<u32> address(m_data);
|
NetworkOrdered<u32> address(m_data);
|
||||||
constexpr auto bits_per_byte = 8;
|
constexpr auto bits_per_byte = 8;
|
||||||
const auto bits_to_shift = bits_per_byte * int(subnet);
|
auto const bits_to_shift = bits_per_byte * int(subnet);
|
||||||
return (m_data >> bits_to_shift) & 0x0000'00FF;
|
return (m_data >> bits_to_shift) & 0x0000'00FF;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -146,7 +146,7 @@ static_assert(sizeof(IPv4Address) == 4);
|
||||||
|
|
||||||
template<>
|
template<>
|
||||||
struct Traits<IPv4Address> : public GenericTraits<IPv4Address> {
|
struct Traits<IPv4Address> : public GenericTraits<IPv4Address> {
|
||||||
static constexpr unsigned hash(const IPv4Address& address) { return int_hash(address.to_u32()); }
|
static constexpr unsigned hash(IPv4Address const& address) { return int_hash(address.to_u32()); }
|
||||||
};
|
};
|
||||||
|
|
||||||
#ifdef KERNEL
|
#ifdef KERNEL
|
||||||
|
|
|
@ -75,8 +75,8 @@ public:
|
||||||
auto operator->() const { return m_value; }
|
auto operator->() const { return m_value; }
|
||||||
T& operator*() { return *m_value; }
|
T& operator*() { return *m_value; }
|
||||||
auto operator->() { return m_value; }
|
auto operator->() { return m_value; }
|
||||||
bool operator==(const Iterator& other) const { return other.m_value == m_value; }
|
bool operator==(Iterator const& other) const { return other.m_value == m_value; }
|
||||||
bool operator!=(const Iterator& other) const { return !(*this == other); }
|
bool operator!=(Iterator const& other) const { return !(*this == other); }
|
||||||
Iterator& operator++()
|
Iterator& operator++()
|
||||||
{
|
{
|
||||||
m_value = IntrusiveList<T, Container, member>::next(m_value);
|
m_value = IntrusiveList<T, Container, member>::next(m_value);
|
||||||
|
@ -103,8 +103,8 @@ public:
|
||||||
auto operator->() const { return m_value; }
|
auto operator->() const { return m_value; }
|
||||||
T& operator*() { return *m_value; }
|
T& operator*() { return *m_value; }
|
||||||
auto operator->() { return m_value; }
|
auto operator->() { return m_value; }
|
||||||
bool operator==(const ReverseIterator& other) const { return other.m_value == m_value; }
|
bool operator==(ReverseIterator const& other) const { return other.m_value == m_value; }
|
||||||
bool operator!=(const ReverseIterator& other) const { return !(*this == other); }
|
bool operator!=(ReverseIterator const& other) const { return !(*this == other); }
|
||||||
ReverseIterator& operator++()
|
ReverseIterator& operator++()
|
||||||
{
|
{
|
||||||
m_value = IntrusiveList<T, Container, member>::prev(m_value);
|
m_value = IntrusiveList<T, Container, member>::prev(m_value);
|
||||||
|
@ -129,8 +129,8 @@ public:
|
||||||
|
|
||||||
const T& operator*() const { return *m_value; }
|
const T& operator*() const { return *m_value; }
|
||||||
auto operator->() const { return m_value; }
|
auto operator->() const { return m_value; }
|
||||||
bool operator==(const ConstIterator& other) const { return other.m_value == m_value; }
|
bool operator==(ConstIterator const& other) const { return other.m_value == m_value; }
|
||||||
bool operator!=(const ConstIterator& other) const { return !(*this == other); }
|
bool operator!=(ConstIterator const& other) const { return !(*this == other); }
|
||||||
ConstIterator& operator++()
|
ConstIterator& operator++()
|
||||||
{
|
{
|
||||||
m_value = IntrusiveList<T, Container, member>::next(m_value);
|
m_value = IntrusiveList<T, Container, member>::next(m_value);
|
||||||
|
|
|
@ -70,7 +70,7 @@ public:
|
||||||
class BaseIterator {
|
class BaseIterator {
|
||||||
public:
|
public:
|
||||||
BaseIterator() = default;
|
BaseIterator() = default;
|
||||||
bool operator!=(const BaseIterator& other) const { return m_node != other.m_node; }
|
bool operator!=(BaseIterator const& other) const { return m_node != other.m_node; }
|
||||||
BaseIterator& operator++()
|
BaseIterator& operator++()
|
||||||
{
|
{
|
||||||
if (!m_node)
|
if (!m_node)
|
||||||
|
|
|
@ -58,12 +58,12 @@ public:
|
||||||
ALWAYS_INLINE constexpr ValueType const* operator->() const { return &m_container[m_index]; }
|
ALWAYS_INLINE constexpr ValueType const* operator->() const { return &m_container[m_index]; }
|
||||||
ALWAYS_INLINE constexpr ValueType* operator->() { return &m_container[m_index]; }
|
ALWAYS_INLINE constexpr ValueType* operator->() { return &m_container[m_index]; }
|
||||||
|
|
||||||
SimpleIterator& operator=(const SimpleIterator& other)
|
SimpleIterator& operator=(SimpleIterator const& other)
|
||||||
{
|
{
|
||||||
m_index = other.m_index;
|
m_index = other.m_index;
|
||||||
return *this;
|
return *this;
|
||||||
}
|
}
|
||||||
SimpleIterator(const SimpleIterator& obj) = default;
|
SimpleIterator(SimpleIterator const& obj) = default;
|
||||||
|
|
||||||
private:
|
private:
|
||||||
static constexpr SimpleIterator begin(Container& container) { return { container, 0 }; }
|
static constexpr SimpleIterator begin(Container& container) { return { container, 0 }; }
|
||||||
|
|
|
@ -41,7 +41,7 @@ public:
|
||||||
{
|
{
|
||||||
}
|
}
|
||||||
|
|
||||||
JsonArraySerializer(const JsonArraySerializer&) = delete;
|
JsonArraySerializer(JsonArraySerializer const&) = delete;
|
||||||
|
|
||||||
~JsonArraySerializer()
|
~JsonArraySerializer()
|
||||||
{
|
{
|
||||||
|
@ -49,7 +49,7 @@ public:
|
||||||
}
|
}
|
||||||
|
|
||||||
#ifndef KERNEL
|
#ifndef KERNEL
|
||||||
ErrorOr<void> add(const JsonValue& value)
|
ErrorOr<void> add(JsonValue const& value)
|
||||||
{
|
{
|
||||||
TRY(begin_item());
|
TRY(begin_item());
|
||||||
value.serialize(m_builder);
|
value.serialize(m_builder);
|
||||||
|
@ -73,7 +73,7 @@ public:
|
||||||
}
|
}
|
||||||
|
|
||||||
#ifndef KERNEL
|
#ifndef KERNEL
|
||||||
ErrorOr<void> add(const String& value)
|
ErrorOr<void> add(String const& value)
|
||||||
{
|
{
|
||||||
TRY(begin_item());
|
TRY(begin_item());
|
||||||
if constexpr (IsLegacyBuilder<Builder>) {
|
if constexpr (IsLegacyBuilder<Builder>) {
|
||||||
|
@ -89,7 +89,7 @@ public:
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
ErrorOr<void> add(const char* value)
|
ErrorOr<void> add(char const* value)
|
||||||
{
|
{
|
||||||
TRY(begin_item());
|
TRY(begin_item());
|
||||||
if constexpr (IsLegacyBuilder<Builder>) {
|
if constexpr (IsLegacyBuilder<Builder>) {
|
||||||
|
|
|
@ -36,7 +36,7 @@ public:
|
||||||
{
|
{
|
||||||
}
|
}
|
||||||
|
|
||||||
JsonObjectSerializer(const JsonObjectSerializer&) = delete;
|
JsonObjectSerializer(JsonObjectSerializer const&) = delete;
|
||||||
|
|
||||||
~JsonObjectSerializer()
|
~JsonObjectSerializer()
|
||||||
{
|
{
|
||||||
|
@ -44,7 +44,7 @@ public:
|
||||||
}
|
}
|
||||||
|
|
||||||
#ifndef KERNEL
|
#ifndef KERNEL
|
||||||
ErrorOr<void> add(StringView key, const JsonValue& value)
|
ErrorOr<void> add(StringView key, JsonValue const& value)
|
||||||
{
|
{
|
||||||
TRY(begin_item(key));
|
TRY(begin_item(key));
|
||||||
value.serialize(m_builder);
|
value.serialize(m_builder);
|
||||||
|
@ -68,7 +68,7 @@ public:
|
||||||
}
|
}
|
||||||
|
|
||||||
#ifndef KERNEL
|
#ifndef KERNEL
|
||||||
ErrorOr<void> add(StringView key, const String& value)
|
ErrorOr<void> add(StringView key, String const& value)
|
||||||
{
|
{
|
||||||
TRY(begin_item(key));
|
TRY(begin_item(key));
|
||||||
if constexpr (IsLegacyBuilder<Builder>) {
|
if constexpr (IsLegacyBuilder<Builder>) {
|
||||||
|
@ -84,7 +84,7 @@ public:
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
ErrorOr<void> add(StringView key, const char* value)
|
ErrorOr<void> add(StringView key, char const* value)
|
||||||
{
|
{
|
||||||
TRY(begin_item(key));
|
TRY(begin_item(key));
|
||||||
if constexpr (IsLegacyBuilder<Builder>) {
|
if constexpr (IsLegacyBuilder<Builder>) {
|
||||||
|
|
|
@ -13,7 +13,7 @@ namespace AK {
|
||||||
JsonPathElement JsonPathElement::any_array_element { Kind::AnyIndex };
|
JsonPathElement JsonPathElement::any_array_element { Kind::AnyIndex };
|
||||||
JsonPathElement JsonPathElement::any_object_element { Kind::AnyKey };
|
JsonPathElement JsonPathElement::any_object_element { Kind::AnyKey };
|
||||||
|
|
||||||
JsonValue JsonPath::resolve(const JsonValue& top_root) const
|
JsonValue JsonPath::resolve(JsonValue const& top_root) const
|
||||||
{
|
{
|
||||||
auto root = top_root;
|
auto root = top_root;
|
||||||
for (auto const& element : *this) {
|
for (auto const& element : *this) {
|
||||||
|
|
|
@ -34,7 +34,7 @@ public:
|
||||||
}
|
}
|
||||||
|
|
||||||
Kind kind() const { return m_kind; }
|
Kind kind() const { return m_kind; }
|
||||||
const String& key() const
|
String const& key() const
|
||||||
{
|
{
|
||||||
VERIFY(m_kind == Kind::Key);
|
VERIFY(m_kind == Kind::Key);
|
||||||
return m_key;
|
return m_key;
|
||||||
|
@ -61,7 +61,7 @@ public:
|
||||||
static JsonPathElement any_array_element;
|
static JsonPathElement any_array_element;
|
||||||
static JsonPathElement any_object_element;
|
static JsonPathElement any_object_element;
|
||||||
|
|
||||||
bool operator==(const JsonPathElement& other) const
|
bool operator==(JsonPathElement const& other) const
|
||||||
{
|
{
|
||||||
switch (other.kind()) {
|
switch (other.kind()) {
|
||||||
case Kind::Key:
|
case Kind::Key:
|
||||||
|
@ -75,7 +75,7 @@ public:
|
||||||
}
|
}
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
bool operator!=(const JsonPathElement& other) const
|
bool operator!=(JsonPathElement const& other) const
|
||||||
{
|
{
|
||||||
return !(*this == other);
|
return !(*this == other);
|
||||||
}
|
}
|
||||||
|
@ -93,7 +93,7 @@ private:
|
||||||
|
|
||||||
class JsonPath : public Vector<JsonPathElement> {
|
class JsonPath : public Vector<JsonPathElement> {
|
||||||
public:
|
public:
|
||||||
JsonValue resolve(const JsonValue&) const;
|
JsonValue resolve(JsonValue const&) const;
|
||||||
String to_string() const;
|
String to_string() const;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
|
@ -20,12 +20,12 @@ JsonValue::JsonValue(Type type)
|
||||||
{
|
{
|
||||||
}
|
}
|
||||||
|
|
||||||
JsonValue::JsonValue(const JsonValue& other)
|
JsonValue::JsonValue(JsonValue const& other)
|
||||||
{
|
{
|
||||||
copy_from(other);
|
copy_from(other);
|
||||||
}
|
}
|
||||||
|
|
||||||
JsonValue& JsonValue::operator=(const JsonValue& other)
|
JsonValue& JsonValue::operator=(JsonValue const& other)
|
||||||
{
|
{
|
||||||
if (this != &other) {
|
if (this != &other) {
|
||||||
clear();
|
clear();
|
||||||
|
@ -34,7 +34,7 @@ JsonValue& JsonValue::operator=(const JsonValue& other)
|
||||||
return *this;
|
return *this;
|
||||||
}
|
}
|
||||||
|
|
||||||
void JsonValue::copy_from(const JsonValue& other)
|
void JsonValue::copy_from(JsonValue const& other)
|
||||||
{
|
{
|
||||||
m_type = other.m_type;
|
m_type = other.m_type;
|
||||||
switch (m_type) {
|
switch (m_type) {
|
||||||
|
@ -71,7 +71,7 @@ JsonValue& JsonValue::operator=(JsonValue&& other)
|
||||||
return *this;
|
return *this;
|
||||||
}
|
}
|
||||||
|
|
||||||
bool JsonValue::equals(const JsonValue& other) const
|
bool JsonValue::equals(JsonValue const& other) const
|
||||||
{
|
{
|
||||||
if (is_null() && other.is_null())
|
if (is_null() && other.is_null())
|
||||||
return true;
|
return true;
|
||||||
|
@ -155,7 +155,7 @@ JsonValue::JsonValue(long long unsigned value)
|
||||||
m_value.as_u64 = value;
|
m_value.as_u64 = value;
|
||||||
}
|
}
|
||||||
|
|
||||||
JsonValue::JsonValue(const char* cstring)
|
JsonValue::JsonValue(char const* cstring)
|
||||||
: JsonValue(String(cstring))
|
: JsonValue(String(cstring))
|
||||||
{
|
{
|
||||||
}
|
}
|
||||||
|
@ -174,7 +174,7 @@ JsonValue::JsonValue(bool value)
|
||||||
m_value.as_bool = value;
|
m_value.as_bool = value;
|
||||||
}
|
}
|
||||||
|
|
||||||
JsonValue::JsonValue(const String& value)
|
JsonValue::JsonValue(String const& value)
|
||||||
{
|
{
|
||||||
if (value.is_null()) {
|
if (value.is_null()) {
|
||||||
m_type = Type::Null;
|
m_type = Type::Null;
|
||||||
|
@ -190,13 +190,13 @@ JsonValue::JsonValue(StringView value)
|
||||||
{
|
{
|
||||||
}
|
}
|
||||||
|
|
||||||
JsonValue::JsonValue(const JsonObject& value)
|
JsonValue::JsonValue(JsonObject const& value)
|
||||||
: m_type(Type::Object)
|
: m_type(Type::Object)
|
||||||
{
|
{
|
||||||
m_value.as_object = new JsonObject(value);
|
m_value.as_object = new JsonObject(value);
|
||||||
}
|
}
|
||||||
|
|
||||||
JsonValue::JsonValue(const JsonArray& value)
|
JsonValue::JsonValue(JsonArray const& value)
|
||||||
: m_type(Type::Array)
|
: m_type(Type::Array)
|
||||||
{
|
{
|
||||||
m_value.as_array = new JsonArray(value);
|
m_value.as_array = new JsonArray(value);
|
||||||
|
|
|
@ -38,10 +38,10 @@ public:
|
||||||
explicit JsonValue(Type = Type::Null);
|
explicit JsonValue(Type = Type::Null);
|
||||||
~JsonValue() { clear(); }
|
~JsonValue() { clear(); }
|
||||||
|
|
||||||
JsonValue(const JsonValue&);
|
JsonValue(JsonValue const&);
|
||||||
JsonValue(JsonValue&&);
|
JsonValue(JsonValue&&);
|
||||||
|
|
||||||
JsonValue& operator=(const JsonValue&);
|
JsonValue& operator=(JsonValue const&);
|
||||||
JsonValue& operator=(JsonValue&&);
|
JsonValue& operator=(JsonValue&&);
|
||||||
|
|
||||||
JsonValue(int);
|
JsonValue(int);
|
||||||
|
@ -55,13 +55,13 @@ public:
|
||||||
JsonValue(double);
|
JsonValue(double);
|
||||||
#endif
|
#endif
|
||||||
JsonValue(bool);
|
JsonValue(bool);
|
||||||
JsonValue(const char*);
|
JsonValue(char const*);
|
||||||
#ifndef KERNEL
|
#ifndef KERNEL
|
||||||
JsonValue(const String&);
|
JsonValue(String const&);
|
||||||
#endif
|
#endif
|
||||||
JsonValue(StringView);
|
JsonValue(StringView);
|
||||||
JsonValue(const JsonArray&);
|
JsonValue(JsonArray const&);
|
||||||
JsonValue(const JsonObject&);
|
JsonValue(JsonObject const&);
|
||||||
|
|
||||||
JsonValue(JsonArray&&);
|
JsonValue(JsonArray&&);
|
||||||
JsonValue(JsonObject&&);
|
JsonValue(JsonObject&&);
|
||||||
|
@ -163,13 +163,13 @@ public:
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
const JsonObject& as_object() const
|
JsonObject const& as_object() const
|
||||||
{
|
{
|
||||||
VERIFY(is_object());
|
VERIFY(is_object());
|
||||||
return *m_value.as_object;
|
return *m_value.as_object;
|
||||||
}
|
}
|
||||||
|
|
||||||
const JsonArray& as_array() const
|
JsonArray const& as_array() const
|
||||||
{
|
{
|
||||||
VERIFY(is_array());
|
VERIFY(is_array());
|
||||||
return *m_value.as_array;
|
return *m_value.as_array;
|
||||||
|
@ -240,11 +240,11 @@ public:
|
||||||
return default_value;
|
return default_value;
|
||||||
}
|
}
|
||||||
|
|
||||||
bool equals(const JsonValue& other) const;
|
bool equals(JsonValue const& other) const;
|
||||||
|
|
||||||
private:
|
private:
|
||||||
void clear();
|
void clear();
|
||||||
void copy_from(const JsonValue&);
|
void copy_from(JsonValue const&);
|
||||||
|
|
||||||
Type m_type { Type::Null };
|
Type m_type { Type::Null };
|
||||||
|
|
||||||
|
|
|
@ -36,11 +36,11 @@ struct LEB128 {
|
||||||
return false;
|
return false;
|
||||||
|
|
||||||
ValueType masked_byte = byte & ~(1 << 7);
|
ValueType masked_byte = byte & ~(1 << 7);
|
||||||
const bool shift_too_large_for_result = (num_bytes * 7 > sizeof(ValueType) * 8) && (masked_byte != 0);
|
bool const shift_too_large_for_result = (num_bytes * 7 > sizeof(ValueType) * 8) && (masked_byte != 0);
|
||||||
if (shift_too_large_for_result)
|
if (shift_too_large_for_result)
|
||||||
return false;
|
return false;
|
||||||
|
|
||||||
const bool shift_too_large_for_byte = ((masked_byte << (num_bytes * 7)) >> (num_bytes * 7)) != masked_byte;
|
bool const shift_too_large_for_byte = ((masked_byte << (num_bytes * 7)) >> (num_bytes * 7)) != masked_byte;
|
||||||
if (shift_too_large_for_byte)
|
if (shift_too_large_for_byte)
|
||||||
return false;
|
return false;
|
||||||
|
|
||||||
|
@ -83,11 +83,11 @@ struct LEB128 {
|
||||||
|
|
||||||
// note: 64 bit assumptions!
|
// note: 64 bit assumptions!
|
||||||
u64 masked_byte = byte & ~(1 << 7);
|
u64 masked_byte = byte & ~(1 << 7);
|
||||||
const bool shift_too_large_for_result = (num_bytes * 7 >= 64) && (masked_byte != ((temp < 0) ? 0x7Fu : 0u));
|
bool const shift_too_large_for_result = (num_bytes * 7 >= 64) && (masked_byte != ((temp < 0) ? 0x7Fu : 0u));
|
||||||
if (shift_too_large_for_result)
|
if (shift_too_large_for_result)
|
||||||
return false;
|
return false;
|
||||||
|
|
||||||
const bool shift_too_large_for_byte = (num_bytes * 7) == 63 && masked_byte != 0x00 && masked_byte != 0x7Fu;
|
bool const shift_too_large_for_byte = (num_bytes * 7) == 63 && masked_byte != 0x00 && masked_byte != 0x7Fu;
|
||||||
if (shift_too_large_for_byte)
|
if (shift_too_large_for_byte)
|
||||||
return false;
|
return false;
|
||||||
|
|
||||||
|
|
|
@ -36,7 +36,7 @@ public:
|
||||||
|
|
||||||
constexpr ~MACAddress() = default;
|
constexpr ~MACAddress() = default;
|
||||||
|
|
||||||
constexpr const u8& operator[](unsigned i) const
|
constexpr u8 const& operator[](unsigned i) const
|
||||||
{
|
{
|
||||||
VERIFY(i < s_mac_address_length);
|
VERIFY(i < s_mac_address_length);
|
||||||
return m_data[i];
|
return m_data[i];
|
||||||
|
@ -48,7 +48,7 @@ public:
|
||||||
return m_data[i];
|
return m_data[i];
|
||||||
}
|
}
|
||||||
|
|
||||||
constexpr bool operator==(const MACAddress& other) const
|
constexpr bool operator==(MACAddress const& other) const
|
||||||
{
|
{
|
||||||
for (auto i = 0u; i < m_data.size(); ++i) {
|
for (auto i = 0u; i < m_data.size(); ++i) {
|
||||||
if (m_data[i] != other.m_data[i]) {
|
if (m_data[i] != other.m_data[i]) {
|
||||||
|
@ -75,7 +75,7 @@ public:
|
||||||
if (string.is_null())
|
if (string.is_null())
|
||||||
return {};
|
return {};
|
||||||
|
|
||||||
const auto parts = string.split_view(":");
|
auto const parts = string.split_view(":");
|
||||||
if (parts.size() != 6)
|
if (parts.size() != 6)
|
||||||
return {};
|
return {};
|
||||||
|
|
||||||
|
@ -94,7 +94,7 @@ public:
|
||||||
|
|
||||||
constexpr bool is_zero() const
|
constexpr bool is_zero() const
|
||||||
{
|
{
|
||||||
return all_of(m_data, [](const auto octet) { return octet == 0; });
|
return all_of(m_data, [](auto const octet) { return octet == 0; });
|
||||||
}
|
}
|
||||||
|
|
||||||
void copy_to(Bytes destination) const
|
void copy_to(Bytes destination) const
|
||||||
|
@ -112,7 +112,7 @@ namespace AK {
|
||||||
|
|
||||||
template<>
|
template<>
|
||||||
struct Traits<MACAddress> : public GenericTraits<MACAddress> {
|
struct Traits<MACAddress> : public GenericTraits<MACAddress> {
|
||||||
static unsigned hash(const MACAddress& address) { return string_hash((const char*)&address, sizeof(address)); }
|
static unsigned hash(MACAddress const& address) { return string_hash((char const*)&address, sizeof(address)); }
|
||||||
};
|
};
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
20
AK/MemMem.h
20
AK/MemMem.h
|
@ -15,7 +15,7 @@
|
||||||
namespace AK {
|
namespace AK {
|
||||||
|
|
||||||
namespace Detail {
|
namespace Detail {
|
||||||
constexpr const void* bitap_bitwise(const void* haystack, size_t haystack_length, const void* needle, size_t needle_length)
|
constexpr void const* bitap_bitwise(void const* haystack, size_t haystack_length, void const* needle, size_t needle_length)
|
||||||
{
|
{
|
||||||
VERIFY(needle_length < 32);
|
VERIFY(needle_length < 32);
|
||||||
|
|
||||||
|
@ -28,14 +28,14 @@ constexpr const void* bitap_bitwise(const void* haystack, size_t haystack_length
|
||||||
needle_mask[i] = 0xffffffff;
|
needle_mask[i] = 0xffffffff;
|
||||||
|
|
||||||
for (size_t i = 0; i < needle_length; ++i)
|
for (size_t i = 0; i < needle_length; ++i)
|
||||||
needle_mask[((const u8*)needle)[i]] &= ~(0x00000001 << i);
|
needle_mask[((u8 const*)needle)[i]] &= ~(0x00000001 << i);
|
||||||
|
|
||||||
for (size_t i = 0; i < haystack_length; ++i) {
|
for (size_t i = 0; i < haystack_length; ++i) {
|
||||||
lookup |= needle_mask[((const u8*)haystack)[i]];
|
lookup |= needle_mask[((u8 const*)haystack)[i]];
|
||||||
lookup <<= 1;
|
lookup <<= 1;
|
||||||
|
|
||||||
if (0 == (lookup & (0x00000001 << needle_length)))
|
if (0 == (lookup & (0x00000001 << needle_length)))
|
||||||
return ((const u8*)haystack) + i - needle_length + 1;
|
return ((u8 const*)haystack) + i - needle_length + 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
return nullptr;
|
return nullptr;
|
||||||
|
@ -43,7 +43,7 @@ constexpr const void* bitap_bitwise(const void* haystack, size_t haystack_length
|
||||||
}
|
}
|
||||||
|
|
||||||
template<typename HaystackIterT>
|
template<typename HaystackIterT>
|
||||||
inline Optional<size_t> memmem(const HaystackIterT& haystack_begin, const HaystackIterT& haystack_end, Span<const u8> needle) requires(requires { (*haystack_begin).data(); (*haystack_begin).size(); })
|
inline Optional<size_t> memmem(HaystackIterT const& haystack_begin, HaystackIterT const& haystack_end, Span<const u8> needle) requires(requires { (*haystack_begin).data(); (*haystack_begin).size(); })
|
||||||
{
|
{
|
||||||
auto prepare_kmp_partial_table = [&] {
|
auto prepare_kmp_partial_table = [&] {
|
||||||
Vector<int, 64> table;
|
Vector<int, 64> table;
|
||||||
|
@ -100,7 +100,7 @@ inline Optional<size_t> memmem(const HaystackIterT& haystack_begin, const Haysta
|
||||||
return {};
|
return {};
|
||||||
}
|
}
|
||||||
|
|
||||||
inline Optional<size_t> memmem_optional(const void* haystack, size_t haystack_length, const void* needle, size_t needle_length)
|
inline Optional<size_t> memmem_optional(void const* haystack, size_t haystack_length, void const* needle, size_t needle_length)
|
||||||
{
|
{
|
||||||
if (needle_length == 0)
|
if (needle_length == 0)
|
||||||
return 0;
|
return 0;
|
||||||
|
@ -122,15 +122,15 @@ inline Optional<size_t> memmem_optional(const void* haystack, size_t haystack_le
|
||||||
}
|
}
|
||||||
|
|
||||||
// Fallback to KMP.
|
// Fallback to KMP.
|
||||||
Array<Span<const u8>, 1> spans { Span<const u8> { (const u8*)haystack, haystack_length } };
|
Array<Span<const u8>, 1> spans { Span<const u8> { (u8 const*)haystack, haystack_length } };
|
||||||
return memmem(spans.begin(), spans.end(), { (const u8*)needle, needle_length });
|
return memmem(spans.begin(), spans.end(), { (u8 const*)needle, needle_length });
|
||||||
}
|
}
|
||||||
|
|
||||||
inline const void* memmem(const void* haystack, size_t haystack_length, const void* needle, size_t needle_length)
|
inline void const* memmem(void const* haystack, size_t haystack_length, void const* needle, size_t needle_length)
|
||||||
{
|
{
|
||||||
auto offset = memmem_optional(haystack, haystack_length, needle, needle_length);
|
auto offset = memmem_optional(haystack, haystack_length, needle, needle_length);
|
||||||
if (offset.has_value())
|
if (offset.has_value())
|
||||||
return ((const u8*)haystack) + offset.value();
|
return ((u8 const*)haystack) + offset.value();
|
||||||
|
|
||||||
return nullptr;
|
return nullptr;
|
||||||
}
|
}
|
||||||
|
|
|
@ -16,7 +16,7 @@
|
||||||
# include <string.h>
|
# include <string.h>
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
ALWAYS_INLINE void fast_u32_copy(u32* dest, const u32* src, size_t count)
|
ALWAYS_INLINE void fast_u32_copy(u32* dest, u32 const* src, size_t count)
|
||||||
{
|
{
|
||||||
#if ARCH(I386) || ARCH(X86_64)
|
#if ARCH(I386) || ARCH(X86_64)
|
||||||
asm volatile(
|
asm volatile(
|
||||||
|
@ -58,10 +58,10 @@ inline void secure_zero(void* ptr, size_t size)
|
||||||
// guarded against potential timing attacks.
|
// guarded against potential timing attacks.
|
||||||
//
|
//
|
||||||
// See OpenBSD's timingsafe_memcmp for more advanced implementations.
|
// See OpenBSD's timingsafe_memcmp for more advanced implementations.
|
||||||
inline bool timing_safe_compare(const void* b1, const void* b2, size_t len)
|
inline bool timing_safe_compare(void const* b1, void const* b2, size_t len)
|
||||||
{
|
{
|
||||||
auto* c1 = static_cast<const char*>(b1);
|
auto* c1 = static_cast<char const*>(b1);
|
||||||
auto* c2 = static_cast<const char*>(b2);
|
auto* c2 = static_cast<char const*>(b2);
|
||||||
|
|
||||||
u8 res = 0;
|
u8 res = 0;
|
||||||
for (size_t i = 0; i < len; i++) {
|
for (size_t i = 0; i < len; i++) {
|
||||||
|
|
|
@ -29,7 +29,7 @@ public:
|
||||||
if (has_any_error())
|
if (has_any_error())
|
||||||
return 0;
|
return 0;
|
||||||
|
|
||||||
const auto count = min(bytes.size(), remaining());
|
auto const count = min(bytes.size(), remaining());
|
||||||
__builtin_memcpy(bytes.data(), m_bytes.data() + m_offset, count);
|
__builtin_memcpy(bytes.data(), m_bytes.data() + m_offset, count);
|
||||||
m_offset += count;
|
m_offset += count;
|
||||||
return count;
|
return count;
|
||||||
|
@ -98,7 +98,7 @@ public:
|
||||||
|
|
||||||
size_t write(ReadonlyBytes bytes) override
|
size_t write(ReadonlyBytes bytes) override
|
||||||
{
|
{
|
||||||
const auto nwritten = bytes.copy_trimmed_to(m_bytes.slice(m_offset));
|
auto const nwritten = bytes.copy_trimmed_to(m_bytes.slice(m_offset));
|
||||||
m_offset += nwritten;
|
m_offset += nwritten;
|
||||||
return nwritten;
|
return nwritten;
|
||||||
}
|
}
|
||||||
|
@ -116,7 +116,7 @@ public:
|
||||||
|
|
||||||
size_t fill_to_end(u8 value)
|
size_t fill_to_end(u8 value)
|
||||||
{
|
{
|
||||||
const auto nwritten = m_bytes.slice(m_offset).fill(value);
|
auto const nwritten = m_bytes.slice(m_offset).fill(value);
|
||||||
m_offset += nwritten;
|
m_offset += nwritten;
|
||||||
return nwritten;
|
return nwritten;
|
||||||
}
|
}
|
||||||
|
@ -126,7 +126,7 @@ public:
|
||||||
ReadonlyBytes bytes() const { return { data(), size() }; }
|
ReadonlyBytes bytes() const { return { data(), size() }; }
|
||||||
Bytes bytes() { return { data(), size() }; }
|
Bytes bytes() { return { data(), size() }; }
|
||||||
|
|
||||||
const u8* data() const { return m_bytes.data(); }
|
u8 const* data() const { return m_bytes.data(); }
|
||||||
u8* data() { return m_bytes.data(); }
|
u8* data() { return m_bytes.data(); }
|
||||||
|
|
||||||
size_t size() const { return m_offset; }
|
size_t size() const { return m_offset; }
|
||||||
|
@ -186,8 +186,8 @@ public:
|
||||||
{
|
{
|
||||||
size_t nread = 0;
|
size_t nread = 0;
|
||||||
while (bytes.size() - nread > 0 && m_write_offset - m_read_offset - nread > 0) {
|
while (bytes.size() - nread > 0 && m_write_offset - m_read_offset - nread > 0) {
|
||||||
const auto chunk_index = (m_read_offset - m_base_offset + nread) / chunk_size;
|
auto const chunk_index = (m_read_offset - m_base_offset + nread) / chunk_size;
|
||||||
const auto chunk_bytes = m_chunks[chunk_index].bytes().slice((m_read_offset + nread) % chunk_size).trim(m_write_offset - m_read_offset - nread);
|
auto const chunk_bytes = m_chunks[chunk_index].bytes().slice((m_read_offset + nread) % chunk_size).trim(m_write_offset - m_read_offset - nread);
|
||||||
nread += chunk_bytes.copy_trimmed_to(bytes.slice(nread));
|
nread += chunk_bytes.copy_trimmed_to(bytes.slice(nread));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -199,7 +199,7 @@ public:
|
||||||
if (has_any_error())
|
if (has_any_error())
|
||||||
return 0;
|
return 0;
|
||||||
|
|
||||||
const auto nread = read_without_consuming(bytes);
|
auto const nread = read_without_consuming(bytes);
|
||||||
|
|
||||||
m_read_offset += nread;
|
m_read_offset += nread;
|
||||||
try_discard_chunks();
|
try_discard_chunks();
|
||||||
|
@ -244,7 +244,7 @@ public:
|
||||||
// FIXME: Handle possible OOM situation.
|
// FIXME: Handle possible OOM situation.
|
||||||
auto buffer = ByteBuffer::create_uninitialized(size()).release_value_but_fixme_should_propagate_errors();
|
auto buffer = ByteBuffer::create_uninitialized(size()).release_value_but_fixme_should_propagate_errors();
|
||||||
|
|
||||||
const auto nread = read_without_consuming(buffer);
|
auto const nread = read_without_consuming(buffer);
|
||||||
VERIFY(nread == buffer.size());
|
VERIFY(nread == buffer.size());
|
||||||
|
|
||||||
return buffer;
|
return buffer;
|
||||||
|
|
|
@ -8,8 +8,8 @@
|
||||||
|
|
||||||
#define AK_MAKE_NONCOPYABLE(c) \
|
#define AK_MAKE_NONCOPYABLE(c) \
|
||||||
private: \
|
private: \
|
||||||
c(const c&) = delete; \
|
c(c const&) = delete; \
|
||||||
c& operator=(const c&) = delete
|
c& operator=(c const&) = delete
|
||||||
|
|
||||||
#define AK_MAKE_NONMOVABLE(c) \
|
#define AK_MAKE_NONMOVABLE(c) \
|
||||||
private: \
|
private: \
|
||||||
|
|
|
@ -57,25 +57,25 @@ public:
|
||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
NonnullOwnPtr(const NonnullOwnPtr&) = delete;
|
NonnullOwnPtr(NonnullOwnPtr const&) = delete;
|
||||||
template<typename U>
|
template<typename U>
|
||||||
NonnullOwnPtr(const NonnullOwnPtr<U>&) = delete;
|
NonnullOwnPtr(NonnullOwnPtr<U> const&) = delete;
|
||||||
NonnullOwnPtr& operator=(const NonnullOwnPtr&) = delete;
|
NonnullOwnPtr& operator=(NonnullOwnPtr const&) = delete;
|
||||||
template<typename U>
|
template<typename U>
|
||||||
NonnullOwnPtr& operator=(const NonnullOwnPtr<U>&) = delete;
|
NonnullOwnPtr& operator=(NonnullOwnPtr<U> const&) = delete;
|
||||||
|
|
||||||
template<typename U, typename PtrTraits = RefPtrTraits<U>>
|
template<typename U, typename PtrTraits = RefPtrTraits<U>>
|
||||||
NonnullOwnPtr(const RefPtr<U, PtrTraits>&) = delete;
|
NonnullOwnPtr(RefPtr<U, PtrTraits> const&) = delete;
|
||||||
template<typename U>
|
template<typename U>
|
||||||
NonnullOwnPtr(const NonnullRefPtr<U>&) = delete;
|
NonnullOwnPtr(NonnullRefPtr<U> const&) = delete;
|
||||||
template<typename U>
|
template<typename U>
|
||||||
NonnullOwnPtr(const WeakPtr<U>&) = delete;
|
NonnullOwnPtr(WeakPtr<U> const&) = delete;
|
||||||
template<typename U, typename PtrTraits = RefPtrTraits<U>>
|
template<typename U, typename PtrTraits = RefPtrTraits<U>>
|
||||||
NonnullOwnPtr& operator=(const RefPtr<U, PtrTraits>&) = delete;
|
NonnullOwnPtr& operator=(RefPtr<U, PtrTraits> const&) = delete;
|
||||||
template<typename U>
|
template<typename U>
|
||||||
NonnullOwnPtr& operator=(const NonnullRefPtr<U>&) = delete;
|
NonnullOwnPtr& operator=(NonnullRefPtr<U> const&) = delete;
|
||||||
template<typename U>
|
template<typename U>
|
||||||
NonnullOwnPtr& operator=(const WeakPtr<U>&) = delete;
|
NonnullOwnPtr& operator=(WeakPtr<U> const&) = delete;
|
||||||
|
|
||||||
NonnullOwnPtr& operator=(NonnullOwnPtr&& other)
|
NonnullOwnPtr& operator=(NonnullOwnPtr&& other)
|
||||||
{
|
{
|
||||||
|
@ -178,8 +178,8 @@ template<typename T>
|
||||||
struct Traits<NonnullOwnPtr<T>> : public GenericTraits<NonnullOwnPtr<T>> {
|
struct Traits<NonnullOwnPtr<T>> : public GenericTraits<NonnullOwnPtr<T>> {
|
||||||
using PeekType = T*;
|
using PeekType = T*;
|
||||||
using ConstPeekType = const T*;
|
using ConstPeekType = const T*;
|
||||||
static unsigned hash(const NonnullOwnPtr<T>& p) { return ptr_hash((FlatPtr)p.ptr()); }
|
static unsigned hash(NonnullOwnPtr<T> const& p) { return ptr_hash((FlatPtr)p.ptr()); }
|
||||||
static bool equals(const NonnullOwnPtr<T>& a, const NonnullOwnPtr<T>& b) { return a.ptr() == b.ptr(); }
|
static bool equals(NonnullOwnPtr<T> const& a, NonnullOwnPtr<T> const& b) { return a.ptr() == b.ptr(); }
|
||||||
};
|
};
|
||||||
|
|
||||||
template<typename T, typename U>
|
template<typename T, typename U>
|
||||||
|
|
|
@ -22,8 +22,8 @@ public:
|
||||||
: Base(static_cast<Base&&>(other))
|
: Base(static_cast<Base&&>(other))
|
||||||
{
|
{
|
||||||
}
|
}
|
||||||
NonnullPtrVector(const Vector<PtrType>& other)
|
NonnullPtrVector(Vector<PtrType> const& other)
|
||||||
: Base(static_cast<const Base&>(other))
|
: Base(static_cast<Base const&>(other))
|
||||||
{
|
{
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -48,7 +48,7 @@ public:
|
||||||
ALWAYS_INLINE constexpr auto in_reverse() const { return ReverseWrapper::in_reverse(*this); }
|
ALWAYS_INLINE constexpr auto in_reverse() const { return ReverseWrapper::in_reverse(*this); }
|
||||||
|
|
||||||
ALWAYS_INLINE PtrType& ptr_at(size_t index) { return Base::at(index); }
|
ALWAYS_INLINE PtrType& ptr_at(size_t index) { return Base::at(index); }
|
||||||
ALWAYS_INLINE const PtrType& ptr_at(size_t index) const { return Base::at(index); }
|
ALWAYS_INLINE PtrType const& ptr_at(size_t index) const { return Base::at(index); }
|
||||||
|
|
||||||
ALWAYS_INLINE T& at(size_t index) { return *Base::at(index); }
|
ALWAYS_INLINE T& at(size_t index) { return *Base::at(index); }
|
||||||
ALWAYS_INLINE const T& at(size_t index) const { return *Base::at(index); }
|
ALWAYS_INLINE const T& at(size_t index) const { return *Base::at(index); }
|
||||||
|
|
|
@ -104,16 +104,16 @@ public:
|
||||||
}
|
}
|
||||||
|
|
||||||
template<typename U>
|
template<typename U>
|
||||||
NonnullRefPtr(const OwnPtr<U>&) = delete;
|
NonnullRefPtr(OwnPtr<U> const&) = delete;
|
||||||
template<typename U>
|
template<typename U>
|
||||||
NonnullRefPtr& operator=(const OwnPtr<U>&) = delete;
|
NonnullRefPtr& operator=(OwnPtr<U> const&) = delete;
|
||||||
|
|
||||||
template<typename U>
|
template<typename U>
|
||||||
NonnullRefPtr(const RefPtr<U>&) = delete;
|
NonnullRefPtr(RefPtr<U> const&) = delete;
|
||||||
template<typename U>
|
template<typename U>
|
||||||
NonnullRefPtr& operator=(const RefPtr<U>&) = delete;
|
NonnullRefPtr& operator=(RefPtr<U> const&) = delete;
|
||||||
NonnullRefPtr(const RefPtr<T>&) = delete;
|
NonnullRefPtr(RefPtr<T> const&) = delete;
|
||||||
NonnullRefPtr& operator=(const RefPtr<T>&) = delete;
|
NonnullRefPtr& operator=(RefPtr<T> const&) = delete;
|
||||||
|
|
||||||
NonnullRefPtr& operator=(NonnullRefPtr const& other)
|
NonnullRefPtr& operator=(NonnullRefPtr const& other)
|
||||||
{
|
{
|
||||||
|
@ -270,8 +270,8 @@ template<typename T>
|
||||||
struct Traits<NonnullRefPtr<T>> : public GenericTraits<NonnullRefPtr<T>> {
|
struct Traits<NonnullRefPtr<T>> : public GenericTraits<NonnullRefPtr<T>> {
|
||||||
using PeekType = T*;
|
using PeekType = T*;
|
||||||
using ConstPeekType = const T*;
|
using ConstPeekType = const T*;
|
||||||
static unsigned hash(const NonnullRefPtr<T>& p) { return ptr_hash(p.ptr()); }
|
static unsigned hash(NonnullRefPtr<T> const& p) { return ptr_hash(p.ptr()); }
|
||||||
static bool equals(const NonnullRefPtr<T>& a, const NonnullRefPtr<T>& b) { return a.ptr() == b.ptr(); }
|
static bool equals(NonnullRefPtr<T> const& a, NonnullRefPtr<T> const& b) { return a.ptr() == b.ptr(); }
|
||||||
};
|
};
|
||||||
|
|
||||||
using AK::adopt_ref;
|
using AK::adopt_ref;
|
||||||
|
|
|
@ -11,7 +11,7 @@
|
||||||
namespace AK {
|
namespace AK {
|
||||||
|
|
||||||
// FIXME: Remove this hackery once printf() supports floats.
|
// FIXME: Remove this hackery once printf() supports floats.
|
||||||
static String number_string_with_one_decimal(u64 number, u64 unit, const char* suffix)
|
static String number_string_with_one_decimal(u64 number, u64 unit, char const* suffix)
|
||||||
{
|
{
|
||||||
int decimal = (number % unit) * 10 / unit;
|
int decimal = (number % unit) * 10 / unit;
|
||||||
return String::formatted("{}.{} {}", number / unit, decimal, suffix);
|
return String::formatted("{}.{} {}", number / unit, decimal, suffix);
|
||||||
|
|
28
AK/OwnPtr.h
28
AK/OwnPtr.h
|
@ -47,29 +47,29 @@ public:
|
||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
OwnPtr(const OwnPtr&) = delete;
|
OwnPtr(OwnPtr const&) = delete;
|
||||||
template<typename U>
|
template<typename U>
|
||||||
OwnPtr(const OwnPtr<U>&) = delete;
|
OwnPtr(OwnPtr<U> const&) = delete;
|
||||||
OwnPtr& operator=(const OwnPtr&) = delete;
|
OwnPtr& operator=(OwnPtr const&) = delete;
|
||||||
template<typename U>
|
template<typename U>
|
||||||
OwnPtr& operator=(const OwnPtr<U>&) = delete;
|
OwnPtr& operator=(OwnPtr<U> const&) = delete;
|
||||||
|
|
||||||
template<typename U>
|
template<typename U>
|
||||||
OwnPtr(const NonnullOwnPtr<U>&) = delete;
|
OwnPtr(NonnullOwnPtr<U> const&) = delete;
|
||||||
template<typename U>
|
template<typename U>
|
||||||
OwnPtr& operator=(const NonnullOwnPtr<U>&) = delete;
|
OwnPtr& operator=(NonnullOwnPtr<U> const&) = delete;
|
||||||
template<typename U>
|
template<typename U>
|
||||||
OwnPtr(const RefPtr<U>&) = delete;
|
OwnPtr(RefPtr<U> const&) = delete;
|
||||||
template<typename U>
|
template<typename U>
|
||||||
OwnPtr(const NonnullRefPtr<U>&) = delete;
|
OwnPtr(NonnullRefPtr<U> const&) = delete;
|
||||||
template<typename U>
|
template<typename U>
|
||||||
OwnPtr(const WeakPtr<U>&) = delete;
|
OwnPtr(WeakPtr<U> const&) = delete;
|
||||||
template<typename U>
|
template<typename U>
|
||||||
OwnPtr& operator=(const RefPtr<U>&) = delete;
|
OwnPtr& operator=(RefPtr<U> const&) = delete;
|
||||||
template<typename U>
|
template<typename U>
|
||||||
OwnPtr& operator=(const NonnullRefPtr<U>&) = delete;
|
OwnPtr& operator=(NonnullRefPtr<U> const&) = delete;
|
||||||
template<typename U>
|
template<typename U>
|
||||||
OwnPtr& operator=(const WeakPtr<U>&) = delete;
|
OwnPtr& operator=(WeakPtr<U> const&) = delete;
|
||||||
|
|
||||||
OwnPtr& operator=(OwnPtr&& other)
|
OwnPtr& operator=(OwnPtr&& other)
|
||||||
{
|
{
|
||||||
|
@ -232,8 +232,8 @@ template<typename T>
|
||||||
struct Traits<OwnPtr<T>> : public GenericTraits<OwnPtr<T>> {
|
struct Traits<OwnPtr<T>> : public GenericTraits<OwnPtr<T>> {
|
||||||
using PeekType = T*;
|
using PeekType = T*;
|
||||||
using ConstPeekType = const T*;
|
using ConstPeekType = const T*;
|
||||||
static unsigned hash(const OwnPtr<T>& p) { return ptr_hash(p.ptr()); }
|
static unsigned hash(OwnPtr<T> const& p) { return ptr_hash(p.ptr()); }
|
||||||
static bool equals(const OwnPtr<T>& a, const OwnPtr<T>& b) { return a.ptr() == b.ptr(); }
|
static bool equals(OwnPtr<T> const& a, OwnPtr<T> const& b) { return a.ptr() == b.ptr(); }
|
||||||
};
|
};
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -14,7 +14,7 @@
|
||||||
#include <wchar.h>
|
#include <wchar.h>
|
||||||
|
|
||||||
#ifdef __serenity__
|
#ifdef __serenity__
|
||||||
extern "C" size_t strlen(const char*);
|
extern "C" size_t strlen(char const*);
|
||||||
#else
|
#else
|
||||||
# include <string.h>
|
# include <string.h>
|
||||||
#endif
|
#endif
|
||||||
|
@ -24,8 +24,8 @@ namespace PrintfImplementation {
|
||||||
template<typename PutChFunc, typename T, typename CharType>
|
template<typename PutChFunc, typename T, typename CharType>
|
||||||
ALWAYS_INLINE int print_hex(PutChFunc putch, CharType*& bufptr, T number, bool upper_case, bool alternate_form, bool left_pad, bool zero_pad, u32 field_width, bool has_precision, u32 precision)
|
ALWAYS_INLINE int print_hex(PutChFunc putch, CharType*& bufptr, T number, bool upper_case, bool alternate_form, bool left_pad, bool zero_pad, u32 field_width, bool has_precision, u32 precision)
|
||||||
{
|
{
|
||||||
constexpr const char* printf_hex_digits_lower = "0123456789abcdef";
|
constexpr char const* printf_hex_digits_lower = "0123456789abcdef";
|
||||||
constexpr const char* printf_hex_digits_upper = "0123456789ABCDEF";
|
constexpr char const* printf_hex_digits_upper = "0123456789ABCDEF";
|
||||||
|
|
||||||
u32 digits = 0;
|
u32 digits = 0;
|
||||||
for (T n = number; n > 0; n >>= 4)
|
for (T n = number; n > 0; n >>= 4)
|
||||||
|
@ -331,104 +331,104 @@ struct ModifierState {
|
||||||
|
|
||||||
template<typename PutChFunc, typename ArgumentListRefT, template<typename T, typename U = ArgumentListRefT> typename NextArgument, typename CharType = char>
|
template<typename PutChFunc, typename ArgumentListRefT, template<typename T, typename U = ArgumentListRefT> typename NextArgument, typename CharType = char>
|
||||||
struct PrintfImpl {
|
struct PrintfImpl {
|
||||||
ALWAYS_INLINE PrintfImpl(PutChFunc& putch, CharType*& bufptr, const int& nwritten)
|
ALWAYS_INLINE PrintfImpl(PutChFunc& putch, CharType*& bufptr, int const& nwritten)
|
||||||
: m_bufptr(bufptr)
|
: m_bufptr(bufptr)
|
||||||
, m_nwritten(nwritten)
|
, m_nwritten(nwritten)
|
||||||
, m_putch(putch)
|
, m_putch(putch)
|
||||||
{
|
{
|
||||||
}
|
}
|
||||||
|
|
||||||
ALWAYS_INLINE int format_s(const ModifierState& state, ArgumentListRefT ap) const
|
ALWAYS_INLINE int format_s(ModifierState const& state, ArgumentListRefT ap) const
|
||||||
{
|
{
|
||||||
// FIXME: Narrow characters should be converted to wide characters on the fly and vice versa.
|
// FIXME: Narrow characters should be converted to wide characters on the fly and vice versa.
|
||||||
// https://pubs.opengroup.org/onlinepubs/9699919799/functions/printf.html
|
// https://pubs.opengroup.org/onlinepubs/9699919799/functions/printf.html
|
||||||
// https://pubs.opengroup.org/onlinepubs/9699919799/functions/wprintf.html
|
// https://pubs.opengroup.org/onlinepubs/9699919799/functions/wprintf.html
|
||||||
#ifndef KERNEL
|
#ifndef KERNEL
|
||||||
if (state.long_qualifiers) {
|
if (state.long_qualifiers) {
|
||||||
const wchar_t* sp = NextArgument<const wchar_t*>()(ap);
|
wchar_t const* sp = NextArgument<wchar_t const*>()(ap);
|
||||||
if (!sp)
|
if (!sp)
|
||||||
sp = L"(null)";
|
sp = L"(null)";
|
||||||
return print_string(m_putch, m_bufptr, sp, wcslen(sp), state.left_pad, state.field_width, state.dot, state.precision, state.has_precision);
|
return print_string(m_putch, m_bufptr, sp, wcslen(sp), state.left_pad, state.field_width, state.dot, state.precision, state.has_precision);
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
const char* sp = NextArgument<const char*>()(ap);
|
char const* sp = NextArgument<char const*>()(ap);
|
||||||
if (!sp)
|
if (!sp)
|
||||||
sp = "(null)";
|
sp = "(null)";
|
||||||
return print_string(m_putch, m_bufptr, sp, strlen(sp), state.left_pad, state.field_width, state.dot, state.precision, state.has_precision);
|
return print_string(m_putch, m_bufptr, sp, strlen(sp), state.left_pad, state.field_width, state.dot, state.precision, state.has_precision);
|
||||||
}
|
}
|
||||||
ALWAYS_INLINE int format_d(const ModifierState& state, ArgumentListRefT ap) const
|
ALWAYS_INLINE int format_d(ModifierState const& state, ArgumentListRefT ap) const
|
||||||
{
|
{
|
||||||
if (state.long_qualifiers >= 2)
|
if (state.long_qualifiers >= 2)
|
||||||
return print_i64(m_putch, m_bufptr, NextArgument<i64>()(ap), state.always_sign, state.left_pad, state.zero_pad, state.field_width, state.has_precision, state.precision);
|
return print_i64(m_putch, m_bufptr, NextArgument<i64>()(ap), state.always_sign, state.left_pad, state.zero_pad, state.field_width, state.has_precision, state.precision);
|
||||||
|
|
||||||
return print_signed_number(m_putch, m_bufptr, NextArgument<int>()(ap), state.always_sign, state.left_pad, state.zero_pad, state.field_width, state.has_precision, state.precision);
|
return print_signed_number(m_putch, m_bufptr, NextArgument<int>()(ap), state.always_sign, state.left_pad, state.zero_pad, state.field_width, state.has_precision, state.precision);
|
||||||
}
|
}
|
||||||
ALWAYS_INLINE int format_i(const ModifierState& state, ArgumentListRefT ap) const
|
ALWAYS_INLINE int format_i(ModifierState const& state, ArgumentListRefT ap) const
|
||||||
{
|
{
|
||||||
return format_d(state, ap);
|
return format_d(state, ap);
|
||||||
}
|
}
|
||||||
ALWAYS_INLINE int format_u(const ModifierState& state, ArgumentListRefT ap) const
|
ALWAYS_INLINE int format_u(ModifierState const& state, ArgumentListRefT ap) const
|
||||||
{
|
{
|
||||||
if (state.long_qualifiers >= 2)
|
if (state.long_qualifiers >= 2)
|
||||||
return print_decimal(m_putch, m_bufptr, NextArgument<u64>()(ap), false, false, state.left_pad, state.zero_pad, state.field_width, state.has_precision, state.precision);
|
return print_decimal(m_putch, m_bufptr, NextArgument<u64>()(ap), false, false, state.left_pad, state.zero_pad, state.field_width, state.has_precision, state.precision);
|
||||||
return print_decimal(m_putch, m_bufptr, NextArgument<u32>()(ap), false, false, state.left_pad, state.zero_pad, state.field_width, state.has_precision, state.precision);
|
return print_decimal(m_putch, m_bufptr, NextArgument<u32>()(ap), false, false, state.left_pad, state.zero_pad, state.field_width, state.has_precision, state.precision);
|
||||||
}
|
}
|
||||||
ALWAYS_INLINE int format_Q(const ModifierState& state, ArgumentListRefT ap) const
|
ALWAYS_INLINE int format_Q(ModifierState const& state, ArgumentListRefT ap) const
|
||||||
{
|
{
|
||||||
return print_decimal(m_putch, m_bufptr, NextArgument<u64>()(ap), false, false, state.left_pad, state.zero_pad, state.field_width, state.has_precision, state.precision);
|
return print_decimal(m_putch, m_bufptr, NextArgument<u64>()(ap), false, false, state.left_pad, state.zero_pad, state.field_width, state.has_precision, state.precision);
|
||||||
}
|
}
|
||||||
ALWAYS_INLINE int format_q(const ModifierState& state, ArgumentListRefT ap) const
|
ALWAYS_INLINE int format_q(ModifierState const& state, ArgumentListRefT ap) const
|
||||||
{
|
{
|
||||||
return print_hex(m_putch, m_bufptr, NextArgument<u64>()(ap), false, false, state.left_pad, state.zero_pad, 16, false, 1);
|
return print_hex(m_putch, m_bufptr, NextArgument<u64>()(ap), false, false, state.left_pad, state.zero_pad, 16, false, 1);
|
||||||
}
|
}
|
||||||
ALWAYS_INLINE int format_g(const ModifierState& state, ArgumentListRefT ap) const
|
ALWAYS_INLINE int format_g(ModifierState const& state, ArgumentListRefT ap) const
|
||||||
{
|
{
|
||||||
return format_f(state, ap);
|
return format_f(state, ap);
|
||||||
}
|
}
|
||||||
ALWAYS_INLINE int format_f(const ModifierState& state, ArgumentListRefT ap) const
|
ALWAYS_INLINE int format_f(ModifierState const& state, ArgumentListRefT ap) const
|
||||||
{
|
{
|
||||||
return print_double(m_putch, m_bufptr, NextArgument<double>()(ap), state.always_sign, state.left_pad, state.zero_pad, state.field_width, state.precision);
|
return print_double(m_putch, m_bufptr, NextArgument<double>()(ap), state.always_sign, state.left_pad, state.zero_pad, state.field_width, state.precision);
|
||||||
}
|
}
|
||||||
ALWAYS_INLINE int format_o(const ModifierState& state, ArgumentListRefT ap) const
|
ALWAYS_INLINE int format_o(ModifierState const& state, ArgumentListRefT ap) const
|
||||||
{
|
{
|
||||||
return print_octal_number(m_putch, m_bufptr, NextArgument<u32>()(ap), state.alternate_form, state.left_pad, state.zero_pad, state.field_width, state.has_precision, state.precision);
|
return print_octal_number(m_putch, m_bufptr, NextArgument<u32>()(ap), state.alternate_form, state.left_pad, state.zero_pad, state.field_width, state.has_precision, state.precision);
|
||||||
}
|
}
|
||||||
ALWAYS_INLINE int format_x(const ModifierState& state, ArgumentListRefT ap) const
|
ALWAYS_INLINE int format_x(ModifierState const& state, ArgumentListRefT ap) const
|
||||||
{
|
{
|
||||||
if (state.long_qualifiers >= 2)
|
if (state.long_qualifiers >= 2)
|
||||||
return print_hex(m_putch, m_bufptr, NextArgument<u64>()(ap), false, state.alternate_form, state.left_pad, state.zero_pad, state.field_width, state.has_precision, state.precision);
|
return print_hex(m_putch, m_bufptr, NextArgument<u64>()(ap), false, state.alternate_form, state.left_pad, state.zero_pad, state.field_width, state.has_precision, state.precision);
|
||||||
return print_hex(m_putch, m_bufptr, NextArgument<u32>()(ap), false, state.alternate_form, state.left_pad, state.zero_pad, state.field_width, state.has_precision, state.precision);
|
return print_hex(m_putch, m_bufptr, NextArgument<u32>()(ap), false, state.alternate_form, state.left_pad, state.zero_pad, state.field_width, state.has_precision, state.precision);
|
||||||
}
|
}
|
||||||
ALWAYS_INLINE int format_X(const ModifierState& state, ArgumentListRefT ap) const
|
ALWAYS_INLINE int format_X(ModifierState const& state, ArgumentListRefT ap) const
|
||||||
{
|
{
|
||||||
if (state.long_qualifiers >= 2)
|
if (state.long_qualifiers >= 2)
|
||||||
return print_hex(m_putch, m_bufptr, NextArgument<u64>()(ap), true, state.alternate_form, state.left_pad, state.zero_pad, state.field_width, state.has_precision, state.precision);
|
return print_hex(m_putch, m_bufptr, NextArgument<u64>()(ap), true, state.alternate_form, state.left_pad, state.zero_pad, state.field_width, state.has_precision, state.precision);
|
||||||
return print_hex(m_putch, m_bufptr, NextArgument<u32>()(ap), true, state.alternate_form, state.left_pad, state.zero_pad, state.field_width, state.has_precision, state.precision);
|
return print_hex(m_putch, m_bufptr, NextArgument<u32>()(ap), true, state.alternate_form, state.left_pad, state.zero_pad, state.field_width, state.has_precision, state.precision);
|
||||||
}
|
}
|
||||||
ALWAYS_INLINE int format_n(const ModifierState&, ArgumentListRefT ap) const
|
ALWAYS_INLINE int format_n(ModifierState const&, ArgumentListRefT ap) const
|
||||||
{
|
{
|
||||||
*NextArgument<int*>()(ap) = m_nwritten;
|
*NextArgument<int*>()(ap) = m_nwritten;
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
ALWAYS_INLINE int format_p(const ModifierState&, ArgumentListRefT ap) const
|
ALWAYS_INLINE int format_p(ModifierState const&, ArgumentListRefT ap) const
|
||||||
{
|
{
|
||||||
return print_hex(m_putch, m_bufptr, NextArgument<FlatPtr>()(ap), false, true, false, true, 8, false, 1);
|
return print_hex(m_putch, m_bufptr, NextArgument<FlatPtr>()(ap), false, true, false, true, 8, false, 1);
|
||||||
}
|
}
|
||||||
ALWAYS_INLINE int format_P(const ModifierState&, ArgumentListRefT ap) const
|
ALWAYS_INLINE int format_P(ModifierState const&, ArgumentListRefT ap) const
|
||||||
{
|
{
|
||||||
return print_hex(m_putch, m_bufptr, NextArgument<FlatPtr>()(ap), true, true, false, true, 8, false, 1);
|
return print_hex(m_putch, m_bufptr, NextArgument<FlatPtr>()(ap), true, true, false, true, 8, false, 1);
|
||||||
}
|
}
|
||||||
ALWAYS_INLINE int format_percent(const ModifierState&, ArgumentListRefT) const
|
ALWAYS_INLINE int format_percent(ModifierState const&, ArgumentListRefT) const
|
||||||
{
|
{
|
||||||
m_putch(m_bufptr, '%');
|
m_putch(m_bufptr, '%');
|
||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
ALWAYS_INLINE int format_c(const ModifierState& state, ArgumentListRefT ap) const
|
ALWAYS_INLINE int format_c(ModifierState const& state, ArgumentListRefT ap) const
|
||||||
{
|
{
|
||||||
char c = NextArgument<int>()(ap);
|
char c = NextArgument<int>()(ap);
|
||||||
return print_string(m_putch, m_bufptr, &c, 1, state.left_pad, state.field_width, state.dot, state.precision, state.has_precision);
|
return print_string(m_putch, m_bufptr, &c, 1, state.left_pad, state.field_width, state.dot, state.precision, state.has_precision);
|
||||||
}
|
}
|
||||||
ALWAYS_INLINE int format_unrecognized(CharType format_op, const CharType* fmt, const ModifierState&, ArgumentListRefT) const
|
ALWAYS_INLINE int format_unrecognized(CharType format_op, CharType const* fmt, ModifierState const&, ArgumentListRefT) const
|
||||||
{
|
{
|
||||||
dbgln("printf_internal: Unimplemented format specifier {} (fmt: {})", format_op, fmt);
|
dbgln("printf_internal: Unimplemented format specifier {} (fmt: {})", format_op, fmt);
|
||||||
return 0;
|
return 0;
|
||||||
|
@ -436,7 +436,7 @@ struct PrintfImpl {
|
||||||
|
|
||||||
protected:
|
protected:
|
||||||
CharType*& m_bufptr;
|
CharType*& m_bufptr;
|
||||||
const int& m_nwritten;
|
int const& m_nwritten;
|
||||||
PutChFunc& m_putch;
|
PutChFunc& m_putch;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@ -454,14 +454,14 @@ struct VaArgNextArgument {
|
||||||
break;
|
break;
|
||||||
|
|
||||||
template<typename PutChFunc, template<typename T, typename U, template<typename X, typename Y> typename V, typename C = char> typename Impl = PrintfImpl, typename ArgumentListT = va_list, template<typename T, typename V = decltype(declval<ArgumentListT&>())> typename NextArgument = VaArgNextArgument, typename CharType = char>
|
template<typename PutChFunc, template<typename T, typename U, template<typename X, typename Y> typename V, typename C = char> typename Impl = PrintfImpl, typename ArgumentListT = va_list, template<typename T, typename V = decltype(declval<ArgumentListT&>())> typename NextArgument = VaArgNextArgument, typename CharType = char>
|
||||||
ALWAYS_INLINE int printf_internal(PutChFunc putch, IdentityType<CharType>* buffer, const CharType*& fmt, ArgumentListT ap)
|
ALWAYS_INLINE int printf_internal(PutChFunc putch, IdentityType<CharType>* buffer, CharType const*& fmt, ArgumentListT ap)
|
||||||
{
|
{
|
||||||
int ret = 0;
|
int ret = 0;
|
||||||
CharType* bufptr = buffer;
|
CharType* bufptr = buffer;
|
||||||
|
|
||||||
Impl<PutChFunc, ArgumentListT&, NextArgument, CharType> impl { putch, bufptr, ret };
|
Impl<PutChFunc, ArgumentListT&, NextArgument, CharType> impl { putch, bufptr, ret };
|
||||||
|
|
||||||
for (const CharType* p = fmt; *p; ++p) {
|
for (CharType const* p = fmt; *p; ++p) {
|
||||||
ModifierState state;
|
ModifierState state;
|
||||||
if (*p == '%' && *(p + 1)) {
|
if (*p == '%' && *(p + 1)) {
|
||||||
one_more:
|
one_more:
|
||||||
|
|
|
@ -28,7 +28,7 @@ public:
|
||||||
T const* operator->() const { return *this; }
|
T const* operator->() const { return *this; }
|
||||||
|
|
||||||
operator T*() { return reinterpret_cast<T*>(static_cast<FlatPtr>(m_ptr)); }
|
operator T*() { return reinterpret_cast<T*>(static_cast<FlatPtr>(m_ptr)); }
|
||||||
operator T const *() const { return reinterpret_cast<T const*>(static_cast<FlatPtr>(m_ptr)); }
|
operator T const*() const { return reinterpret_cast<T const*>(static_cast<FlatPtr>(m_ptr)); }
|
||||||
|
|
||||||
T& operator[](size_t index) { return static_cast<T*>(*this)[index]; }
|
T& operator[](size_t index) { return static_cast<T*>(*this)[index]; }
|
||||||
T const& operator[](size_t index) const { return static_cast<T const*>(*this)[index]; }
|
T const& operator[](size_t index) const { return static_cast<T const*>(*this)[index]; }
|
||||||
|
|
|
@ -404,7 +404,7 @@ template<typename TreeType, typename ElementType>
|
||||||
class RedBlackTreeIterator {
|
class RedBlackTreeIterator {
|
||||||
public:
|
public:
|
||||||
RedBlackTreeIterator() = default;
|
RedBlackTreeIterator() = default;
|
||||||
bool operator!=(const RedBlackTreeIterator& other) const { return m_node != other.m_node; }
|
bool operator!=(RedBlackTreeIterator const& other) const { return m_node != other.m_node; }
|
||||||
RedBlackTreeIterator& operator++()
|
RedBlackTreeIterator& operator++()
|
||||||
{
|
{
|
||||||
if (!m_node)
|
if (!m_node)
|
||||||
|
|
12
AK/RefPtr.h
12
AK/RefPtr.h
|
@ -264,8 +264,8 @@ public:
|
||||||
bool operator==(std::nullptr_t) const { return is_null(); }
|
bool operator==(std::nullptr_t) const { return is_null(); }
|
||||||
bool operator!=(std::nullptr_t) const { return !is_null(); }
|
bool operator!=(std::nullptr_t) const { return !is_null(); }
|
||||||
|
|
||||||
bool operator==(const RefPtr& other) const { return as_ptr() == other.as_ptr(); }
|
bool operator==(RefPtr const& other) const { return as_ptr() == other.as_ptr(); }
|
||||||
bool operator!=(const RefPtr& other) const { return as_ptr() != other.as_ptr(); }
|
bool operator!=(RefPtr const& other) const { return as_ptr() != other.as_ptr(); }
|
||||||
|
|
||||||
bool operator==(RefPtr& other) { return as_ptr() == other.as_ptr(); }
|
bool operator==(RefPtr& other) { return as_ptr() == other.as_ptr(); }
|
||||||
bool operator!=(RefPtr& other) { return as_ptr() != other.as_ptr(); }
|
bool operator!=(RefPtr& other) { return as_ptr() != other.as_ptr(); }
|
||||||
|
@ -305,18 +305,18 @@ template<typename T>
|
||||||
struct Traits<RefPtr<T>> : public GenericTraits<RefPtr<T>> {
|
struct Traits<RefPtr<T>> : public GenericTraits<RefPtr<T>> {
|
||||||
using PeekType = T*;
|
using PeekType = T*;
|
||||||
using ConstPeekType = const T*;
|
using ConstPeekType = const T*;
|
||||||
static unsigned hash(const RefPtr<T>& p) { return ptr_hash(p.ptr()); }
|
static unsigned hash(RefPtr<T> const& p) { return ptr_hash(p.ptr()); }
|
||||||
static bool equals(const RefPtr<T>& a, const RefPtr<T>& b) { return a.ptr() == b.ptr(); }
|
static bool equals(RefPtr<T> const& a, RefPtr<T> const& b) { return a.ptr() == b.ptr(); }
|
||||||
};
|
};
|
||||||
|
|
||||||
template<typename T, typename U>
|
template<typename T, typename U>
|
||||||
inline NonnullRefPtr<T> static_ptr_cast(const NonnullRefPtr<U>& ptr)
|
inline NonnullRefPtr<T> static_ptr_cast(NonnullRefPtr<U> const& ptr)
|
||||||
{
|
{
|
||||||
return NonnullRefPtr<T>(static_cast<const T&>(*ptr));
|
return NonnullRefPtr<T>(static_cast<const T&>(*ptr));
|
||||||
}
|
}
|
||||||
|
|
||||||
template<typename T, typename U, typename PtrTraits = RefPtrTraits<T>>
|
template<typename T, typename U, typename PtrTraits = RefPtrTraits<T>>
|
||||||
inline RefPtr<T> static_ptr_cast(const RefPtr<U>& ptr)
|
inline RefPtr<T> static_ptr_cast(RefPtr<U> const& ptr)
|
||||||
{
|
{
|
||||||
return RefPtr<T, PtrTraits>(static_cast<const T*>(ptr.ptr()));
|
return RefPtr<T, PtrTraits>(static_cast<const T*>(ptr.ptr()));
|
||||||
}
|
}
|
||||||
|
|
10
AK/Result.h
10
AK/Result.h
|
@ -17,7 +17,7 @@ public:
|
||||||
using ValueType = ValueT;
|
using ValueType = ValueT;
|
||||||
using ErrorType = ErrorT;
|
using ErrorType = ErrorT;
|
||||||
|
|
||||||
Result(const ValueType& res)
|
Result(ValueType const& res)
|
||||||
: m_result(res)
|
: m_result(res)
|
||||||
{
|
{
|
||||||
}
|
}
|
||||||
|
@ -27,7 +27,7 @@ public:
|
||||||
{
|
{
|
||||||
}
|
}
|
||||||
|
|
||||||
Result(const ErrorType& error)
|
Result(ErrorType const& error)
|
||||||
: m_error(error)
|
: m_error(error)
|
||||||
{
|
{
|
||||||
}
|
}
|
||||||
|
@ -38,7 +38,7 @@ public:
|
||||||
}
|
}
|
||||||
|
|
||||||
Result(Result&& other) = default;
|
Result(Result&& other) = default;
|
||||||
Result(const Result& other) = default;
|
Result(Result const& other) = default;
|
||||||
~Result() = default;
|
~Result() = default;
|
||||||
|
|
||||||
ValueType& value()
|
ValueType& value()
|
||||||
|
@ -78,7 +78,7 @@ public:
|
||||||
using ValueType = void;
|
using ValueType = void;
|
||||||
using ErrorType = ErrorT;
|
using ErrorType = ErrorT;
|
||||||
|
|
||||||
Result(const ErrorType& error)
|
Result(ErrorType const& error)
|
||||||
: m_error(error)
|
: m_error(error)
|
||||||
{
|
{
|
||||||
}
|
}
|
||||||
|
@ -90,7 +90,7 @@ public:
|
||||||
|
|
||||||
Result() = default;
|
Result() = default;
|
||||||
Result(Result&& other) = default;
|
Result(Result&& other) = default;
|
||||||
Result(const Result& other) = default;
|
Result(Result const& other) = default;
|
||||||
~Result() = default;
|
~Result() = default;
|
||||||
|
|
||||||
// For compatibility with TRY().
|
// For compatibility with TRY().
|
||||||
|
|
|
@ -55,7 +55,7 @@ public:
|
||||||
ALWAYS_INLINE constexpr ValueType const* operator->() const { return &m_container[m_index]; }
|
ALWAYS_INLINE constexpr ValueType const* operator->() const { return &m_container[m_index]; }
|
||||||
ALWAYS_INLINE constexpr ValueType* operator->() { return &m_container[m_index]; }
|
ALWAYS_INLINE constexpr ValueType* operator->() { return &m_container[m_index]; }
|
||||||
|
|
||||||
SimpleReverseIterator& operator=(const SimpleReverseIterator& other)
|
SimpleReverseIterator& operator=(SimpleReverseIterator const& other)
|
||||||
{
|
{
|
||||||
m_index = other.m_index;
|
m_index = other.m_index;
|
||||||
return *this;
|
return *this;
|
||||||
|
|
|
@ -15,7 +15,7 @@ namespace AK {
|
||||||
template<bool = true>
|
template<bool = true>
|
||||||
class ScopeLogger {
|
class ScopeLogger {
|
||||||
public:
|
public:
|
||||||
ScopeLogger(StringView extra, const SourceLocation& location = SourceLocation::current())
|
ScopeLogger(StringView extra, SourceLocation const& location = SourceLocation::current())
|
||||||
: m_location(location)
|
: m_location(location)
|
||||||
, m_extra(extra)
|
, m_extra(extra)
|
||||||
{
|
{
|
||||||
|
|
|
@ -18,7 +18,7 @@ template<typename ListType, typename ElementType>
|
||||||
class SinglyLinkedListIterator {
|
class SinglyLinkedListIterator {
|
||||||
public:
|
public:
|
||||||
SinglyLinkedListIterator() = default;
|
SinglyLinkedListIterator() = default;
|
||||||
bool operator!=(const SinglyLinkedListIterator& other) const { return m_node != other.m_node; }
|
bool operator!=(SinglyLinkedListIterator const& other) const { return m_node != other.m_node; }
|
||||||
SinglyLinkedListIterator& operator++()
|
SinglyLinkedListIterator& operator++()
|
||||||
{
|
{
|
||||||
if (m_removed)
|
if (m_removed)
|
||||||
|
@ -80,7 +80,7 @@ private:
|
||||||
|
|
||||||
public:
|
public:
|
||||||
SinglyLinkedList() = default;
|
SinglyLinkedList() = default;
|
||||||
SinglyLinkedList(const SinglyLinkedList& other) = delete;
|
SinglyLinkedList(SinglyLinkedList const& other) = delete;
|
||||||
SinglyLinkedList(SinglyLinkedList&& other)
|
SinglyLinkedList(SinglyLinkedList&& other)
|
||||||
: m_head(other.m_head)
|
: m_head(other.m_head)
|
||||||
, m_tail(other.m_tail)
|
, m_tail(other.m_tail)
|
||||||
|
@ -88,7 +88,7 @@ public:
|
||||||
other.m_head = nullptr;
|
other.m_head = nullptr;
|
||||||
other.m_tail = nullptr;
|
other.m_tail = nullptr;
|
||||||
}
|
}
|
||||||
SinglyLinkedList& operator=(const SinglyLinkedList& other) = delete;
|
SinglyLinkedList& operator=(SinglyLinkedList const& other) = delete;
|
||||||
SinglyLinkedList& operator=(SinglyLinkedList&&) = delete;
|
SinglyLinkedList& operator=(SinglyLinkedList&&) = delete;
|
||||||
|
|
||||||
~SinglyLinkedList() { clear(); }
|
~SinglyLinkedList() { clear(); }
|
||||||
|
@ -239,10 +239,10 @@ public:
|
||||||
|
|
||||||
private:
|
private:
|
||||||
Node* head() { return m_head; }
|
Node* head() { return m_head; }
|
||||||
const Node* head() const { return m_head; }
|
Node const* head() const { return m_head; }
|
||||||
|
|
||||||
Node* tail() { return m_tail; }
|
Node* tail() { return m_tail; }
|
||||||
const Node* tail() const { return m_tail; }
|
Node const* tail() const { return m_tail; }
|
||||||
|
|
||||||
Node* m_head { nullptr };
|
Node* m_head { nullptr };
|
||||||
Node* m_tail { nullptr };
|
Node* m_tail { nullptr };
|
||||||
|
|
|
@ -25,7 +25,7 @@ public:
|
||||||
, m_closing(closing)
|
, m_closing(closing)
|
||||||
{
|
{
|
||||||
}
|
}
|
||||||
explicit SourceGenerator(StringBuilder& builder, const MappingType& mapping, char opening = '@', char closing = '@')
|
explicit SourceGenerator(StringBuilder& builder, MappingType const& mapping, char opening = '@', char closing = '@')
|
||||||
: m_builder(builder)
|
: m_builder(builder)
|
||||||
, m_mapping(mapping)
|
, m_mapping(mapping)
|
||||||
, m_opening(opening)
|
, m_opening(opening)
|
||||||
|
@ -58,14 +58,14 @@ public:
|
||||||
while (!lexer.is_eof()) {
|
while (!lexer.is_eof()) {
|
||||||
// FIXME: It is a bit inconvenient, that 'consume_until' also consumes the 'stop' character, this makes
|
// FIXME: It is a bit inconvenient, that 'consume_until' also consumes the 'stop' character, this makes
|
||||||
// the method less generic because there is no way to check if the 'stop' character ever appeared.
|
// the method less generic because there is no way to check if the 'stop' character ever appeared.
|
||||||
const auto consume_until_without_consuming_stop_character = [&](char stop) {
|
auto const consume_until_without_consuming_stop_character = [&](char stop) {
|
||||||
return lexer.consume_while([&](char ch) { return ch != stop; });
|
return lexer.consume_while([&](char ch) { return ch != stop; });
|
||||||
};
|
};
|
||||||
|
|
||||||
m_builder.append(consume_until_without_consuming_stop_character(m_opening));
|
m_builder.append(consume_until_without_consuming_stop_character(m_opening));
|
||||||
|
|
||||||
if (lexer.consume_specific(m_opening)) {
|
if (lexer.consume_specific(m_opening)) {
|
||||||
const auto placeholder = consume_until_without_consuming_stop_character(m_closing);
|
auto const placeholder = consume_until_without_consuming_stop_character(m_closing);
|
||||||
|
|
||||||
if (!lexer.consume_specific(m_closing))
|
if (!lexer.consume_specific(m_closing))
|
||||||
VERIFY_NOT_REACHED();
|
VERIFY_NOT_REACHED();
|
||||||
|
|
|
@ -19,7 +19,7 @@ public:
|
||||||
[[nodiscard]] constexpr StringView filename() const { return StringView(m_file); }
|
[[nodiscard]] constexpr StringView filename() const { return StringView(m_file); }
|
||||||
[[nodiscard]] constexpr u32 line_number() const { return m_line; }
|
[[nodiscard]] constexpr u32 line_number() const { return m_line; }
|
||||||
|
|
||||||
[[nodiscard]] static constexpr SourceLocation current(const char* const file = __builtin_FILE(), u32 line = __builtin_LINE(), const char* const function = __builtin_FUNCTION())
|
[[nodiscard]] static constexpr SourceLocation current(char const* const file = __builtin_FILE(), u32 line = __builtin_LINE(), char const* const function = __builtin_FUNCTION())
|
||||||
{
|
{
|
||||||
return SourceLocation(file, line, function);
|
return SourceLocation(file, line, function);
|
||||||
}
|
}
|
||||||
|
@ -27,15 +27,15 @@ public:
|
||||||
constexpr SourceLocation() = default;
|
constexpr SourceLocation() = default;
|
||||||
|
|
||||||
private:
|
private:
|
||||||
constexpr SourceLocation(const char* const file, u32 line, const char* const function)
|
constexpr SourceLocation(char const* const file, u32 line, char const* const function)
|
||||||
: m_function(function)
|
: m_function(function)
|
||||||
, m_file(file)
|
, m_file(file)
|
||||||
, m_line(line)
|
, m_line(line)
|
||||||
{
|
{
|
||||||
}
|
}
|
||||||
|
|
||||||
const char* const m_function { nullptr };
|
char const* const m_function { nullptr };
|
||||||
const char* const m_file { nullptr };
|
char const* const m_file { nullptr };
|
||||||
const u32 m_line { 0 };
|
const u32 m_line { 0 };
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
|
@ -75,19 +75,19 @@ constexpr SizeType array_size(T (&)[N])
|
||||||
}
|
}
|
||||||
|
|
||||||
template<typename T>
|
template<typename T>
|
||||||
constexpr T min(const T& a, const IdentityType<T>& b)
|
constexpr T min(const T& a, IdentityType<T> const& b)
|
||||||
{
|
{
|
||||||
return b < a ? b : a;
|
return b < a ? b : a;
|
||||||
}
|
}
|
||||||
|
|
||||||
template<typename T>
|
template<typename T>
|
||||||
constexpr T max(const T& a, const IdentityType<T>& b)
|
constexpr T max(const T& a, IdentityType<T> const& b)
|
||||||
{
|
{
|
||||||
return a < b ? b : a;
|
return a < b ? b : a;
|
||||||
}
|
}
|
||||||
|
|
||||||
template<typename T>
|
template<typename T>
|
||||||
constexpr T clamp(const T& value, const IdentityType<T>& min, const IdentityType<T>& max)
|
constexpr T clamp(const T& value, IdentityType<T> const& min, IdentityType<T> const& max)
|
||||||
{
|
{
|
||||||
VERIFY(max >= min);
|
VERIFY(max >= min);
|
||||||
if (value > max)
|
if (value > max)
|
||||||
|
|
|
@ -16,12 +16,12 @@
|
||||||
|
|
||||||
namespace AK {
|
namespace AK {
|
||||||
|
|
||||||
bool String::operator==(const FlyString& fly_string) const
|
bool String::operator==(FlyString const& fly_string) const
|
||||||
{
|
{
|
||||||
return m_impl == fly_string.impl() || view() == fly_string.view();
|
return m_impl == fly_string.impl() || view() == fly_string.view();
|
||||||
}
|
}
|
||||||
|
|
||||||
bool String::operator==(const String& other) const
|
bool String::operator==(String const& other) const
|
||||||
{
|
{
|
||||||
return m_impl == other.impl() || view() == other.view();
|
return m_impl == other.impl() || view() == other.view();
|
||||||
}
|
}
|
||||||
|
@ -31,12 +31,12 @@ bool String::operator==(StringView other) const
|
||||||
return view() == other;
|
return view() == other;
|
||||||
}
|
}
|
||||||
|
|
||||||
bool String::operator<(const String& other) const
|
bool String::operator<(String const& other) const
|
||||||
{
|
{
|
||||||
return view() < other.view();
|
return view() < other.view();
|
||||||
}
|
}
|
||||||
|
|
||||||
bool String::operator>(const String& other) const
|
bool String::operator>(String const& other) const
|
||||||
{
|
{
|
||||||
return view() > other.view();
|
return view() > other.view();
|
||||||
}
|
}
|
||||||
|
@ -146,7 +146,7 @@ Vector<StringView> String::split_view(Function<bool(char)> separator, bool keep_
|
||||||
return v;
|
return v;
|
||||||
}
|
}
|
||||||
|
|
||||||
Vector<StringView> String::split_view(const char separator, bool keep_empty) const
|
Vector<StringView> String::split_view(char const separator, bool keep_empty) const
|
||||||
{
|
{
|
||||||
return split_view([separator](char ch) { return ch == separator; }, keep_empty);
|
return split_view([separator](char ch) { return ch == separator; }, keep_empty);
|
||||||
}
|
}
|
||||||
|
@ -358,7 +358,7 @@ String escape_html_entities(StringView html)
|
||||||
return builder.to_string();
|
return builder.to_string();
|
||||||
}
|
}
|
||||||
|
|
||||||
String::String(const FlyString& string)
|
String::String(FlyString const& string)
|
||||||
: m_impl(string.impl())
|
: m_impl(string.impl())
|
||||||
{
|
{
|
||||||
}
|
}
|
||||||
|
@ -387,27 +387,27 @@ String String::to_titlecase() const
|
||||||
return StringUtils::to_titlecase(*this);
|
return StringUtils::to_titlecase(*this);
|
||||||
}
|
}
|
||||||
|
|
||||||
bool operator<(const char* characters, const String& string)
|
bool operator<(char const* characters, String const& string)
|
||||||
{
|
{
|
||||||
return string.view() > characters;
|
return string.view() > characters;
|
||||||
}
|
}
|
||||||
|
|
||||||
bool operator>=(const char* characters, const String& string)
|
bool operator>=(char const* characters, String const& string)
|
||||||
{
|
{
|
||||||
return string.view() <= characters;
|
return string.view() <= characters;
|
||||||
}
|
}
|
||||||
|
|
||||||
bool operator>(const char* characters, const String& string)
|
bool operator>(char const* characters, String const& string)
|
||||||
{
|
{
|
||||||
return string.view() < characters;
|
return string.view() < characters;
|
||||||
}
|
}
|
||||||
|
|
||||||
bool operator<=(const char* characters, const String& string)
|
bool operator<=(char const* characters, String const& string)
|
||||||
{
|
{
|
||||||
return string.view() >= characters;
|
return string.view() >= characters;
|
||||||
}
|
}
|
||||||
|
|
||||||
bool String::operator==(const char* cstring) const
|
bool String::operator==(char const* cstring) const
|
||||||
{
|
{
|
||||||
return view() == cstring;
|
return view() == cstring;
|
||||||
}
|
}
|
||||||
|
|
68
AK/String.h
68
AK/String.h
|
@ -48,7 +48,7 @@ public:
|
||||||
{
|
{
|
||||||
}
|
}
|
||||||
|
|
||||||
String(const String& other)
|
String(String const& other)
|
||||||
: m_impl(const_cast<String&>(other).m_impl)
|
: m_impl(const_cast<String&>(other).m_impl)
|
||||||
{
|
{
|
||||||
}
|
}
|
||||||
|
@ -58,12 +58,12 @@ public:
|
||||||
{
|
{
|
||||||
}
|
}
|
||||||
|
|
||||||
String(const char* cstring, ShouldChomp shouldChomp = NoChomp)
|
String(char const* cstring, ShouldChomp shouldChomp = NoChomp)
|
||||||
: m_impl(StringImpl::create(cstring, shouldChomp))
|
: m_impl(StringImpl::create(cstring, shouldChomp))
|
||||||
{
|
{
|
||||||
}
|
}
|
||||||
|
|
||||||
String(const char* cstring, size_t length, ShouldChomp shouldChomp = NoChomp)
|
String(char const* cstring, size_t length, ShouldChomp shouldChomp = NoChomp)
|
||||||
: m_impl(StringImpl::create(cstring, length, shouldChomp))
|
: m_impl(StringImpl::create(cstring, length, shouldChomp))
|
||||||
{
|
{
|
||||||
}
|
}
|
||||||
|
@ -73,12 +73,12 @@ public:
|
||||||
{
|
{
|
||||||
}
|
}
|
||||||
|
|
||||||
String(const StringImpl& impl)
|
String(StringImpl const& impl)
|
||||||
: m_impl(const_cast<StringImpl&>(impl))
|
: m_impl(const_cast<StringImpl&>(impl))
|
||||||
{
|
{
|
||||||
}
|
}
|
||||||
|
|
||||||
String(const StringImpl* impl)
|
String(StringImpl const* impl)
|
||||||
: m_impl(const_cast<StringImpl*>(impl))
|
: m_impl(const_cast<StringImpl*>(impl))
|
||||||
{
|
{
|
||||||
}
|
}
|
||||||
|
@ -93,7 +93,7 @@ public:
|
||||||
{
|
{
|
||||||
}
|
}
|
||||||
|
|
||||||
String(const FlyString&);
|
String(FlyString const&);
|
||||||
|
|
||||||
[[nodiscard]] static String repeated(char, size_t count);
|
[[nodiscard]] static String repeated(char, size_t count);
|
||||||
[[nodiscard]] static String repeated(StringView, size_t count);
|
[[nodiscard]] static String repeated(StringView, size_t count);
|
||||||
|
@ -102,7 +102,7 @@ public:
|
||||||
[[nodiscard]] static String roman_number_from(size_t value);
|
[[nodiscard]] static String roman_number_from(size_t value);
|
||||||
|
|
||||||
template<class SeparatorType, class CollectionType>
|
template<class SeparatorType, class CollectionType>
|
||||||
[[nodiscard]] static String join(const SeparatorType& separator, const CollectionType& collection, StringView fmtstr = "{}"sv)
|
[[nodiscard]] static String join(SeparatorType const& separator, CollectionType const& collection, StringView fmtstr = "{}"sv)
|
||||||
{
|
{
|
||||||
StringBuilder builder;
|
StringBuilder builder;
|
||||||
builder.join(separator, collection, fmtstr);
|
builder.join(separator, collection, fmtstr);
|
||||||
|
@ -169,7 +169,7 @@ public:
|
||||||
[[nodiscard]] ALWAYS_INLINE bool is_empty() const { return length() == 0; }
|
[[nodiscard]] ALWAYS_INLINE bool is_empty() const { return length() == 0; }
|
||||||
[[nodiscard]] ALWAYS_INLINE size_t length() const { return m_impl ? m_impl->length() : 0; }
|
[[nodiscard]] ALWAYS_INLINE size_t length() const { return m_impl ? m_impl->length() : 0; }
|
||||||
// Includes NUL-terminator, if non-nullptr.
|
// Includes NUL-terminator, if non-nullptr.
|
||||||
[[nodiscard]] ALWAYS_INLINE const char* characters() const { return m_impl ? m_impl->characters() : nullptr; }
|
[[nodiscard]] ALWAYS_INLINE char const* characters() const { return m_impl ? m_impl->characters() : nullptr; }
|
||||||
|
|
||||||
[[nodiscard]] bool copy_characters_to_buffer(char* buffer, size_t buffer_size) const;
|
[[nodiscard]] bool copy_characters_to_buffer(char* buffer, size_t buffer_size) const;
|
||||||
|
|
||||||
|
@ -181,13 +181,13 @@ public:
|
||||||
return {};
|
return {};
|
||||||
}
|
}
|
||||||
|
|
||||||
[[nodiscard]] ALWAYS_INLINE const char& operator[](size_t i) const
|
[[nodiscard]] ALWAYS_INLINE char const& operator[](size_t i) const
|
||||||
{
|
{
|
||||||
VERIFY(!is_null());
|
VERIFY(!is_null());
|
||||||
return (*m_impl)[i];
|
return (*m_impl)[i];
|
||||||
}
|
}
|
||||||
|
|
||||||
using ConstIterator = SimpleIterator<const String, const char>;
|
using ConstIterator = SimpleIterator<const String, char const>;
|
||||||
|
|
||||||
[[nodiscard]] constexpr ConstIterator begin() const { return ConstIterator::begin(*this); }
|
[[nodiscard]] constexpr ConstIterator begin() const { return ConstIterator::begin(*this); }
|
||||||
[[nodiscard]] constexpr ConstIterator end() const { return ConstIterator::end(*this); }
|
[[nodiscard]] constexpr ConstIterator end() const { return ConstIterator::end(*this); }
|
||||||
|
@ -197,27 +197,27 @@ public:
|
||||||
[[nodiscard]] bool starts_with(char) const;
|
[[nodiscard]] bool starts_with(char) const;
|
||||||
[[nodiscard]] bool ends_with(char) const;
|
[[nodiscard]] bool ends_with(char) const;
|
||||||
|
|
||||||
bool operator==(const String&) const;
|
bool operator==(String const&) const;
|
||||||
bool operator!=(const String& other) const { return !(*this == other); }
|
bool operator!=(String const& other) const { return !(*this == other); }
|
||||||
|
|
||||||
bool operator==(StringView) const;
|
bool operator==(StringView) const;
|
||||||
bool operator!=(StringView other) const { return !(*this == other); }
|
bool operator!=(StringView other) const { return !(*this == other); }
|
||||||
|
|
||||||
bool operator==(const FlyString&) const;
|
bool operator==(FlyString const&) const;
|
||||||
bool operator!=(const FlyString& other) const { return !(*this == other); }
|
bool operator!=(FlyString const& other) const { return !(*this == other); }
|
||||||
|
|
||||||
bool operator<(const String&) const;
|
bool operator<(String const&) const;
|
||||||
bool operator<(const char*) const;
|
bool operator<(char const*) const;
|
||||||
bool operator>=(const String& other) const { return !(*this < other); }
|
bool operator>=(String const& other) const { return !(*this < other); }
|
||||||
bool operator>=(const char* other) const { return !(*this < other); }
|
bool operator>=(char const* other) const { return !(*this < other); }
|
||||||
|
|
||||||
bool operator>(const String&) const;
|
bool operator>(String const&) const;
|
||||||
bool operator>(const char*) const;
|
bool operator>(char const*) const;
|
||||||
bool operator<=(const String& other) const { return !(*this > other); }
|
bool operator<=(String const& other) const { return !(*this > other); }
|
||||||
bool operator<=(const char* other) const { return !(*this > other); }
|
bool operator<=(char const* other) const { return !(*this > other); }
|
||||||
|
|
||||||
bool operator==(const char* cstring) const;
|
bool operator==(char const* cstring) const;
|
||||||
bool operator!=(const char* cstring) const { return !(*this == cstring); }
|
bool operator!=(char const* cstring) const { return !(*this == cstring); }
|
||||||
|
|
||||||
[[nodiscard]] String isolated_copy() const;
|
[[nodiscard]] String isolated_copy() const;
|
||||||
|
|
||||||
|
@ -227,7 +227,7 @@ public:
|
||||||
}
|
}
|
||||||
|
|
||||||
[[nodiscard]] StringImpl* impl() { return m_impl.ptr(); }
|
[[nodiscard]] StringImpl* impl() { return m_impl.ptr(); }
|
||||||
[[nodiscard]] const StringImpl* impl() const { return m_impl.ptr(); }
|
[[nodiscard]] StringImpl const* impl() const { return m_impl.ptr(); }
|
||||||
|
|
||||||
String& operator=(String&& other)
|
String& operator=(String&& other)
|
||||||
{
|
{
|
||||||
|
@ -236,7 +236,7 @@ public:
|
||||||
return *this;
|
return *this;
|
||||||
}
|
}
|
||||||
|
|
||||||
String& operator=(const String& other)
|
String& operator=(String const& other)
|
||||||
{
|
{
|
||||||
if (this != &other)
|
if (this != &other)
|
||||||
m_impl = const_cast<String&>(other).m_impl;
|
m_impl = const_cast<String&>(other).m_impl;
|
||||||
|
@ -265,17 +265,17 @@ public:
|
||||||
[[nodiscard]] ByteBuffer to_byte_buffer() const;
|
[[nodiscard]] ByteBuffer to_byte_buffer() const;
|
||||||
|
|
||||||
template<typename BufferType>
|
template<typename BufferType>
|
||||||
[[nodiscard]] static String copy(const BufferType& buffer, ShouldChomp should_chomp = NoChomp)
|
[[nodiscard]] static String copy(BufferType const& buffer, ShouldChomp should_chomp = NoChomp)
|
||||||
{
|
{
|
||||||
if (buffer.is_empty())
|
if (buffer.is_empty())
|
||||||
return empty();
|
return empty();
|
||||||
return String((const char*)buffer.data(), buffer.size(), should_chomp);
|
return String((char const*)buffer.data(), buffer.size(), should_chomp);
|
||||||
}
|
}
|
||||||
|
|
||||||
[[nodiscard]] static String vformatted(StringView fmtstr, TypeErasedFormatParams&);
|
[[nodiscard]] static String vformatted(StringView fmtstr, TypeErasedFormatParams&);
|
||||||
|
|
||||||
template<typename... Parameters>
|
template<typename... Parameters>
|
||||||
[[nodiscard]] static String formatted(CheckedFormatString<Parameters...>&& fmtstr, const Parameters&... parameters)
|
[[nodiscard]] static String formatted(CheckedFormatString<Parameters...>&& fmtstr, Parameters const&... parameters)
|
||||||
{
|
{
|
||||||
VariadicFormatParams variadic_format_parameters { parameters... };
|
VariadicFormatParams variadic_format_parameters { parameters... };
|
||||||
return vformatted(fmtstr.view(), variadic_format_parameters);
|
return vformatted(fmtstr.view(), variadic_format_parameters);
|
||||||
|
@ -320,7 +320,7 @@ private:
|
||||||
|
|
||||||
template<>
|
template<>
|
||||||
struct Traits<String> : public GenericTraits<String> {
|
struct Traits<String> : public GenericTraits<String> {
|
||||||
static unsigned hash(const String& s) { return s.impl() ? s.impl()->hash() : 0; }
|
static unsigned hash(String const& s) { return s.impl() ? s.impl()->hash() : 0; }
|
||||||
};
|
};
|
||||||
|
|
||||||
struct CaseInsensitiveStringTraits : public Traits<String> {
|
struct CaseInsensitiveStringTraits : public Traits<String> {
|
||||||
|
@ -328,10 +328,10 @@ struct CaseInsensitiveStringTraits : public Traits<String> {
|
||||||
static bool equals(String const& a, String const& b) { return a.equals_ignoring_case(b); }
|
static bool equals(String const& a, String const& b) { return a.equals_ignoring_case(b); }
|
||||||
};
|
};
|
||||||
|
|
||||||
bool operator<(const char*, const String&);
|
bool operator<(char const*, String const&);
|
||||||
bool operator>=(const char*, const String&);
|
bool operator>=(char const*, String const&);
|
||||||
bool operator>(const char*, const String&);
|
bool operator>(char const*, String const&);
|
||||||
bool operator<=(const char*, const String&);
|
bool operator<=(char const*, String const&);
|
||||||
|
|
||||||
String escape_html_entities(StringView html);
|
String escape_html_entities(StringView html);
|
||||||
|
|
||||||
|
|
|
@ -48,7 +48,7 @@ NonnullRefPtr<StringImpl> StringImpl::create_uninitialized(size_t length, char*&
|
||||||
return new_stringimpl;
|
return new_stringimpl;
|
||||||
}
|
}
|
||||||
|
|
||||||
RefPtr<StringImpl> StringImpl::create(const char* cstring, size_t length, ShouldChomp should_chomp)
|
RefPtr<StringImpl> StringImpl::create(char const* cstring, size_t length, ShouldChomp should_chomp)
|
||||||
{
|
{
|
||||||
if (!cstring)
|
if (!cstring)
|
||||||
return nullptr;
|
return nullptr;
|
||||||
|
@ -73,7 +73,7 @@ RefPtr<StringImpl> StringImpl::create(const char* cstring, size_t length, Should
|
||||||
return new_stringimpl;
|
return new_stringimpl;
|
||||||
}
|
}
|
||||||
|
|
||||||
RefPtr<StringImpl> StringImpl::create(const char* cstring, ShouldChomp shouldChomp)
|
RefPtr<StringImpl> StringImpl::create(char const* cstring, ShouldChomp shouldChomp)
|
||||||
{
|
{
|
||||||
if (!cstring)
|
if (!cstring)
|
||||||
return nullptr;
|
return nullptr;
|
||||||
|
@ -86,7 +86,7 @@ RefPtr<StringImpl> StringImpl::create(const char* cstring, ShouldChomp shouldCho
|
||||||
|
|
||||||
RefPtr<StringImpl> StringImpl::create(ReadonlyBytes bytes, ShouldChomp shouldChomp)
|
RefPtr<StringImpl> StringImpl::create(ReadonlyBytes bytes, ShouldChomp shouldChomp)
|
||||||
{
|
{
|
||||||
return StringImpl::create(reinterpret_cast<const char*>(bytes.data()), bytes.size(), shouldChomp);
|
return StringImpl::create(reinterpret_cast<char const*>(bytes.data()), bytes.size(), shouldChomp);
|
||||||
}
|
}
|
||||||
|
|
||||||
RefPtr<StringImpl> StringImpl::create_lowercased(char const* cstring, size_t length)
|
RefPtr<StringImpl> StringImpl::create_lowercased(char const* cstring, size_t length)
|
||||||
|
|
|
@ -25,8 +25,8 @@ size_t allocation_size_for_stringimpl(size_t length);
|
||||||
class StringImpl : public RefCounted<StringImpl> {
|
class StringImpl : public RefCounted<StringImpl> {
|
||||||
public:
|
public:
|
||||||
static NonnullRefPtr<StringImpl> create_uninitialized(size_t length, char*& buffer);
|
static NonnullRefPtr<StringImpl> create_uninitialized(size_t length, char*& buffer);
|
||||||
static RefPtr<StringImpl> create(const char* cstring, ShouldChomp = NoChomp);
|
static RefPtr<StringImpl> create(char const* cstring, ShouldChomp = NoChomp);
|
||||||
static RefPtr<StringImpl> create(const char* cstring, size_t length, ShouldChomp = NoChomp);
|
static RefPtr<StringImpl> create(char const* cstring, size_t length, ShouldChomp = NoChomp);
|
||||||
static RefPtr<StringImpl> create(ReadonlyBytes, ShouldChomp = NoChomp);
|
static RefPtr<StringImpl> create(ReadonlyBytes, ShouldChomp = NoChomp);
|
||||||
static RefPtr<StringImpl> create_lowercased(char const* cstring, size_t length);
|
static RefPtr<StringImpl> create_lowercased(char const* cstring, size_t length);
|
||||||
static RefPtr<StringImpl> create_uppercased(char const* cstring, size_t length);
|
static RefPtr<StringImpl> create_uppercased(char const* cstring, size_t length);
|
||||||
|
@ -45,18 +45,18 @@ public:
|
||||||
|
|
||||||
size_t length() const { return m_length; }
|
size_t length() const { return m_length; }
|
||||||
// Includes NUL-terminator.
|
// Includes NUL-terminator.
|
||||||
const char* characters() const { return &m_inline_buffer[0]; }
|
char const* characters() const { return &m_inline_buffer[0]; }
|
||||||
|
|
||||||
ALWAYS_INLINE ReadonlyBytes bytes() const { return { characters(), length() }; }
|
ALWAYS_INLINE ReadonlyBytes bytes() const { return { characters(), length() }; }
|
||||||
ALWAYS_INLINE StringView view() const { return { characters(), length() }; }
|
ALWAYS_INLINE StringView view() const { return { characters(), length() }; }
|
||||||
|
|
||||||
const char& operator[](size_t i) const
|
char const& operator[](size_t i) const
|
||||||
{
|
{
|
||||||
VERIFY(i < m_length);
|
VERIFY(i < m_length);
|
||||||
return characters()[i];
|
return characters()[i];
|
||||||
}
|
}
|
||||||
|
|
||||||
bool operator==(const StringImpl& other) const
|
bool operator==(StringImpl const& other) const
|
||||||
{
|
{
|
||||||
if (length() != other.length())
|
if (length() != other.length())
|
||||||
return false;
|
return false;
|
||||||
|
|
|
@ -37,11 +37,11 @@ bool matches(StringView str, StringView mask, CaseSensitivity case_sensitivity,
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
const char* string_ptr = str.characters_without_null_termination();
|
char const* string_ptr = str.characters_without_null_termination();
|
||||||
const char* string_start = str.characters_without_null_termination();
|
char const* string_start = str.characters_without_null_termination();
|
||||||
const char* string_end = string_ptr + str.length();
|
char const* string_end = string_ptr + str.length();
|
||||||
const char* mask_ptr = mask.characters_without_null_termination();
|
char const* mask_ptr = mask.characters_without_null_termination();
|
||||||
const char* mask_end = mask_ptr + mask.length();
|
char const* mask_end = mask_ptr + mask.length();
|
||||||
|
|
||||||
while (string_ptr < string_end && mask_ptr < mask_end) {
|
while (string_ptr < string_end && mask_ptr < mask_end) {
|
||||||
auto string_start_ptr = string_ptr;
|
auto string_start_ptr = string_ptr;
|
||||||
|
@ -92,7 +92,7 @@ Optional<T> convert_to_int(StringView str, TrimWhitespace trim_whitespace)
|
||||||
|
|
||||||
T sign = 1;
|
T sign = 1;
|
||||||
size_t i = 0;
|
size_t i = 0;
|
||||||
const auto characters = string.characters_without_null_termination();
|
auto const characters = string.characters_without_null_termination();
|
||||||
|
|
||||||
if (characters[0] == '-' || characters[0] == '+') {
|
if (characters[0] == '-' || characters[0] == '+') {
|
||||||
if (string.length() == 1)
|
if (string.length() == 1)
|
||||||
|
@ -132,7 +132,7 @@ Optional<T> convert_to_uint(StringView str, TrimWhitespace trim_whitespace)
|
||||||
return {};
|
return {};
|
||||||
|
|
||||||
T value = 0;
|
T value = 0;
|
||||||
const auto characters = string.characters_without_null_termination();
|
auto const characters = string.characters_without_null_termination();
|
||||||
|
|
||||||
for (size_t i = 0; i < string.length(); i++) {
|
for (size_t i = 0; i < string.length(); i++) {
|
||||||
if (characters[i] < '0' || characters[i] > '9')
|
if (characters[i] < '0' || characters[i] > '9')
|
||||||
|
@ -165,7 +165,7 @@ Optional<T> convert_to_uint_from_hex(StringView str, TrimWhitespace trim_whitesp
|
||||||
return {};
|
return {};
|
||||||
|
|
||||||
T value = 0;
|
T value = 0;
|
||||||
const auto count = string.length();
|
auto const count = string.length();
|
||||||
const T upper_bound = NumericLimits<T>::max();
|
const T upper_bound = NumericLimits<T>::max();
|
||||||
|
|
||||||
for (size_t i = 0; i < count; i++) {
|
for (size_t i = 0; i < count; i++) {
|
||||||
|
@ -204,7 +204,7 @@ Optional<T> convert_to_uint_from_octal(StringView str, TrimWhitespace trim_white
|
||||||
return {};
|
return {};
|
||||||
|
|
||||||
T value = 0;
|
T value = 0;
|
||||||
const auto count = string.length();
|
auto const count = string.length();
|
||||||
const T upper_bound = NumericLimits<T>::max();
|
const T upper_bound = NumericLimits<T>::max();
|
||||||
|
|
||||||
for (size_t i = 0; i < count; i++) {
|
for (size_t i = 0; i < count; i++) {
|
||||||
|
|
|
@ -37,11 +37,11 @@ struct MaskSpan {
|
||||||
size_t start;
|
size_t start;
|
||||||
size_t length;
|
size_t length;
|
||||||
|
|
||||||
bool operator==(const MaskSpan& other) const
|
bool operator==(MaskSpan const& other) const
|
||||||
{
|
{
|
||||||
return start == other.start && length == other.length;
|
return start == other.start && length == other.length;
|
||||||
}
|
}
|
||||||
bool operator!=(const MaskSpan& other) const
|
bool operator!=(MaskSpan const& other) const
|
||||||
{
|
{
|
||||||
return !(*this == other);
|
return !(*this == other);
|
||||||
}
|
}
|
||||||
|
|
|
@ -20,26 +20,26 @@
|
||||||
namespace AK {
|
namespace AK {
|
||||||
|
|
||||||
#ifndef KERNEL
|
#ifndef KERNEL
|
||||||
StringView::StringView(const String& string)
|
StringView::StringView(String const& string)
|
||||||
: m_characters(string.characters())
|
: m_characters(string.characters())
|
||||||
, m_length(string.length())
|
, m_length(string.length())
|
||||||
{
|
{
|
||||||
}
|
}
|
||||||
|
|
||||||
StringView::StringView(const FlyString& string)
|
StringView::StringView(FlyString const& string)
|
||||||
: m_characters(string.characters())
|
: m_characters(string.characters())
|
||||||
, m_length(string.length())
|
, m_length(string.length())
|
||||||
{
|
{
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
StringView::StringView(const ByteBuffer& buffer)
|
StringView::StringView(ByteBuffer const& buffer)
|
||||||
: m_characters((const char*)buffer.data())
|
: m_characters((char const*)buffer.data())
|
||||||
, m_length(buffer.size())
|
, m_length(buffer.size())
|
||||||
{
|
{
|
||||||
}
|
}
|
||||||
|
|
||||||
Vector<StringView> StringView::split_view(const char separator, bool keep_empty) const
|
Vector<StringView> StringView::split_view(char const separator, bool keep_empty) const
|
||||||
{
|
{
|
||||||
StringView seperator_view { &separator, 1 };
|
StringView seperator_view { &separator, 1 };
|
||||||
return split_view(seperator_view, keep_empty);
|
return split_view(seperator_view, keep_empty);
|
||||||
|
@ -166,7 +166,7 @@ String StringView::to_titlecase_string() const
|
||||||
|
|
||||||
StringView StringView::substring_view_starting_from_substring(StringView substring) const
|
StringView StringView::substring_view_starting_from_substring(StringView substring) const
|
||||||
{
|
{
|
||||||
const char* remaining_characters = substring.characters_without_null_termination();
|
char const* remaining_characters = substring.characters_without_null_termination();
|
||||||
VERIFY(remaining_characters >= m_characters);
|
VERIFY(remaining_characters >= m_characters);
|
||||||
VERIFY(remaining_characters <= m_characters + m_length);
|
VERIFY(remaining_characters <= m_characters + m_length);
|
||||||
size_t remaining_length = m_length - (remaining_characters - m_characters);
|
size_t remaining_length = m_length - (remaining_characters - m_characters);
|
||||||
|
@ -175,7 +175,7 @@ StringView StringView::substring_view_starting_from_substring(StringView substri
|
||||||
|
|
||||||
StringView StringView::substring_view_starting_after_substring(StringView substring) const
|
StringView StringView::substring_view_starting_after_substring(StringView substring) const
|
||||||
{
|
{
|
||||||
const char* remaining_characters = substring.characters_without_null_termination() + substring.length();
|
char const* remaining_characters = substring.characters_without_null_termination() + substring.length();
|
||||||
VERIFY(remaining_characters >= m_characters);
|
VERIFY(remaining_characters >= m_characters);
|
||||||
VERIFY(remaining_characters <= m_characters + m_length);
|
VERIFY(remaining_characters <= m_characters + m_length);
|
||||||
size_t remaining_length = m_length - (remaining_characters - m_characters);
|
size_t remaining_length = m_length - (remaining_characters - m_characters);
|
||||||
|
@ -209,7 +209,7 @@ template Optional<long> StringView::to_uint() const;
|
||||||
template Optional<long long> StringView::to_uint() const;
|
template Optional<long long> StringView::to_uint() const;
|
||||||
|
|
||||||
#ifndef KERNEL
|
#ifndef KERNEL
|
||||||
bool StringView::operator==(const String& string) const
|
bool StringView::operator==(String const& string) const
|
||||||
{
|
{
|
||||||
return *this == string.view();
|
return *this == string.view();
|
||||||
}
|
}
|
||||||
|
|
|
@ -20,34 +20,34 @@ namespace AK {
|
||||||
class StringView {
|
class StringView {
|
||||||
public:
|
public:
|
||||||
ALWAYS_INLINE constexpr StringView() = default;
|
ALWAYS_INLINE constexpr StringView() = default;
|
||||||
ALWAYS_INLINE constexpr StringView(const char* characters, size_t length)
|
ALWAYS_INLINE constexpr StringView(char const* characters, size_t length)
|
||||||
: m_characters(characters)
|
: m_characters(characters)
|
||||||
, m_length(length)
|
, m_length(length)
|
||||||
{
|
{
|
||||||
if (!is_constant_evaluated())
|
if (!is_constant_evaluated())
|
||||||
VERIFY(!Checked<uintptr_t>::addition_would_overflow((uintptr_t)characters, length));
|
VERIFY(!Checked<uintptr_t>::addition_would_overflow((uintptr_t)characters, length));
|
||||||
}
|
}
|
||||||
ALWAYS_INLINE StringView(const unsigned char* characters, size_t length)
|
ALWAYS_INLINE StringView(unsigned char const* characters, size_t length)
|
||||||
: m_characters((const char*)characters)
|
: m_characters((char const*)characters)
|
||||||
, m_length(length)
|
, m_length(length)
|
||||||
{
|
{
|
||||||
VERIFY(!Checked<uintptr_t>::addition_would_overflow((uintptr_t)characters, length));
|
VERIFY(!Checked<uintptr_t>::addition_would_overflow((uintptr_t)characters, length));
|
||||||
}
|
}
|
||||||
ALWAYS_INLINE constexpr StringView(const char* cstring)
|
ALWAYS_INLINE constexpr StringView(char const* cstring)
|
||||||
: m_characters(cstring)
|
: m_characters(cstring)
|
||||||
, m_length(cstring ? __builtin_strlen(cstring) : 0)
|
, m_length(cstring ? __builtin_strlen(cstring) : 0)
|
||||||
{
|
{
|
||||||
}
|
}
|
||||||
ALWAYS_INLINE StringView(ReadonlyBytes bytes)
|
ALWAYS_INLINE StringView(ReadonlyBytes bytes)
|
||||||
: m_characters(reinterpret_cast<const char*>(bytes.data()))
|
: m_characters(reinterpret_cast<char const*>(bytes.data()))
|
||||||
, m_length(bytes.size())
|
, m_length(bytes.size())
|
||||||
{
|
{
|
||||||
}
|
}
|
||||||
|
|
||||||
StringView(const ByteBuffer&);
|
StringView(ByteBuffer const&);
|
||||||
#ifndef KERNEL
|
#ifndef KERNEL
|
||||||
StringView(const String&);
|
StringView(String const&);
|
||||||
StringView(const FlyString&);
|
StringView(FlyString const&);
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
explicit StringView(ByteBuffer&&) = delete;
|
explicit StringView(ByteBuffer&&) = delete;
|
||||||
|
@ -67,9 +67,9 @@ public:
|
||||||
|
|
||||||
[[nodiscard]] ReadonlyBytes bytes() const { return { m_characters, m_length }; }
|
[[nodiscard]] ReadonlyBytes bytes() const { return { m_characters, m_length }; }
|
||||||
|
|
||||||
constexpr const char& operator[](size_t index) const { return m_characters[index]; }
|
constexpr char const& operator[](size_t index) const { return m_characters[index]; }
|
||||||
|
|
||||||
using ConstIterator = SimpleIterator<const StringView, const char>;
|
using ConstIterator = SimpleIterator<const StringView, char const>;
|
||||||
|
|
||||||
[[nodiscard]] constexpr ConstIterator begin() const { return ConstIterator::begin(*this); }
|
[[nodiscard]] constexpr ConstIterator begin() const { return ConstIterator::begin(*this); }
|
||||||
[[nodiscard]] constexpr ConstIterator end() const { return ConstIterator::end(*this); }
|
[[nodiscard]] constexpr ConstIterator end() const { return ConstIterator::end(*this); }
|
||||||
|
@ -192,14 +192,14 @@ public:
|
||||||
[[nodiscard]] StringView substring_view_starting_from_substring(StringView substring) const;
|
[[nodiscard]] StringView substring_view_starting_from_substring(StringView substring) const;
|
||||||
[[nodiscard]] StringView substring_view_starting_after_substring(StringView substring) const;
|
[[nodiscard]] StringView substring_view_starting_after_substring(StringView substring) const;
|
||||||
|
|
||||||
constexpr bool operator==(const char* cstring) const
|
constexpr bool operator==(char const* cstring) const
|
||||||
{
|
{
|
||||||
if (is_null())
|
if (is_null())
|
||||||
return cstring == nullptr;
|
return cstring == nullptr;
|
||||||
if (!cstring)
|
if (!cstring)
|
||||||
return false;
|
return false;
|
||||||
// NOTE: `m_characters` is not guaranteed to be null-terminated, but `cstring` is.
|
// NOTE: `m_characters` is not guaranteed to be null-terminated, but `cstring` is.
|
||||||
const char* cp = cstring;
|
char const* cp = cstring;
|
||||||
for (size_t i = 0; i < m_length; ++i) {
|
for (size_t i = 0; i < m_length; ++i) {
|
||||||
if (*cp == '\0')
|
if (*cp == '\0')
|
||||||
return false;
|
return false;
|
||||||
|
@ -209,13 +209,13 @@ public:
|
||||||
return *cp == '\0';
|
return *cp == '\0';
|
||||||
}
|
}
|
||||||
|
|
||||||
constexpr bool operator!=(const char* cstring) const
|
constexpr bool operator!=(char const* cstring) const
|
||||||
{
|
{
|
||||||
return !(*this == cstring);
|
return !(*this == cstring);
|
||||||
}
|
}
|
||||||
|
|
||||||
#ifndef KERNEL
|
#ifndef KERNEL
|
||||||
bool operator==(const String&) const;
|
bool operator==(String const&) const;
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
[[nodiscard]] constexpr int compare(StringView other) const
|
[[nodiscard]] constexpr int compare(StringView other) const
|
||||||
|
@ -293,7 +293,7 @@ public:
|
||||||
|
|
||||||
private:
|
private:
|
||||||
friend class String;
|
friend class String;
|
||||||
const char* m_characters { nullptr };
|
char const* m_characters { nullptr };
|
||||||
size_t m_length { 0 };
|
size_t m_length { 0 };
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@ -321,7 +321,7 @@ struct CaseInsensitiveStringViewTraits : public Traits<StringView> {
|
||||||
# define AK_STRING_VIEW_LITERAL_CONSTEVAL consteval
|
# define AK_STRING_VIEW_LITERAL_CONSTEVAL consteval
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
[[nodiscard]] ALWAYS_INLINE AK_STRING_VIEW_LITERAL_CONSTEVAL AK::StringView operator"" sv(const char* cstring, size_t length)
|
[[nodiscard]] ALWAYS_INLINE AK_STRING_VIEW_LITERAL_CONSTEVAL AK::StringView operator"" sv(char const* cstring, size_t length)
|
||||||
{
|
{
|
||||||
return AK::StringView(cstring, length);
|
return AK::StringView(cstring, length);
|
||||||
}
|
}
|
||||||
|
|
16
AK/Time.cpp
16
AK/Time.cpp
|
@ -182,7 +182,7 @@ timeval Time::to_timeval() const
|
||||||
return { static_cast<time_t>(m_seconds), static_cast<suseconds_t>(m_nanoseconds) / 1000 };
|
return { static_cast<time_t>(m_seconds), static_cast<suseconds_t>(m_nanoseconds) / 1000 };
|
||||||
}
|
}
|
||||||
|
|
||||||
Time Time::operator+(const Time& other) const
|
Time Time::operator+(Time const& other) const
|
||||||
{
|
{
|
||||||
VERIFY(m_nanoseconds < 1'000'000'000);
|
VERIFY(m_nanoseconds < 1'000'000'000);
|
||||||
VERIFY(other.m_nanoseconds < 1'000'000'000);
|
VERIFY(other.m_nanoseconds < 1'000'000'000);
|
||||||
|
@ -222,13 +222,13 @@ Time Time::operator+(const Time& other) const
|
||||||
return Time { new_secs.value(), new_nsecs };
|
return Time { new_secs.value(), new_nsecs };
|
||||||
}
|
}
|
||||||
|
|
||||||
Time& Time::operator+=(const Time& other)
|
Time& Time::operator+=(Time const& other)
|
||||||
{
|
{
|
||||||
*this = *this + other;
|
*this = *this + other;
|
||||||
return *this;
|
return *this;
|
||||||
}
|
}
|
||||||
|
|
||||||
Time Time::operator-(const Time& other) const
|
Time Time::operator-(Time const& other) const
|
||||||
{
|
{
|
||||||
VERIFY(m_nanoseconds < 1'000'000'000);
|
VERIFY(m_nanoseconds < 1'000'000'000);
|
||||||
VERIFY(other.m_nanoseconds < 1'000'000'000);
|
VERIFY(other.m_nanoseconds < 1'000'000'000);
|
||||||
|
@ -247,28 +247,28 @@ Time Time::operator-(const Time& other) const
|
||||||
return Time { (m_seconds + 0x4000'0000'0000'0000) + 0x4000'0000'0000'0000, m_nanoseconds };
|
return Time { (m_seconds + 0x4000'0000'0000'0000) + 0x4000'0000'0000'0000, m_nanoseconds };
|
||||||
}
|
}
|
||||||
|
|
||||||
Time& Time::operator-=(const Time& other)
|
Time& Time::operator-=(Time const& other)
|
||||||
{
|
{
|
||||||
*this = *this - other;
|
*this = *this - other;
|
||||||
return *this;
|
return *this;
|
||||||
}
|
}
|
||||||
|
|
||||||
bool Time::operator<(const Time& other) const
|
bool Time::operator<(Time const& other) const
|
||||||
{
|
{
|
||||||
return m_seconds < other.m_seconds || (m_seconds == other.m_seconds && m_nanoseconds < other.m_nanoseconds);
|
return m_seconds < other.m_seconds || (m_seconds == other.m_seconds && m_nanoseconds < other.m_nanoseconds);
|
||||||
}
|
}
|
||||||
|
|
||||||
bool Time::operator<=(const Time& other) const
|
bool Time::operator<=(Time const& other) const
|
||||||
{
|
{
|
||||||
return m_seconds < other.m_seconds || (m_seconds == other.m_seconds && m_nanoseconds <= other.m_nanoseconds);
|
return m_seconds < other.m_seconds || (m_seconds == other.m_seconds && m_nanoseconds <= other.m_nanoseconds);
|
||||||
}
|
}
|
||||||
|
|
||||||
bool Time::operator>(const Time& other) const
|
bool Time::operator>(Time const& other) const
|
||||||
{
|
{
|
||||||
return m_seconds > other.m_seconds || (m_seconds == other.m_seconds && m_nanoseconds > other.m_nanoseconds);
|
return m_seconds > other.m_seconds || (m_seconds == other.m_seconds && m_nanoseconds > other.m_nanoseconds);
|
||||||
}
|
}
|
||||||
|
|
||||||
bool Time::operator>=(const Time& other) const
|
bool Time::operator>=(Time const& other) const
|
||||||
{
|
{
|
||||||
return m_seconds > other.m_seconds || (m_seconds == other.m_seconds && m_nanoseconds >= other.m_nanoseconds);
|
return m_seconds > other.m_seconds || (m_seconds == other.m_seconds && m_nanoseconds >= other.m_nanoseconds);
|
||||||
}
|
}
|
||||||
|
|
38
AK/Time.h
38
AK/Time.h
|
@ -106,8 +106,8 @@ constexpr i64 seconds_since_epoch_to_year(i64 seconds)
|
||||||
class Time {
|
class Time {
|
||||||
public:
|
public:
|
||||||
Time() = default;
|
Time() = default;
|
||||||
Time(const Time&) = default;
|
Time(Time const&) = default;
|
||||||
Time& operator=(const Time&) = default;
|
Time& operator=(Time const&) = default;
|
||||||
|
|
||||||
Time(Time&& other)
|
Time(Time&& other)
|
||||||
: m_seconds(exchange(other.m_seconds, 0))
|
: m_seconds(exchange(other.m_seconds, 0))
|
||||||
|
@ -218,16 +218,16 @@ public:
|
||||||
[[nodiscard]] bool is_zero() const { return (m_seconds == 0) && (m_nanoseconds == 0); }
|
[[nodiscard]] bool is_zero() const { return (m_seconds == 0) && (m_nanoseconds == 0); }
|
||||||
[[nodiscard]] bool is_negative() const { return m_seconds < 0; }
|
[[nodiscard]] bool is_negative() const { return m_seconds < 0; }
|
||||||
|
|
||||||
bool operator==(const Time& other) const { return this->m_seconds == other.m_seconds && this->m_nanoseconds == other.m_nanoseconds; }
|
bool operator==(Time const& other) const { return this->m_seconds == other.m_seconds && this->m_nanoseconds == other.m_nanoseconds; }
|
||||||
bool operator!=(const Time& other) const { return !(*this == other); }
|
bool operator!=(Time const& other) const { return !(*this == other); }
|
||||||
Time operator+(const Time& other) const;
|
Time operator+(Time const& other) const;
|
||||||
Time& operator+=(const Time& other);
|
Time& operator+=(Time const& other);
|
||||||
Time operator-(const Time& other) const;
|
Time operator-(Time const& other) const;
|
||||||
Time& operator-=(const Time& other);
|
Time& operator-=(Time const& other);
|
||||||
bool operator<(const Time& other) const;
|
bool operator<(Time const& other) const;
|
||||||
bool operator<=(const Time& other) const;
|
bool operator<=(Time const& other) const;
|
||||||
bool operator>(const Time& other) const;
|
bool operator>(Time const& other) const;
|
||||||
bool operator>=(const Time& other) const;
|
bool operator>=(Time const& other) const;
|
||||||
|
|
||||||
private:
|
private:
|
||||||
constexpr explicit Time(i64 seconds, u32 nanoseconds)
|
constexpr explicit Time(i64 seconds, u32 nanoseconds)
|
||||||
|
@ -243,7 +243,7 @@ private:
|
||||||
};
|
};
|
||||||
|
|
||||||
template<typename TimevalType>
|
template<typename TimevalType>
|
||||||
inline void timeval_sub(const TimevalType& a, const TimevalType& b, TimevalType& result)
|
inline void timeval_sub(TimevalType const& a, TimevalType const& b, TimevalType& result)
|
||||||
{
|
{
|
||||||
result.tv_sec = a.tv_sec - b.tv_sec;
|
result.tv_sec = a.tv_sec - b.tv_sec;
|
||||||
result.tv_usec = a.tv_usec - b.tv_usec;
|
result.tv_usec = a.tv_usec - b.tv_usec;
|
||||||
|
@ -254,7 +254,7 @@ inline void timeval_sub(const TimevalType& a, const TimevalType& b, TimevalType&
|
||||||
}
|
}
|
||||||
|
|
||||||
template<typename TimevalType>
|
template<typename TimevalType>
|
||||||
inline void timeval_add(const TimevalType& a, const TimevalType& b, TimevalType& result)
|
inline void timeval_add(TimevalType const& a, TimevalType const& b, TimevalType& result)
|
||||||
{
|
{
|
||||||
result.tv_sec = a.tv_sec + b.tv_sec;
|
result.tv_sec = a.tv_sec + b.tv_sec;
|
||||||
result.tv_usec = a.tv_usec + b.tv_usec;
|
result.tv_usec = a.tv_usec + b.tv_usec;
|
||||||
|
@ -265,7 +265,7 @@ inline void timeval_add(const TimevalType& a, const TimevalType& b, TimevalType&
|
||||||
}
|
}
|
||||||
|
|
||||||
template<typename TimespecType>
|
template<typename TimespecType>
|
||||||
inline void timespec_sub(const TimespecType& a, const TimespecType& b, TimespecType& result)
|
inline void timespec_sub(TimespecType const& a, TimespecType const& b, TimespecType& result)
|
||||||
{
|
{
|
||||||
result.tv_sec = a.tv_sec - b.tv_sec;
|
result.tv_sec = a.tv_sec - b.tv_sec;
|
||||||
result.tv_nsec = a.tv_nsec - b.tv_nsec;
|
result.tv_nsec = a.tv_nsec - b.tv_nsec;
|
||||||
|
@ -276,7 +276,7 @@ inline void timespec_sub(const TimespecType& a, const TimespecType& b, TimespecT
|
||||||
}
|
}
|
||||||
|
|
||||||
template<typename TimespecType>
|
template<typename TimespecType>
|
||||||
inline void timespec_add(const TimespecType& a, const TimespecType& b, TimespecType& result)
|
inline void timespec_add(TimespecType const& a, TimespecType const& b, TimespecType& result)
|
||||||
{
|
{
|
||||||
result.tv_sec = a.tv_sec + b.tv_sec;
|
result.tv_sec = a.tv_sec + b.tv_sec;
|
||||||
result.tv_nsec = a.tv_nsec + b.tv_nsec;
|
result.tv_nsec = a.tv_nsec + b.tv_nsec;
|
||||||
|
@ -287,7 +287,7 @@ inline void timespec_add(const TimespecType& a, const TimespecType& b, TimespecT
|
||||||
}
|
}
|
||||||
|
|
||||||
template<typename TimespecType, typename TimevalType>
|
template<typename TimespecType, typename TimevalType>
|
||||||
inline void timespec_add_timeval(const TimespecType& a, const TimevalType& b, TimespecType& result)
|
inline void timespec_add_timeval(TimespecType const& a, TimevalType const& b, TimespecType& result)
|
||||||
{
|
{
|
||||||
result.tv_sec = a.tv_sec + b.tv_sec;
|
result.tv_sec = a.tv_sec + b.tv_sec;
|
||||||
result.tv_nsec = a.tv_nsec + b.tv_usec * 1000;
|
result.tv_nsec = a.tv_nsec + b.tv_usec * 1000;
|
||||||
|
@ -298,14 +298,14 @@ inline void timespec_add_timeval(const TimespecType& a, const TimevalType& b, Ti
|
||||||
}
|
}
|
||||||
|
|
||||||
template<typename TimevalType, typename TimespecType>
|
template<typename TimevalType, typename TimespecType>
|
||||||
inline void timeval_to_timespec(const TimevalType& tv, TimespecType& ts)
|
inline void timeval_to_timespec(TimevalType const& tv, TimespecType& ts)
|
||||||
{
|
{
|
||||||
ts.tv_sec = tv.tv_sec;
|
ts.tv_sec = tv.tv_sec;
|
||||||
ts.tv_nsec = tv.tv_usec * 1000;
|
ts.tv_nsec = tv.tv_usec * 1000;
|
||||||
}
|
}
|
||||||
|
|
||||||
template<typename TimespecType, typename TimevalType>
|
template<typename TimespecType, typename TimevalType>
|
||||||
inline void timespec_to_timeval(const TimespecType& ts, TimevalType& tv)
|
inline void timespec_to_timeval(TimespecType const& ts, TimevalType& tv)
|
||||||
{
|
{
|
||||||
tv.tv_sec = ts.tv_sec;
|
tv.tv_sec = ts.tv_sec;
|
||||||
tv.tv_usec = ts.tv_nsec / 1000;
|
tv.tv_usec = ts.tv_nsec / 1000;
|
||||||
|
|
23
AK/Trie.h
23
AK/Trie.h
|
@ -40,7 +40,7 @@ public:
|
||||||
}
|
}
|
||||||
|
|
||||||
template<typename It>
|
template<typename It>
|
||||||
BaseType& traverse_until_last_accessible_node(It& it, const It& end)
|
BaseType& traverse_until_last_accessible_node(It& it, It const& end)
|
||||||
{
|
{
|
||||||
Trie* node = this;
|
Trie* node = this;
|
||||||
for (; it < end; ++it) {
|
for (; it < end; ++it) {
|
||||||
|
@ -53,17 +53,17 @@ public:
|
||||||
}
|
}
|
||||||
|
|
||||||
template<typename It>
|
template<typename It>
|
||||||
const BaseType& traverse_until_last_accessible_node(It& it, const It& end) const { return const_cast<Trie*>(this)->traverse_until_last_accessible_node(it, end); }
|
BaseType const& traverse_until_last_accessible_node(It& it, It const& end) const { return const_cast<Trie*>(this)->traverse_until_last_accessible_node(it, end); }
|
||||||
|
|
||||||
template<typename It>
|
template<typename It>
|
||||||
BaseType& traverse_until_last_accessible_node(const It& begin, const It& end)
|
BaseType& traverse_until_last_accessible_node(It const& begin, It const& end)
|
||||||
{
|
{
|
||||||
auto it = begin;
|
auto it = begin;
|
||||||
return const_cast<Trie*>(this)->traverse_until_last_accessible_node(it, end);
|
return const_cast<Trie*>(this)->traverse_until_last_accessible_node(it, end);
|
||||||
}
|
}
|
||||||
|
|
||||||
template<typename It>
|
template<typename It>
|
||||||
const BaseType& traverse_until_last_accessible_node(const It& begin, const It& end) const
|
BaseType const& traverse_until_last_accessible_node(It const& begin, It const& end) const
|
||||||
{
|
{
|
||||||
auto it = begin;
|
auto it = begin;
|
||||||
return const_cast<Trie*>(this)->traverse_until_last_accessible_node(it, end);
|
return const_cast<Trie*>(this)->traverse_until_last_accessible_node(it, end);
|
||||||
|
@ -71,10 +71,10 @@ public:
|
||||||
|
|
||||||
Optional<MetadataType> metadata() const requires(!IsNullPointer<MetadataType>) { return m_metadata; }
|
Optional<MetadataType> metadata() const requires(!IsNullPointer<MetadataType>) { return m_metadata; }
|
||||||
void set_metadata(MetadataType metadata) requires(!IsNullPointer<MetadataType>) { m_metadata = move(metadata); }
|
void set_metadata(MetadataType metadata) requires(!IsNullPointer<MetadataType>) { m_metadata = move(metadata); }
|
||||||
const MetadataType& metadata_value() const requires(!IsNullPointer<MetadataType>) { return m_metadata.value(); }
|
MetadataType const& metadata_value() const requires(!IsNullPointer<MetadataType>) { return m_metadata.value(); }
|
||||||
MetadataType& metadata_value() requires(!IsNullPointer<MetadataType>) { return m_metadata.value(); }
|
MetadataType& metadata_value() requires(!IsNullPointer<MetadataType>) { return m_metadata.value(); }
|
||||||
|
|
||||||
const ValueType& value() const { return m_value; }
|
ValueType const& value() const { return m_value; }
|
||||||
ValueType& value() { return m_value; }
|
ValueType& value() { return m_value; }
|
||||||
|
|
||||||
ErrorOr<Trie*> ensure_child(ValueType value, Optional<MetadataType> metadata = {})
|
ErrorOr<Trie*> ensure_child(ValueType value, Optional<MetadataType> metadata = {})
|
||||||
|
@ -99,11 +99,10 @@ public:
|
||||||
|
|
||||||
template<typename It, typename ProvideMetadataFunction>
|
template<typename It, typename ProvideMetadataFunction>
|
||||||
ErrorOr<BaseType*> insert(
|
ErrorOr<BaseType*> insert(
|
||||||
It& it, const It& end, MetadataType metadata, ProvideMetadataFunction provide_missing_metadata) requires(!IsNullPointer<MetadataType>)
|
It& it, It const& end, MetadataType metadata, ProvideMetadataFunction provide_missing_metadata) requires(!IsNullPointer<MetadataType>)
|
||||||
{
|
{
|
||||||
Trie* last_root_node = &traverse_until_last_accessible_node(it, end);
|
Trie* last_root_node = &traverse_until_last_accessible_node(it, end);
|
||||||
auto invoke_provide_missing_metadata = [&]<typename... Ts>(Ts && ... args)->ErrorOr<Optional<MetadataType>>
|
auto invoke_provide_missing_metadata = [&]<typename... Ts>(Ts&&... args) -> ErrorOr<Optional<MetadataType>> {
|
||||||
{
|
|
||||||
if constexpr (SameAs<MetadataType, decltype(provide_missing_metadata(forward<Ts>(args)...))>)
|
if constexpr (SameAs<MetadataType, decltype(provide_missing_metadata(forward<Ts>(args)...))>)
|
||||||
return Optional<MetadataType>(provide_missing_metadata(forward<Ts>(args)...));
|
return Optional<MetadataType>(provide_missing_metadata(forward<Ts>(args)...));
|
||||||
else
|
else
|
||||||
|
@ -120,7 +119,7 @@ public:
|
||||||
}
|
}
|
||||||
|
|
||||||
template<typename It>
|
template<typename It>
|
||||||
ErrorOr<BaseType*> insert(It& it, const It& end) requires(IsNullPointer<MetadataType>)
|
ErrorOr<BaseType*> insert(It& it, It const& end) requires(IsNullPointer<MetadataType>)
|
||||||
{
|
{
|
||||||
Trie* last_root_node = &traverse_until_last_accessible_node(it, end);
|
Trie* last_root_node = &traverse_until_last_accessible_node(it, end);
|
||||||
for (; it != end; ++it) {
|
for (; it != end; ++it) {
|
||||||
|
@ -134,14 +133,14 @@ public:
|
||||||
|
|
||||||
template<typename It, typename ProvideMetadataFunction>
|
template<typename It, typename ProvideMetadataFunction>
|
||||||
ErrorOr<BaseType*> insert(
|
ErrorOr<BaseType*> insert(
|
||||||
const It& begin, const It& end, MetadataType metadata, ProvideMetadataFunction provide_missing_metadata) requires(!IsNullPointer<MetadataType>)
|
It const& begin, It const& end, MetadataType metadata, ProvideMetadataFunction provide_missing_metadata) requires(!IsNullPointer<MetadataType>)
|
||||||
{
|
{
|
||||||
auto it = begin;
|
auto it = begin;
|
||||||
return insert(it, end, move(metadata), move(provide_missing_metadata));
|
return insert(it, end, move(metadata), move(provide_missing_metadata));
|
||||||
}
|
}
|
||||||
|
|
||||||
template<typename It>
|
template<typename It>
|
||||||
ErrorOr<BaseType*> insert(const It& begin, const It& end) requires(IsNullPointer<MetadataType>)
|
ErrorOr<BaseType*> insert(It const& begin, It const& end) requires(IsNullPointer<MetadataType>)
|
||||||
{
|
{
|
||||||
auto it = begin;
|
auto it = begin;
|
||||||
return insert(it, end);
|
return insert(it, end);
|
||||||
|
|
|
@ -122,7 +122,7 @@ struct Tuple : Detail::Tuple<Ts...> {
|
||||||
{
|
{
|
||||||
}
|
}
|
||||||
|
|
||||||
Tuple(const Tuple& other)
|
Tuple(Tuple const& other)
|
||||||
: Tuple(other, Indices())
|
: Tuple(other, Indices())
|
||||||
{
|
{
|
||||||
}
|
}
|
||||||
|
@ -133,7 +133,7 @@ struct Tuple : Detail::Tuple<Ts...> {
|
||||||
return *this;
|
return *this;
|
||||||
}
|
}
|
||||||
|
|
||||||
Tuple& operator=(const Tuple& other)
|
Tuple& operator=(Tuple const& other)
|
||||||
{
|
{
|
||||||
set(other, Indices());
|
set(other, Indices());
|
||||||
return *this;
|
return *this;
|
||||||
|
@ -185,7 +185,7 @@ private:
|
||||||
}
|
}
|
||||||
|
|
||||||
template<unsigned... Is>
|
template<unsigned... Is>
|
||||||
Tuple(const Tuple& other, IndexSequence<Is...>)
|
Tuple(Tuple const& other, IndexSequence<Is...>)
|
||||||
: Detail::Tuple<Ts...>(other.get<Is>()...)
|
: Detail::Tuple<Ts...>(other.get<Is>()...)
|
||||||
{
|
{
|
||||||
}
|
}
|
||||||
|
@ -197,7 +197,7 @@ private:
|
||||||
}
|
}
|
||||||
|
|
||||||
template<unsigned... Is>
|
template<unsigned... Is>
|
||||||
void set(const Tuple& other, IndexSequence<Is...>)
|
void set(Tuple const& other, IndexSequence<Is...>)
|
||||||
{
|
{
|
||||||
((get<Is>() = other.get<Is>()), ...);
|
((get<Is>() = other.get<Is>()), ...);
|
||||||
}
|
}
|
||||||
|
|
|
@ -61,7 +61,7 @@ constexpr u64 TiB = KiB * KiB * KiB * KiB;
|
||||||
constexpr u64 PiB = KiB * KiB * KiB * KiB * KiB;
|
constexpr u64 PiB = KiB * KiB * KiB * KiB * KiB;
|
||||||
constexpr u64 EiB = KiB * KiB * KiB * KiB * KiB * KiB;
|
constexpr u64 EiB = KiB * KiB * KiB * KiB * KiB * KiB;
|
||||||
|
|
||||||
namespace std { //NOLINT(cert-dcl58-cpp) nullptr_t must be in ::std:: for some analysis tools
|
namespace std { // NOLINT(cert-dcl58-cpp) nullptr_t must be in ::std:: for some analysis tools
|
||||||
using nullptr_t = decltype(nullptr);
|
using nullptr_t = decltype(nullptr);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -21,7 +21,7 @@ class SourceLocation {
|
||||||
AK_MAKE_NONCOPYABLE(SourceLocation);
|
AK_MAKE_NONCOPYABLE(SourceLocation);
|
||||||
|
|
||||||
public:
|
public:
|
||||||
const char* filename() const { return m_filename; }
|
char const* filename() const { return m_filename; }
|
||||||
u32 line() const { return m_line; }
|
u32 line() const { return m_line; }
|
||||||
u32 column() const { return m_column; }
|
u32 column() const { return m_column; }
|
||||||
|
|
||||||
|
@ -52,7 +52,7 @@ public:
|
||||||
}
|
}
|
||||||
|
|
||||||
private:
|
private:
|
||||||
const char* m_filename { nullptr };
|
char const* m_filename { nullptr };
|
||||||
u32 m_line { 0 };
|
u32 m_line { 0 };
|
||||||
u32 m_column { 0 };
|
u32 m_column { 0 };
|
||||||
};
|
};
|
||||||
|
@ -65,7 +65,7 @@ enum TypeKind : u16 {
|
||||||
|
|
||||||
class TypeDescriptor {
|
class TypeDescriptor {
|
||||||
public:
|
public:
|
||||||
const char* name() const { return m_name; }
|
char const* name() const { return m_name; }
|
||||||
TypeKind kind() const { return (TypeKind)m_kind; }
|
TypeKind kind() const { return (TypeKind)m_kind; }
|
||||||
bool is_integer() const { return kind() == TypeKind::Integer; }
|
bool is_integer() const { return kind() == TypeKind::Integer; }
|
||||||
bool is_signed() const { return m_info & 1; }
|
bool is_signed() const { return m_info & 1; }
|
||||||
|
@ -80,7 +80,7 @@ private:
|
||||||
|
|
||||||
struct InvalidValueData {
|
struct InvalidValueData {
|
||||||
SourceLocation location;
|
SourceLocation location;
|
||||||
const TypeDescriptor& type;
|
TypeDescriptor const& type;
|
||||||
};
|
};
|
||||||
|
|
||||||
struct NonnullArgData {
|
struct NonnullArgData {
|
||||||
|
@ -95,29 +95,29 @@ struct NonnullReturnData {
|
||||||
|
|
||||||
struct OverflowData {
|
struct OverflowData {
|
||||||
SourceLocation location;
|
SourceLocation location;
|
||||||
const TypeDescriptor& type;
|
TypeDescriptor const& type;
|
||||||
};
|
};
|
||||||
|
|
||||||
struct VLABoundData {
|
struct VLABoundData {
|
||||||
SourceLocation location;
|
SourceLocation location;
|
||||||
const TypeDescriptor& type;
|
TypeDescriptor const& type;
|
||||||
};
|
};
|
||||||
|
|
||||||
struct ShiftOutOfBoundsData {
|
struct ShiftOutOfBoundsData {
|
||||||
SourceLocation location;
|
SourceLocation location;
|
||||||
const TypeDescriptor& lhs_type;
|
TypeDescriptor const& lhs_type;
|
||||||
const TypeDescriptor& rhs_type;
|
TypeDescriptor const& rhs_type;
|
||||||
};
|
};
|
||||||
|
|
||||||
struct OutOfBoundsData {
|
struct OutOfBoundsData {
|
||||||
SourceLocation location;
|
SourceLocation location;
|
||||||
const TypeDescriptor& array_type;
|
TypeDescriptor const& array_type;
|
||||||
const TypeDescriptor& index_type;
|
TypeDescriptor const& index_type;
|
||||||
};
|
};
|
||||||
|
|
||||||
struct TypeMismatchData {
|
struct TypeMismatchData {
|
||||||
SourceLocation location;
|
SourceLocation location;
|
||||||
const TypeDescriptor& type;
|
TypeDescriptor const& type;
|
||||||
u8 log_alignment;
|
u8 log_alignment;
|
||||||
u8 type_check_kind;
|
u8 type_check_kind;
|
||||||
};
|
};
|
||||||
|
@ -125,7 +125,7 @@ struct TypeMismatchData {
|
||||||
struct AlignmentAssumptionData {
|
struct AlignmentAssumptionData {
|
||||||
SourceLocation location;
|
SourceLocation location;
|
||||||
SourceLocation assumption_location;
|
SourceLocation assumption_location;
|
||||||
const TypeDescriptor& type;
|
TypeDescriptor const& type;
|
||||||
};
|
};
|
||||||
|
|
||||||
struct UnreachableData {
|
struct UnreachableData {
|
||||||
|
@ -134,8 +134,8 @@ struct UnreachableData {
|
||||||
|
|
||||||
struct ImplicitConversionData {
|
struct ImplicitConversionData {
|
||||||
SourceLocation location;
|
SourceLocation location;
|
||||||
const TypeDescriptor& from_type;
|
TypeDescriptor const& from_type;
|
||||||
const TypeDescriptor& to_type;
|
TypeDescriptor const& to_type;
|
||||||
/* ImplicitConversionCheckKind */ unsigned char kind;
|
/* ImplicitConversionCheckKind */ unsigned char kind;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
|
@ -83,7 +83,7 @@ public:
|
||||||
}
|
}
|
||||||
Span<const u8> bytes() const
|
Span<const u8> bytes() const
|
||||||
{
|
{
|
||||||
return Span<const u8>(reinterpret_cast<const u8*>(this), sizeof(R));
|
return Span<const u8>(reinterpret_cast<u8 const*>(this), sizeof(R));
|
||||||
}
|
}
|
||||||
|
|
||||||
template<Unsigned U>
|
template<Unsigned U>
|
||||||
|
@ -417,7 +417,7 @@ public:
|
||||||
return { lower, higher };
|
return { lower, higher };
|
||||||
}
|
}
|
||||||
|
|
||||||
constexpr R operator+(const bool& other) const
|
constexpr R operator+(bool const& other) const
|
||||||
{
|
{
|
||||||
bool carry = false; // unused
|
bool carry = false; // unused
|
||||||
return addc((u8)other, carry);
|
return addc((u8)other, carry);
|
||||||
|
@ -429,7 +429,7 @@ public:
|
||||||
return addc(other, carry);
|
return addc(other, carry);
|
||||||
}
|
}
|
||||||
|
|
||||||
constexpr R operator-(const bool& other) const
|
constexpr R operator-(bool const& other) const
|
||||||
{
|
{
|
||||||
bool carry = false; // unused
|
bool carry = false; // unused
|
||||||
return subc((u8)other, carry);
|
return subc((u8)other, carry);
|
||||||
|
@ -491,9 +491,9 @@ public:
|
||||||
#pragma GCC diagnostic push
|
#pragma GCC diagnostic push
|
||||||
#pragma GCC diagnostic ignored "-Wdiv-by-zero"
|
#pragma GCC diagnostic ignored "-Wdiv-by-zero"
|
||||||
if (!divisor) {
|
if (!divisor) {
|
||||||
volatile int x = 1;
|
int volatile x = 1;
|
||||||
volatile int y = 0;
|
int volatile y = 0;
|
||||||
[[maybe_unused]] volatile int z = x / y;
|
[[maybe_unused]] int volatile z = x / y;
|
||||||
}
|
}
|
||||||
#pragma GCC diagnostic pop
|
#pragma GCC diagnostic pop
|
||||||
|
|
||||||
|
@ -796,13 +796,13 @@ private:
|
||||||
|
|
||||||
// reverse operators
|
// reverse operators
|
||||||
template<Unsigned U, Unsigned T>
|
template<Unsigned U, Unsigned T>
|
||||||
requires(sizeof(U) < sizeof(T) * 2) constexpr bool operator<(const U a, const UFixedBigInt<T>& b) { return b >= a; }
|
requires(sizeof(U) < sizeof(T) * 2) constexpr bool operator<(const U a, UFixedBigInt<T> const& b) { return b >= a; }
|
||||||
template<Unsigned U, Unsigned T>
|
template<Unsigned U, Unsigned T>
|
||||||
requires(sizeof(U) < sizeof(T) * 2) constexpr bool operator>(const U a, const UFixedBigInt<T>& b) { return b <= a; }
|
requires(sizeof(U) < sizeof(T) * 2) constexpr bool operator>(const U a, UFixedBigInt<T> const& b) { return b <= a; }
|
||||||
template<Unsigned U, Unsigned T>
|
template<Unsigned U, Unsigned T>
|
||||||
requires(sizeof(U) < sizeof(T) * 2) constexpr bool operator<=(const U a, const UFixedBigInt<T>& b) { return b > a; }
|
requires(sizeof(U) < sizeof(T) * 2) constexpr bool operator<=(const U a, UFixedBigInt<T> const& b) { return b > a; }
|
||||||
template<Unsigned U, Unsigned T>
|
template<Unsigned U, Unsigned T>
|
||||||
requires(sizeof(U) < sizeof(T) * 2) constexpr bool operator>=(const U a, const UFixedBigInt<T>& b) { return b < a; }
|
requires(sizeof(U) < sizeof(T) * 2) constexpr bool operator>=(const U a, UFixedBigInt<T> const& b) { return b < a; }
|
||||||
|
|
||||||
template<Unsigned T>
|
template<Unsigned T>
|
||||||
struct Formatter<UFixedBigInt<T>> : StandardFormatter {
|
struct Formatter<UFixedBigInt<T>> : StandardFormatter {
|
||||||
|
|
|
@ -124,7 +124,7 @@ bool UUID::operator==(const UUID& other) const
|
||||||
|
|
||||||
bool UUID::is_zero() const
|
bool UUID::is_zero() const
|
||||||
{
|
{
|
||||||
return all_of(m_uuid_buffer, [](const auto octet) { return octet == 0; });
|
return all_of(m_uuid_buffer, [](auto const octet) { return octet == 0; });
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -25,11 +25,11 @@ public:
|
||||||
Userspace() = default;
|
Userspace() = default;
|
||||||
|
|
||||||
// Disable default implementations that would use surprising integer promotion.
|
// Disable default implementations that would use surprising integer promotion.
|
||||||
bool operator==(const Userspace&) const = delete;
|
bool operator==(Userspace const&) const = delete;
|
||||||
bool operator<=(const Userspace&) const = delete;
|
bool operator<=(Userspace const&) const = delete;
|
||||||
bool operator>=(const Userspace&) const = delete;
|
bool operator>=(Userspace const&) const = delete;
|
||||||
bool operator<(const Userspace&) const = delete;
|
bool operator<(Userspace const&) const = delete;
|
||||||
bool operator>(const Userspace&) const = delete;
|
bool operator>(Userspace const&) const = delete;
|
||||||
|
|
||||||
#ifdef KERNEL
|
#ifdef KERNEL
|
||||||
Userspace(FlatPtr ptr)
|
Userspace(FlatPtr ptr)
|
||||||
|
@ -62,7 +62,7 @@ private:
|
||||||
};
|
};
|
||||||
|
|
||||||
template<typename T, typename U>
|
template<typename T, typename U>
|
||||||
inline Userspace<T> static_ptr_cast(const Userspace<U>& ptr)
|
inline Userspace<T> static_ptr_cast(Userspace<U> const& ptr)
|
||||||
{
|
{
|
||||||
#ifdef KERNEL
|
#ifdef KERNEL
|
||||||
auto casted_ptr = static_cast<T>(ptr.unsafe_userspace_ptr());
|
auto casted_ptr = static_cast<T>(ptr.unsafe_userspace_ptr());
|
||||||
|
|
|
@ -21,11 +21,11 @@ public:
|
||||||
Utf32CodePointIterator() = default;
|
Utf32CodePointIterator() = default;
|
||||||
~Utf32CodePointIterator() = default;
|
~Utf32CodePointIterator() = default;
|
||||||
|
|
||||||
bool operator==(const Utf32CodePointIterator& other) const
|
bool operator==(Utf32CodePointIterator const& other) const
|
||||||
{
|
{
|
||||||
return m_ptr == other.m_ptr && m_length == other.m_length;
|
return m_ptr == other.m_ptr && m_length == other.m_length;
|
||||||
}
|
}
|
||||||
bool operator!=(const Utf32CodePointIterator& other) const
|
bool operator!=(Utf32CodePointIterator const& other) const
|
||||||
{
|
{
|
||||||
return !(*this == other);
|
return !(*this == other);
|
||||||
}
|
}
|
||||||
|
@ -36,7 +36,7 @@ public:
|
||||||
m_length--;
|
m_length--;
|
||||||
return *this;
|
return *this;
|
||||||
}
|
}
|
||||||
ssize_t operator-(const Utf32CodePointIterator& other) const
|
ssize_t operator-(Utf32CodePointIterator const& other) const
|
||||||
{
|
{
|
||||||
return m_ptr - other.m_ptr;
|
return m_ptr - other.m_ptr;
|
||||||
}
|
}
|
||||||
|
@ -50,12 +50,12 @@ public:
|
||||||
bool done() const { return !m_length; }
|
bool done() const { return !m_length; }
|
||||||
|
|
||||||
private:
|
private:
|
||||||
Utf32CodePointIterator(const u32* ptr, size_t length)
|
Utf32CodePointIterator(u32 const* ptr, size_t length)
|
||||||
: m_ptr(ptr)
|
: m_ptr(ptr)
|
||||||
, m_length((ssize_t)length)
|
, m_length((ssize_t)length)
|
||||||
{
|
{
|
||||||
}
|
}
|
||||||
const u32* m_ptr { nullptr };
|
u32 const* m_ptr { nullptr };
|
||||||
ssize_t m_length { -1 };
|
ssize_t m_length { -1 };
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@ -64,7 +64,7 @@ public:
|
||||||
using Iterator = Utf32CodePointIterator;
|
using Iterator = Utf32CodePointIterator;
|
||||||
|
|
||||||
Utf32View() = default;
|
Utf32View() = default;
|
||||||
Utf32View(const u32* code_points, size_t length)
|
Utf32View(u32 const* code_points, size_t length)
|
||||||
: m_code_points(code_points)
|
: m_code_points(code_points)
|
||||||
, m_length(length)
|
, m_length(length)
|
||||||
{
|
{
|
||||||
|
@ -89,12 +89,12 @@ public:
|
||||||
|
|
||||||
u32 operator[](size_t index) const { return at(index); }
|
u32 operator[](size_t index) const { return at(index); }
|
||||||
|
|
||||||
const u32* code_points() const { return m_code_points; }
|
u32 const* code_points() const { return m_code_points; }
|
||||||
bool is_empty() const { return m_length == 0; }
|
bool is_empty() const { return m_length == 0; }
|
||||||
bool is_null() const { return !m_code_points; }
|
bool is_null() const { return !m_code_points; }
|
||||||
size_t length() const { return m_length; }
|
size_t length() const { return m_length; }
|
||||||
|
|
||||||
size_t iterator_offset(const Utf32CodePointIterator& it) const
|
size_t iterator_offset(Utf32CodePointIterator const& it) const
|
||||||
{
|
{
|
||||||
VERIFY(it.m_ptr >= m_code_points);
|
VERIFY(it.m_ptr >= m_code_points);
|
||||||
VERIFY(it.m_ptr < m_code_points + m_length);
|
VERIFY(it.m_ptr < m_code_points + m_length);
|
||||||
|
@ -110,16 +110,16 @@ public:
|
||||||
}
|
}
|
||||||
|
|
||||||
private:
|
private:
|
||||||
const u32* begin_ptr() const
|
u32 const* begin_ptr() const
|
||||||
{
|
{
|
||||||
return m_code_points;
|
return m_code_points;
|
||||||
}
|
}
|
||||||
const u32* end_ptr() const
|
u32 const* end_ptr() const
|
||||||
{
|
{
|
||||||
return m_code_points + m_length;
|
return m_code_points + m_length;
|
||||||
}
|
}
|
||||||
|
|
||||||
const u32* m_code_points { nullptr };
|
u32 const* m_code_points { nullptr };
|
||||||
size_t m_length { 0 };
|
size_t m_length { 0 };
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
|
@ -22,7 +22,7 @@ Utf8CodePointIterator Utf8View::iterator_at_byte_offset(size_t byte_offset) cons
|
||||||
return end();
|
return end();
|
||||||
}
|
}
|
||||||
|
|
||||||
size_t Utf8View::byte_offset_of(const Utf8CodePointIterator& it) const
|
size_t Utf8View::byte_offset_of(Utf8CodePointIterator const& it) const
|
||||||
{
|
{
|
||||||
VERIFY(it.m_ptr >= begin_ptr());
|
VERIFY(it.m_ptr >= begin_ptr());
|
||||||
VERIFY(it.m_ptr <= end_ptr());
|
VERIFY(it.m_ptr <= end_ptr());
|
||||||
|
@ -129,7 +129,7 @@ size_t Utf8View::calculate_length() const
|
||||||
return length;
|
return length;
|
||||||
}
|
}
|
||||||
|
|
||||||
bool Utf8View::starts_with(const Utf8View& start) const
|
bool Utf8View::starts_with(Utf8View const& start) const
|
||||||
{
|
{
|
||||||
if (start.is_empty())
|
if (start.is_empty())
|
||||||
return true;
|
return true;
|
||||||
|
@ -156,7 +156,7 @@ bool Utf8View::contains(u32 needle) const
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
Utf8View Utf8View::trim(const Utf8View& characters, TrimMode mode) const
|
Utf8View Utf8View::trim(Utf8View const& characters, TrimMode mode) const
|
||||||
{
|
{
|
||||||
size_t substring_start = 0;
|
size_t substring_start = 0;
|
||||||
size_t substring_length = byte_length();
|
size_t substring_length = byte_length();
|
||||||
|
|
|
@ -29,7 +29,7 @@ public:
|
||||||
// NOTE: This returns {} if the peek is at or past EOF.
|
// NOTE: This returns {} if the peek is at or past EOF.
|
||||||
Optional<u32> peek(size_t offset = 0) const;
|
Optional<u32> peek(size_t offset = 0) const;
|
||||||
|
|
||||||
ssize_t operator-(const Utf8CodePointIterator& other) const
|
ssize_t operator-(Utf8CodePointIterator const& other) const
|
||||||
{
|
{
|
||||||
return m_ptr - other.m_ptr;
|
return m_ptr - other.m_ptr;
|
||||||
}
|
}
|
||||||
|
@ -80,9 +80,9 @@ public:
|
||||||
Utf8CodePointIterator end() const { return { end_ptr(), 0 }; }
|
Utf8CodePointIterator end() const { return { end_ptr(), 0 }; }
|
||||||
Utf8CodePointIterator iterator_at_byte_offset(size_t) const;
|
Utf8CodePointIterator iterator_at_byte_offset(size_t) const;
|
||||||
|
|
||||||
const unsigned char* bytes() const { return begin_ptr(); }
|
unsigned char const* bytes() const { return begin_ptr(); }
|
||||||
size_t byte_length() const { return m_string.length(); }
|
size_t byte_length() const { return m_string.length(); }
|
||||||
size_t byte_offset_of(const Utf8CodePointIterator&) const;
|
size_t byte_offset_of(Utf8CodePointIterator const&) const;
|
||||||
size_t byte_offset_of(size_t code_point_offset) const;
|
size_t byte_offset_of(size_t code_point_offset) const;
|
||||||
|
|
||||||
Utf8View substring_view(size_t byte_offset, size_t byte_length) const { return Utf8View { m_string.substring_view(byte_offset, byte_length) }; }
|
Utf8View substring_view(size_t byte_offset, size_t byte_length) const { return Utf8View { m_string.substring_view(byte_offset, byte_length) }; }
|
||||||
|
@ -92,12 +92,12 @@ public:
|
||||||
|
|
||||||
bool is_empty() const { return m_string.is_empty(); }
|
bool is_empty() const { return m_string.is_empty(); }
|
||||||
bool is_null() const { return m_string.is_null(); }
|
bool is_null() const { return m_string.is_null(); }
|
||||||
bool starts_with(const Utf8View&) const;
|
bool starts_with(Utf8View const&) const;
|
||||||
bool contains(u32) const;
|
bool contains(u32) const;
|
||||||
|
|
||||||
Utf8View trim(const Utf8View& characters, TrimMode mode = TrimMode::Both) const;
|
Utf8View trim(Utf8View const& characters, TrimMode mode = TrimMode::Both) const;
|
||||||
|
|
||||||
size_t iterator_offset(const Utf8CodePointIterator& it) const
|
size_t iterator_offset(Utf8CodePointIterator const& it) const
|
||||||
{
|
{
|
||||||
return byte_offset_of(it);
|
return byte_offset_of(it);
|
||||||
}
|
}
|
||||||
|
|
22
AK/Variant.h
22
AK/Variant.h
|
@ -62,7 +62,7 @@ struct Variant<IndexType, InitialIndex, F, Ts...> {
|
||||||
Variant<IndexType, InitialIndex + 1, Ts...>::move_(old_id, old_data, new_data);
|
Variant<IndexType, InitialIndex + 1, Ts...>::move_(old_id, old_data, new_data);
|
||||||
}
|
}
|
||||||
|
|
||||||
ALWAYS_INLINE static void copy_(IndexType old_id, const void* old_data, void* new_data)
|
ALWAYS_INLINE static void copy_(IndexType old_id, void const* old_data, void* new_data)
|
||||||
{
|
{
|
||||||
if (old_id == current_index)
|
if (old_id == current_index)
|
||||||
new (new_data) F(*bit_cast<F const*>(old_data));
|
new (new_data) F(*bit_cast<F const*>(old_data));
|
||||||
|
@ -75,7 +75,7 @@ template<typename IndexType, IndexType InitialIndex>
|
||||||
struct Variant<IndexType, InitialIndex> {
|
struct Variant<IndexType, InitialIndex> {
|
||||||
ALWAYS_INLINE static void delete_(IndexType, void*) { }
|
ALWAYS_INLINE static void delete_(IndexType, void*) { }
|
||||||
ALWAYS_INLINE static void move_(IndexType, void*, void*) { }
|
ALWAYS_INLINE static void move_(IndexType, void*, void*) { }
|
||||||
ALWAYS_INLINE static void copy_(IndexType, const void*, void*) { }
|
ALWAYS_INLINE static void copy_(IndexType, void const*, void*) { }
|
||||||
};
|
};
|
||||||
|
|
||||||
template<typename IndexType, typename... Ts>
|
template<typename IndexType, typename... Ts>
|
||||||
|
@ -97,7 +97,7 @@ struct VisitImpl {
|
||||||
}
|
}
|
||||||
|
|
||||||
template<typename Self, typename Visitor, IndexType CurrentIndex = 0>
|
template<typename Self, typename Visitor, IndexType CurrentIndex = 0>
|
||||||
ALWAYS_INLINE static constexpr decltype(auto) visit(Self& self, IndexType id, const void* data, Visitor&& visitor) requires(CurrentIndex < sizeof...(Ts))
|
ALWAYS_INLINE static constexpr decltype(auto) visit(Self& self, IndexType id, void const* data, Visitor&& visitor) requires(CurrentIndex < sizeof...(Ts))
|
||||||
{
|
{
|
||||||
using T = typename TypeList<Ts...>::template Type<CurrentIndex>;
|
using T = typename TypeList<Ts...>::template Type<CurrentIndex>;
|
||||||
|
|
||||||
|
@ -239,7 +239,7 @@ public:
|
||||||
}
|
}
|
||||||
|
|
||||||
template<typename... NewTs>
|
template<typename... NewTs>
|
||||||
Variant(const Variant<NewTs...>& old) requires((can_contain<NewTs>() && ...))
|
Variant(Variant<NewTs...> const& old) requires((can_contain<NewTs>() && ...))
|
||||||
: Variant(old.template downcast<Ts...>())
|
: Variant(old.template downcast<Ts...>())
|
||||||
{
|
{
|
||||||
}
|
}
|
||||||
|
@ -254,8 +254,8 @@ public:
|
||||||
}
|
}
|
||||||
|
|
||||||
#ifdef AK_HAS_CONDITIONALLY_TRIVIAL
|
#ifdef AK_HAS_CONDITIONALLY_TRIVIAL
|
||||||
Variant(const Variant&) requires(!(IsCopyConstructible<Ts> && ...)) = delete;
|
Variant(Variant const&) requires(!(IsCopyConstructible<Ts> && ...)) = delete;
|
||||||
Variant(const Variant&) = default;
|
Variant(Variant const&) = default;
|
||||||
|
|
||||||
Variant(Variant&&) requires(!(IsMoveConstructible<Ts> && ...)) = delete;
|
Variant(Variant&&) requires(!(IsMoveConstructible<Ts> && ...)) = delete;
|
||||||
Variant(Variant&&) = default;
|
Variant(Variant&&) = default;
|
||||||
|
@ -263,14 +263,14 @@ public:
|
||||||
~Variant() requires(!(IsDestructible<Ts> && ...)) = delete;
|
~Variant() requires(!(IsDestructible<Ts> && ...)) = delete;
|
||||||
~Variant() = default;
|
~Variant() = default;
|
||||||
|
|
||||||
Variant& operator=(const Variant&) requires(!(IsCopyConstructible<Ts> && ...) || !(IsDestructible<Ts> && ...)) = delete;
|
Variant& operator=(Variant const&) requires(!(IsCopyConstructible<Ts> && ...) || !(IsDestructible<Ts> && ...)) = delete;
|
||||||
Variant& operator=(const Variant&) = default;
|
Variant& operator=(Variant const&) = default;
|
||||||
|
|
||||||
Variant& operator=(Variant&&) requires(!(IsMoveConstructible<Ts> && ...) || !(IsDestructible<Ts> && ...)) = delete;
|
Variant& operator=(Variant&&) requires(!(IsMoveConstructible<Ts> && ...) || !(IsDestructible<Ts> && ...)) = delete;
|
||||||
Variant& operator=(Variant&&) = default;
|
Variant& operator=(Variant&&) = default;
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
ALWAYS_INLINE Variant(const Variant& old)
|
ALWAYS_INLINE Variant(Variant const& old)
|
||||||
#ifdef AK_HAS_CONDITIONALLY_TRIVIAL
|
#ifdef AK_HAS_CONDITIONALLY_TRIVIAL
|
||||||
requires(!(IsTriviallyCopyConstructible<Ts> && ...))
|
requires(!(IsTriviallyCopyConstructible<Ts> && ...))
|
||||||
#endif
|
#endif
|
||||||
|
@ -303,7 +303,7 @@ public:
|
||||||
Helper::delete_(m_index, m_data);
|
Helper::delete_(m_index, m_data);
|
||||||
}
|
}
|
||||||
|
|
||||||
ALWAYS_INLINE Variant& operator=(const Variant& other)
|
ALWAYS_INLINE Variant& operator=(Variant const& other)
|
||||||
#ifdef AK_HAS_CONDITIONALLY_TRIVIAL
|
#ifdef AK_HAS_CONDITIONALLY_TRIVIAL
|
||||||
requires(!(IsTriviallyCopyConstructible<Ts> && ...) || !(IsTriviallyDestructible<Ts> && ...))
|
requires(!(IsTriviallyCopyConstructible<Ts> && ...) || !(IsTriviallyDestructible<Ts> && ...))
|
||||||
#endif
|
#endif
|
||||||
|
@ -418,7 +418,7 @@ public:
|
||||||
Variant<NewTs...> downcast() const&
|
Variant<NewTs...> downcast() const&
|
||||||
{
|
{
|
||||||
Variant<NewTs...> instance { Variant<NewTs...>::invalid_index, Detail::VariantConstructTag {} };
|
Variant<NewTs...> instance { Variant<NewTs...>::invalid_index, Detail::VariantConstructTag {} };
|
||||||
visit([&](const auto& value) {
|
visit([&](auto const& value) {
|
||||||
if constexpr (Variant<NewTs...>::template can_contain<RemoveCVReference<decltype(value)>>())
|
if constexpr (Variant<NewTs...>::template can_contain<RemoveCVReference<decltype(value)>>())
|
||||||
instance.set(value, Detail::VariantNoClearTag {});
|
instance.set(value, Detail::VariantNoClearTag {});
|
||||||
});
|
});
|
||||||
|
|
12
AK/WeakPtr.h
12
AK/WeakPtr.h
|
@ -23,7 +23,7 @@ public:
|
||||||
WeakPtr() = default;
|
WeakPtr() = default;
|
||||||
|
|
||||||
template<typename U>
|
template<typename U>
|
||||||
WeakPtr(const WeakPtr<U>& other) requires(IsBaseOf<T, U>)
|
WeakPtr(WeakPtr<U> const& other) requires(IsBaseOf<T, U>)
|
||||||
: m_link(other.m_link)
|
: m_link(other.m_link)
|
||||||
{
|
{
|
||||||
}
|
}
|
||||||
|
@ -42,9 +42,9 @@ public:
|
||||||
}
|
}
|
||||||
|
|
||||||
template<typename U>
|
template<typename U>
|
||||||
WeakPtr& operator=(const WeakPtr<U>& other) requires(IsBaseOf<T, U>)
|
WeakPtr& operator=(WeakPtr<U> const& other) requires(IsBaseOf<T, U>)
|
||||||
{
|
{
|
||||||
if ((const void*)this != (const void*)&other)
|
if ((void const*)this != (void const*)&other)
|
||||||
m_link = other.m_link;
|
m_link = other.m_link;
|
||||||
return *this;
|
return *this;
|
||||||
}
|
}
|
||||||
|
@ -99,7 +99,7 @@ public:
|
||||||
}
|
}
|
||||||
|
|
||||||
template<typename U>
|
template<typename U>
|
||||||
WeakPtr& operator=(const RefPtr<U>& object) requires(IsBaseOf<T, U>)
|
WeakPtr& operator=(RefPtr<U> const& object) requires(IsBaseOf<T, U>)
|
||||||
{
|
{
|
||||||
if (object)
|
if (object)
|
||||||
m_link = object->template make_weak_ptr<U>().take_link();
|
m_link = object->template make_weak_ptr<U>().take_link();
|
||||||
|
@ -109,7 +109,7 @@ public:
|
||||||
}
|
}
|
||||||
|
|
||||||
template<typename U>
|
template<typename U>
|
||||||
WeakPtr& operator=(const NonnullRefPtr<U>& object) requires(IsBaseOf<T, U>)
|
WeakPtr& operator=(NonnullRefPtr<U> const& object) requires(IsBaseOf<T, U>)
|
||||||
{
|
{
|
||||||
m_link = object->template make_weak_ptr<U>().take_link();
|
m_link = object->template make_weak_ptr<U>().take_link();
|
||||||
return *this;
|
return *this;
|
||||||
|
@ -141,7 +141,7 @@ public:
|
||||||
[[nodiscard]] RefPtr<WeakLink> take_link() { return move(m_link); }
|
[[nodiscard]] RefPtr<WeakLink> take_link() { return move(m_link); }
|
||||||
|
|
||||||
private:
|
private:
|
||||||
WeakPtr(const RefPtr<WeakLink>& link)
|
WeakPtr(RefPtr<WeakLink> const& link)
|
||||||
: m_link(link)
|
: m_link(link)
|
||||||
{
|
{
|
||||||
}
|
}
|
||||||
|
|
|
@ -22,7 +22,7 @@ void* operator new(size_t size)
|
||||||
return ptr;
|
return ptr;
|
||||||
}
|
}
|
||||||
|
|
||||||
void* operator new(size_t size, const std::nothrow_t&) noexcept
|
void* operator new(size_t size, std::nothrow_t const&) noexcept
|
||||||
{
|
{
|
||||||
return malloc(size);
|
return malloc(size);
|
||||||
}
|
}
|
||||||
|
@ -44,7 +44,7 @@ void* operator new[](size_t size)
|
||||||
return ptr;
|
return ptr;
|
||||||
}
|
}
|
||||||
|
|
||||||
void* operator new[](size_t size, const std::nothrow_t&) noexcept
|
void* operator new[](size_t size, std::nothrow_t const&) noexcept
|
||||||
{
|
{
|
||||||
return malloc(size);
|
return malloc(size);
|
||||||
}
|
}
|
||||||
|
|
10
AK/kstdio.h
10
AK/kstdio.h
|
@ -13,20 +13,20 @@
|
||||||
# include <AK/Types.h>
|
# include <AK/Types.h>
|
||||||
# include <stdarg.h>
|
# include <stdarg.h>
|
||||||
extern "C" {
|
extern "C" {
|
||||||
void dbgputstr(const char*, size_t);
|
void dbgputstr(char const*, size_t);
|
||||||
int sprintf(char* buf, const char* fmt, ...) __attribute__((format(printf, 2, 3)));
|
int sprintf(char* buf, char const* fmt, ...) __attribute__((format(printf, 2, 3)));
|
||||||
int snprintf(char* buffer, size_t, const char* fmt, ...) __attribute__((format(printf, 3, 4)));
|
int snprintf(char* buffer, size_t, char const* fmt, ...) __attribute__((format(printf, 3, 4)));
|
||||||
}
|
}
|
||||||
# endif
|
# endif
|
||||||
#else
|
#else
|
||||||
# include <stdio.h>
|
# include <stdio.h>
|
||||||
inline void dbgputstr(const char* characters, size_t length)
|
inline void dbgputstr(char const* characters, size_t length)
|
||||||
{
|
{
|
||||||
fwrite(characters, 1, length, stderr);
|
fwrite(characters, 1, length, stderr);
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
template<size_t N>
|
template<size_t N>
|
||||||
inline void dbgputstr(const char (&array)[N])
|
inline void dbgputstr(char const (&array)[N])
|
||||||
{
|
{
|
||||||
return ::dbgputstr(array, N);
|
return ::dbgputstr(array, N);
|
||||||
}
|
}
|
||||||
|
|
|
@ -29,7 +29,7 @@ struct [[gnu::packed]] InodeWatcherEvent {
|
||||||
Type type { Type::Invalid };
|
Type type { Type::Invalid };
|
||||||
size_t name_length { 0 };
|
size_t name_length { 0 };
|
||||||
// This is a VLA which is written during the read() from the descriptor.
|
// This is a VLA which is written during the read() from the descriptor.
|
||||||
const char name[];
|
char const name[];
|
||||||
};
|
};
|
||||||
|
|
||||||
AK_ENUM_BITWISE_OPERATORS(InodeWatcherEvent::Type);
|
AK_ENUM_BITWISE_OPERATORS(InodeWatcherEvent::Type);
|
||||||
|
|
|
@ -125,7 +125,7 @@ enum KeyCode : u8 {
|
||||||
Key_Shift
|
Key_Shift
|
||||||
= Key_LeftShift,
|
= Key_LeftShift,
|
||||||
};
|
};
|
||||||
const int key_code_count = Key_Menu;
|
int const key_code_count = Key_Menu;
|
||||||
|
|
||||||
enum KeyModifier {
|
enum KeyModifier {
|
||||||
Mod_None = 0x00,
|
Mod_None = 0x00,
|
||||||
|
@ -155,7 +155,7 @@ struct KeyEvent {
|
||||||
bool is_press() const { return flags & Is_Press; }
|
bool is_press() const { return flags & Is_Press; }
|
||||||
};
|
};
|
||||||
|
|
||||||
inline const char* key_code_to_string(KeyCode key)
|
inline char const* key_code_to_string(KeyCode key)
|
||||||
{
|
{
|
||||||
switch (key) {
|
switch (key) {
|
||||||
#define __ENUMERATE_KEY_CODE(name, ui_name) \
|
#define __ENUMERATE_KEY_CODE(name, ui_name) \
|
||||||
|
|
|
@ -218,7 +218,7 @@ constexpr StringView to_string(Function function)
|
||||||
|
|
||||||
#ifdef __serenity__
|
#ifdef __serenity__
|
||||||
struct StringArgument {
|
struct StringArgument {
|
||||||
const char* characters;
|
char const* characters;
|
||||||
size_t length { 0 };
|
size_t length { 0 };
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@ -262,7 +262,7 @@ struct SC_poll_params {
|
||||||
struct pollfd* fds;
|
struct pollfd* fds;
|
||||||
unsigned nfds;
|
unsigned nfds;
|
||||||
const struct timespec* timeout;
|
const struct timespec* timeout;
|
||||||
const u32* sigmask;
|
u32 const* sigmask;
|
||||||
};
|
};
|
||||||
|
|
||||||
struct SC_clock_nanosleep_params {
|
struct SC_clock_nanosleep_params {
|
||||||
|
@ -288,7 +288,7 @@ struct SC_getsockopt_params {
|
||||||
};
|
};
|
||||||
|
|
||||||
struct SC_setsockopt_params {
|
struct SC_setsockopt_params {
|
||||||
const void* value;
|
void const* value;
|
||||||
int sockfd;
|
int sockfd;
|
||||||
int level;
|
int level;
|
||||||
int option;
|
int option;
|
||||||
|
@ -319,7 +319,7 @@ struct SC_futex_params {
|
||||||
int futex_op;
|
int futex_op;
|
||||||
u32 val;
|
u32 val;
|
||||||
union {
|
union {
|
||||||
const timespec* timeout;
|
timespec const* timeout;
|
||||||
uintptr_t val2;
|
uintptr_t val2;
|
||||||
};
|
};
|
||||||
u32* userspace_address2;
|
u32* userspace_address2;
|
||||||
|
@ -327,11 +327,11 @@ struct SC_futex_params {
|
||||||
};
|
};
|
||||||
|
|
||||||
struct SC_setkeymap_params {
|
struct SC_setkeymap_params {
|
||||||
const u32* map;
|
u32 const* map;
|
||||||
const u32* shift_map;
|
u32 const* shift_map;
|
||||||
const u32* alt_map;
|
u32 const* alt_map;
|
||||||
const u32* altgr_map;
|
u32 const* altgr_map;
|
||||||
const u32* shift_altgr_map;
|
u32 const* shift_altgr_map;
|
||||||
StringArgument map_name;
|
StringArgument map_name;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
|
@ -23,7 +23,7 @@ struct VirGL3DResourceSpec {
|
||||||
};
|
};
|
||||||
|
|
||||||
struct VirGLCommandBuffer {
|
struct VirGLCommandBuffer {
|
||||||
const u32* data;
|
u32 const* data;
|
||||||
u32 num_elems;
|
u32 num_elems;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
|
@ -92,8 +92,8 @@ void __asan_handle_no_return(void)
|
||||||
{
|
{
|
||||||
}
|
}
|
||||||
|
|
||||||
void __asan_before_dynamic_init(const char*);
|
void __asan_before_dynamic_init(char const*);
|
||||||
void __asan_before_dynamic_init(const char* /* module_name */)
|
void __asan_before_dynamic_init(char const* /* module_name */)
|
||||||
{
|
{
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -44,7 +44,7 @@ struct ProcessorMessage {
|
||||||
} flush_tlb;
|
} flush_tlb;
|
||||||
};
|
};
|
||||||
|
|
||||||
volatile bool async;
|
bool volatile async;
|
||||||
|
|
||||||
ProcessorMessageEntry* per_proc_entries;
|
ProcessorMessageEntry* per_proc_entries;
|
||||||
|
|
||||||
|
|
|
@ -11,7 +11,7 @@ namespace Prekernel {
|
||||||
void drop_to_exception_level_1();
|
void drop_to_exception_level_1();
|
||||||
void init_prekernel_page_tables();
|
void init_prekernel_page_tables();
|
||||||
|
|
||||||
[[noreturn]] void panic(const char* msg);
|
[[noreturn]] void panic(char const* msg);
|
||||||
|
|
||||||
[[noreturn]] void halt();
|
[[noreturn]] void halt();
|
||||||
|
|
||||||
|
|
|
@ -11,7 +11,7 @@
|
||||||
|
|
||||||
namespace Prekernel {
|
namespace Prekernel {
|
||||||
|
|
||||||
[[noreturn]] void panic(const char* msg)
|
[[noreturn]] void panic(char const* msg)
|
||||||
{
|
{
|
||||||
auto& uart = Prekernel::UART::the();
|
auto& uart = Prekernel::UART::the();
|
||||||
|
|
||||||
|
|
|
@ -91,8 +91,8 @@ private:
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
const u64* m_start;
|
u64 const* m_start;
|
||||||
const u64* m_end;
|
u64 const* m_end;
|
||||||
u64* m_current;
|
u64* m_current;
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
@ -181,7 +181,7 @@ static void activate_mmu()
|
||||||
|
|
||||||
// Enable MMU in the system control register
|
// Enable MMU in the system control register
|
||||||
Aarch64::SCTLR_EL1 sctlr_el1 = Aarch64::SCTLR_EL1::read();
|
Aarch64::SCTLR_EL1 sctlr_el1 = Aarch64::SCTLR_EL1::read();
|
||||||
sctlr_el1.M = 1; //Enable MMU
|
sctlr_el1.M = 1; // Enable MMU
|
||||||
Aarch64::SCTLR_EL1::write(sctlr_el1);
|
Aarch64::SCTLR_EL1::write(sctlr_el1);
|
||||||
|
|
||||||
Aarch64::Asm::flush();
|
Aarch64::Asm::flush();
|
||||||
|
|
|
@ -17,8 +17,8 @@ namespace Kernel {
|
||||||
|
|
||||||
class Thread;
|
class Thread;
|
||||||
|
|
||||||
//FIXME This needs to go behind some sort of platform abstraction
|
// FIXME This needs to go behind some sort of platform abstraction
|
||||||
// it is used between Thread and Processor.
|
// it is used between Thread and Processor.
|
||||||
struct [[gnu::aligned(16)]] FPUState
|
struct [[gnu::aligned(16)]] FPUState
|
||||||
{
|
{
|
||||||
u8 buffer[512];
|
u8 buffer[512];
|
||||||
|
|
|
@ -22,7 +22,7 @@ public:
|
||||||
void send(u32 c);
|
void send(u32 c);
|
||||||
u32 receive();
|
u32 receive();
|
||||||
|
|
||||||
void print_str(const char* s)
|
void print_str(char const* s)
|
||||||
{
|
{
|
||||||
while (*s)
|
while (*s)
|
||||||
send(*s++);
|
send(*s++);
|
||||||
|
@ -42,7 +42,7 @@ public:
|
||||||
void print_hex(u64 n)
|
void print_hex(u64 n)
|
||||||
{
|
{
|
||||||
char buf[17];
|
char buf[17];
|
||||||
static const char* digits = "0123456789ABCDEF";
|
static char const* digits = "0123456789ABCDEF";
|
||||||
int i = 0;
|
int i = 0;
|
||||||
do {
|
do {
|
||||||
buf[i++] = digits[n % 16];
|
buf[i++] = digits[n % 16];
|
||||||
|
|
|
@ -7,14 +7,14 @@
|
||||||
#include <Kernel/Arch/aarch64/UART.h>
|
#include <Kernel/Arch/aarch64/UART.h>
|
||||||
#include <Kernel/Arch/aarch64/Utils.h>
|
#include <Kernel/Arch/aarch64/Utils.h>
|
||||||
|
|
||||||
void Prekernel::dbgln(const char* text)
|
void Prekernel::dbgln(char const* text)
|
||||||
{
|
{
|
||||||
auto& uart = Prekernel::UART::the();
|
auto& uart = Prekernel::UART::the();
|
||||||
uart.print_str(text);
|
uart.print_str(text);
|
||||||
uart.print_str("\r\n");
|
uart.print_str("\r\n");
|
||||||
}
|
}
|
||||||
|
|
||||||
void Prekernel::warnln(const char* text)
|
void Prekernel::warnln(char const* text)
|
||||||
{
|
{
|
||||||
dbgln(text);
|
dbgln(text);
|
||||||
}
|
}
|
||||||
|
|
|
@ -9,7 +9,7 @@
|
||||||
namespace Prekernel {
|
namespace Prekernel {
|
||||||
|
|
||||||
// FIXME: to be replaced by real implementation from AK/Format.h
|
// FIXME: to be replaced by real implementation from AK/Format.h
|
||||||
void dbgln(const char* text);
|
void dbgln(char const* text);
|
||||||
void warnln(const char* text);
|
void warnln(char const* text);
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -19,9 +19,9 @@ void dummy();
|
||||||
void dummy() { }
|
void dummy() { }
|
||||||
|
|
||||||
// Assertions.h
|
// Assertions.h
|
||||||
[[noreturn]] void __assertion_failed(const char*, const char*, unsigned, const char*);
|
[[noreturn]] void __assertion_failed(char const*, char const*, unsigned, char const*);
|
||||||
|
|
||||||
[[noreturn]] void __assertion_failed(const char*, const char*, unsigned, const char*)
|
[[noreturn]] void __assertion_failed(char const*, char const*, unsigned, char const*)
|
||||||
{
|
{
|
||||||
for (;;) { }
|
for (;;) { }
|
||||||
}
|
}
|
||||||
|
@ -58,20 +58,20 @@ ssize_t safe_strnlen(char const*, unsigned long, void*&) { return 0; }
|
||||||
bool safe_memcpy(void*, void const*, unsigned long, void*&);
|
bool safe_memcpy(void*, void const*, unsigned long, void*&);
|
||||||
bool safe_memcpy(void*, void const*, unsigned long, void*&) { return false; }
|
bool safe_memcpy(void*, void const*, unsigned long, void*&) { return false; }
|
||||||
|
|
||||||
Optional<bool> safe_atomic_compare_exchange_relaxed(volatile u32*, u32&, u32);
|
Optional<bool> safe_atomic_compare_exchange_relaxed(u32 volatile*, u32&, u32);
|
||||||
Optional<bool> safe_atomic_compare_exchange_relaxed(volatile u32*, u32&, u32) { return {}; }
|
Optional<bool> safe_atomic_compare_exchange_relaxed(u32 volatile*, u32&, u32) { return {}; }
|
||||||
|
|
||||||
Optional<u32> safe_atomic_load_relaxed(volatile u32*);
|
Optional<u32> safe_atomic_load_relaxed(u32 volatile*);
|
||||||
Optional<u32> safe_atomic_load_relaxed(volatile u32*) { return {}; }
|
Optional<u32> safe_atomic_load_relaxed(u32 volatile*) { return {}; }
|
||||||
|
|
||||||
Optional<u32> safe_atomic_fetch_add_relaxed(volatile u32*, u32);
|
Optional<u32> safe_atomic_fetch_add_relaxed(u32 volatile*, u32);
|
||||||
Optional<u32> safe_atomic_fetch_add_relaxed(volatile u32*, u32) { return {}; }
|
Optional<u32> safe_atomic_fetch_add_relaxed(u32 volatile*, u32) { return {}; }
|
||||||
|
|
||||||
Optional<u32> safe_atomic_exchange_relaxed(volatile u32*, u32);
|
Optional<u32> safe_atomic_exchange_relaxed(u32 volatile*, u32);
|
||||||
Optional<u32> safe_atomic_exchange_relaxed(volatile u32*, u32) { return {}; }
|
Optional<u32> safe_atomic_exchange_relaxed(u32 volatile*, u32) { return {}; }
|
||||||
|
|
||||||
bool safe_atomic_store_relaxed(volatile u32*, u32);
|
bool safe_atomic_store_relaxed(u32 volatile*, u32);
|
||||||
bool safe_atomic_store_relaxed(volatile u32*, u32) { return {}; }
|
bool safe_atomic_store_relaxed(u32 volatile*, u32) { return {}; }
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -79,12 +79,12 @@ extern "C" {
|
||||||
|
|
||||||
FlatPtr kernel_mapping_base;
|
FlatPtr kernel_mapping_base;
|
||||||
|
|
||||||
void kernelputstr(const char*, size_t);
|
void kernelputstr(char const*, size_t);
|
||||||
void kernelputstr(const char*, size_t) { }
|
void kernelputstr(char const*, size_t) { }
|
||||||
|
|
||||||
void kernelcriticalputstr(const char*, size_t);
|
void kernelcriticalputstr(char const*, size_t);
|
||||||
void kernelcriticalputstr(const char*, size_t) { }
|
void kernelcriticalputstr(char const*, size_t) { }
|
||||||
|
|
||||||
void kernelearlyputstr(const char*, size_t);
|
void kernelearlyputstr(char const*, size_t);
|
||||||
void kernelearlyputstr(const char*, size_t) { }
|
void kernelearlyputstr(char const*, size_t) { }
|
||||||
}
|
}
|
||||||
|
|
|
@ -164,7 +164,7 @@ extern "C" const u32 serenity_boot_logo_size;
|
||||||
|
|
||||||
static void draw_logo()
|
static void draw_logo()
|
||||||
{
|
{
|
||||||
Prekernel::BootPPMParser logo_parser(reinterpret_cast<const u8*>(&serenity_boot_logo_start), serenity_boot_logo_size);
|
Prekernel::BootPPMParser logo_parser(reinterpret_cast<u8 const*>(&serenity_boot_logo_start), serenity_boot_logo_size);
|
||||||
if (!logo_parser.parse()) {
|
if (!logo_parser.parse()) {
|
||||||
Prekernel::warnln("Invalid boot logo.");
|
Prekernel::warnln("Invalid boot logo.");
|
||||||
return;
|
return;
|
||||||
|
|
|
@ -33,8 +33,8 @@ inline u32 get_iopl_from_eflags(u32 eflags)
|
||||||
return (eflags & iopl_mask) >> 12;
|
return (eflags & iopl_mask) >> 12;
|
||||||
}
|
}
|
||||||
|
|
||||||
const DescriptorTablePointer& get_gdtr();
|
DescriptorTablePointer const& get_gdtr();
|
||||||
const DescriptorTablePointer& get_idtr();
|
DescriptorTablePointer const& get_idtr();
|
||||||
|
|
||||||
void handle_crash(RegisterState const&, char const* description, int signal, bool out_of_memory = false);
|
void handle_crash(RegisterState const&, char const* description, int signal, bool out_of_memory = false);
|
||||||
|
|
||||||
|
@ -48,7 +48,7 @@ constexpr FlatPtr page_base_of(FlatPtr address)
|
||||||
return address & PAGE_MASK;
|
return address & PAGE_MASK;
|
||||||
}
|
}
|
||||||
|
|
||||||
inline FlatPtr page_base_of(const void* address)
|
inline FlatPtr page_base_of(void const* address)
|
||||||
{
|
{
|
||||||
return page_base_of((FlatPtr)address);
|
return page_base_of((FlatPtr)address);
|
||||||
}
|
}
|
||||||
|
@ -58,7 +58,7 @@ constexpr FlatPtr offset_in_page(FlatPtr address)
|
||||||
return address & (~PAGE_MASK);
|
return address & (~PAGE_MASK);
|
||||||
}
|
}
|
||||||
|
|
||||||
inline FlatPtr offset_in_page(const void* address)
|
inline FlatPtr offset_in_page(void const* address)
|
||||||
{
|
{
|
||||||
return offset_in_page((FlatPtr)address);
|
return offset_in_page((FlatPtr)address);
|
||||||
}
|
}
|
||||||
|
|
|
@ -133,12 +133,12 @@ public:
|
||||||
|
|
||||||
bool is_null() const { return m_address == 0; }
|
bool is_null() const { return m_address == 0; }
|
||||||
|
|
||||||
bool operator==(const IOAddress& other) const { return m_address == other.m_address; }
|
bool operator==(IOAddress const& other) const { return m_address == other.m_address; }
|
||||||
bool operator!=(const IOAddress& other) const { return m_address != other.m_address; }
|
bool operator!=(IOAddress const& other) const { return m_address != other.m_address; }
|
||||||
bool operator>(const IOAddress& other) const { return m_address > other.m_address; }
|
bool operator>(IOAddress const& other) const { return m_address > other.m_address; }
|
||||||
bool operator>=(const IOAddress& other) const { return m_address >= other.m_address; }
|
bool operator>=(IOAddress const& other) const { return m_address >= other.m_address; }
|
||||||
bool operator<(const IOAddress& other) const { return m_address < other.m_address; }
|
bool operator<(IOAddress const& other) const { return m_address < other.m_address; }
|
||||||
bool operator<=(const IOAddress& other) const { return m_address <= other.m_address; }
|
bool operator<=(IOAddress const& other) const { return m_address <= other.m_address; }
|
||||||
|
|
||||||
private:
|
private:
|
||||||
u16 m_address { 0 };
|
u16 m_address { 0 };
|
||||||
|
|
|
@ -29,7 +29,7 @@ public:
|
||||||
void clear() { m_raw = 0; }
|
void clear() { m_raw = 0; }
|
||||||
|
|
||||||
u64 raw() const { return m_raw; }
|
u64 raw() const { return m_raw; }
|
||||||
void copy_from(Badge<Memory::PageDirectory>, const PageDirectoryEntry& other) { m_raw = other.m_raw; }
|
void copy_from(Badge<Memory::PageDirectory>, PageDirectoryEntry const& other) { m_raw = other.m_raw; }
|
||||||
|
|
||||||
enum Flags {
|
enum Flags {
|
||||||
Present = 1 << 0,
|
Present = 1 << 0,
|
||||||
|
|
Some files were not shown because too many files have changed in this diff Show more
Loading…
Reference in a new issue