mirror of
https://github.com/LadybirdBrowser/ladybird.git
synced 2025-04-25 05:55:13 +00:00
These instances were detected by searching for files that include AK/Format.h, but don't match the regex: \\b(CheckedFormatString|critical_dmesgln|dbgln|dbgln_if|dmesgln|FormatBu ilder|__FormatIfSupported|FormatIfSupported|FormatParser|FormatString|Fo rmattable|Formatter|__format_value|HasFormatter|max_format_arguments|out |outln|set_debug_enabled|StandardFormatter|TypeErasedFormatParams|TypeEr asedParameter|VariadicFormatParams|v_critical_dmesgln|vdbgln|vdmesgln|vf ormat|vout|warn|warnln|warnln_if)\\b (Without the linebreaks.) This regex is pessimistic, so there might be more files that don't actually use any formatting functions. Observe that this revealed that Userland/Libraries/LibC/signal.cpp is missing an include. In theory, one might use LibCPP to detect things like this automatically, but let's do this one step after another.
112 lines
2.5 KiB
C++
112 lines
2.5 KiB
C++
/*
|
|
* Copyright (c) 2021, Jan de Visser <jan@de-visser.net>
|
|
*
|
|
* SPDX-License-Identifier: BSD-2-Clause
|
|
*/
|
|
|
|
#include <LibSQL/BTree.h>
|
|
#include <LibSQL/Meta.h>
|
|
|
|
namespace SQL {
|
|
|
|
BTree::BTree(Serializer& serializer, NonnullRefPtr<TupleDescriptor> const& descriptor, bool unique, u32 pointer)
|
|
: Index(serializer, descriptor, unique, pointer)
|
|
, m_root(nullptr)
|
|
{
|
|
}
|
|
|
|
BTree::BTree(Serializer& serializer, NonnullRefPtr<TupleDescriptor> const& descriptor, u32 pointer)
|
|
: BTree(serializer, descriptor, true, pointer)
|
|
{
|
|
}
|
|
|
|
BTreeIterator BTree::begin()
|
|
{
|
|
if (!m_root)
|
|
initialize_root();
|
|
VERIFY(m_root);
|
|
return BTreeIterator(m_root, -1);
|
|
}
|
|
|
|
BTreeIterator BTree::end()
|
|
{
|
|
return BTreeIterator(nullptr, -1);
|
|
}
|
|
|
|
void BTree::initialize_root()
|
|
{
|
|
if (pointer()) {
|
|
if (serializer().has_block(pointer())) {
|
|
serializer().get_block(pointer());
|
|
m_root = serializer().make_and_deserialize<TreeNode>(*this, pointer());
|
|
} else {
|
|
m_root = make<TreeNode>(*this, nullptr, pointer());
|
|
}
|
|
} else {
|
|
set_pointer(new_record_pointer());
|
|
m_root = make<TreeNode>(*this, nullptr, pointer());
|
|
if (on_new_root)
|
|
on_new_root();
|
|
}
|
|
m_root->dump_if(0, "initialize_root");
|
|
}
|
|
|
|
TreeNode* BTree::new_root()
|
|
{
|
|
set_pointer(new_record_pointer());
|
|
m_root = make<TreeNode>(*this, nullptr, m_root.leak_ptr(), pointer());
|
|
serializer().serialize_and_write(*m_root.ptr());
|
|
if (on_new_root)
|
|
on_new_root();
|
|
return m_root;
|
|
}
|
|
|
|
bool BTree::insert(Key const& key)
|
|
{
|
|
if (!m_root)
|
|
initialize_root();
|
|
VERIFY(m_root);
|
|
return m_root->insert(key);
|
|
}
|
|
|
|
bool BTree::update_key_pointer(Key const& key)
|
|
{
|
|
if (!m_root)
|
|
initialize_root();
|
|
VERIFY(m_root);
|
|
return m_root->update_key_pointer(key);
|
|
}
|
|
|
|
Optional<u32> BTree::get(Key& key)
|
|
{
|
|
if (!m_root)
|
|
initialize_root();
|
|
VERIFY(m_root);
|
|
return m_root->get(key);
|
|
}
|
|
|
|
BTreeIterator BTree::find(Key const& key)
|
|
{
|
|
if (!m_root)
|
|
initialize_root();
|
|
VERIFY(m_root);
|
|
for (auto node = m_root->node_for(key); node; node = node->up()) {
|
|
for (auto ix = 0u; ix < node->size(); ix++) {
|
|
auto match = (*node)[ix].match(key);
|
|
if (match == 0)
|
|
return BTreeIterator(node, (int)ix);
|
|
else if (match > 0)
|
|
return end();
|
|
}
|
|
}
|
|
return end();
|
|
}
|
|
|
|
void BTree::list_tree()
|
|
{
|
|
if (!m_root)
|
|
initialize_root();
|
|
m_root->list_node(0);
|
|
}
|
|
|
|
}
|