mirror of
https://github.com/LadybirdBrowser/ladybird.git
synced 2024-12-02 04:20:28 +00:00
AK: Make HashMap::get(Key) return an Optional<Value>.
This allows HashMap::get() to be used for value types that cannot be default constructed (e.g NonnullOwnPtr.)
This commit is contained in:
parent
e2798d6208
commit
1d0b464618
Notes:
sideshowbarker
2024-07-19 13:04:18 +09:00
Author: https://github.com/awesomekling Commit: https://github.com/SerenityOS/serenity/commit/1d0b4646180
10 changed files with 27 additions and 17 deletions
15
AK/HashMap.h
15
AK/HashMap.h
|
@ -1,6 +1,7 @@
|
|||
#pragma once
|
||||
|
||||
#include <AK/HashTable.h>
|
||||
#include <AK/Optional.h>
|
||||
#include <AK/StdLibExtras.h>
|
||||
#include <AK/Vector.h>
|
||||
#include <AK/kstdio.h>
|
||||
|
@ -51,21 +52,27 @@ public:
|
|||
|
||||
IteratorType begin() { return m_table.begin(); }
|
||||
IteratorType end() { return m_table.end(); }
|
||||
IteratorType find(const K& key) { return m_table.find(KeyTraits::hash(key), [&](auto& entry) { return KeyTraits::equals(key, entry.key); }); }
|
||||
IteratorType find(const K& key)
|
||||
{
|
||||
return m_table.find(KeyTraits::hash(key), [&](auto& entry) { return KeyTraits::equals(key, entry.key); });
|
||||
}
|
||||
|
||||
ConstIteratorType begin() const { return m_table.begin(); }
|
||||
ConstIteratorType end() const { return m_table.end(); }
|
||||
ConstIteratorType find(const K& key) const { return m_table.find(KeyTraits::hash(key), [&](auto& entry) { return KeyTraits::equals(key, entry.key); }); }
|
||||
ConstIteratorType find(const K& key) const
|
||||
{
|
||||
return m_table.find(KeyTraits::hash(key), [&](auto& entry) { return KeyTraits::equals(key, entry.key); });
|
||||
}
|
||||
|
||||
void ensure_capacity(int capacity) { m_table.ensure_capacity(capacity); }
|
||||
|
||||
void dump() const { m_table.dump(); }
|
||||
|
||||
V get(const K& key) const
|
||||
Optional<V> get(const K& key) const
|
||||
{
|
||||
auto it = find(key);
|
||||
if (it == end())
|
||||
return V();
|
||||
return {};
|
||||
return (*it).value;
|
||||
}
|
||||
|
||||
|
|
|
@ -103,7 +103,9 @@ public:
|
|||
return fallback;
|
||||
}
|
||||
|
||||
operator bool() const { return has_value(); }
|
||||
|
||||
private:
|
||||
char m_storage[sizeof(T)] __attribute__((aligned(sizeof(T))));
|
||||
char m_storage[sizeof(T)];
|
||||
bool m_has_value { false };
|
||||
};
|
||||
|
|
|
@ -184,7 +184,8 @@ int main(int argc, char** argv)
|
|||
font_menu->add_action(GAction::create(font_name, [&terminal, &config](const GAction& action) {
|
||||
terminal.set_font(GFontDatabase::the().get_by_name(action.text()));
|
||||
auto metadata = GFontDatabase::the().get_metadata_by_name(action.text());
|
||||
config->write_entry("Text", "Font", metadata.path);
|
||||
ASSERT(metadata.has_value());
|
||||
config->write_entry("Text", "Font", metadata.value().path);
|
||||
config->sync();
|
||||
terminal.force_repaint();
|
||||
}));
|
||||
|
|
|
@ -93,7 +93,7 @@ VBWidget* VBForm::widget_at(const Point& position)
|
|||
auto* gwidget = child_at(position);
|
||||
if (!gwidget)
|
||||
return nullptr;
|
||||
return m_gwidget_map.get(gwidget);
|
||||
return m_gwidget_map.get(gwidget).value_or(nullptr);
|
||||
}
|
||||
|
||||
void VBForm::grabber_mousedown_event(GMouseEvent& event, Direction grabber)
|
||||
|
|
|
@ -29,7 +29,7 @@ KParams::KParams(const String& cmdline)
|
|||
|
||||
String KParams::get(const String& key) const
|
||||
{
|
||||
return m_params.get(key);
|
||||
return m_params.get(key).value_or({});
|
||||
}
|
||||
|
||||
bool KParams::has(const String& key) const
|
||||
|
|
|
@ -10,7 +10,7 @@ bool CArgsParserResult::is_present(const String& arg_name) const
|
|||
|
||||
String CArgsParserResult::get(const String& arg_name) const
|
||||
{
|
||||
return m_args.get(arg_name);
|
||||
return m_args.get(arg_name).value_or({});
|
||||
}
|
||||
|
||||
const Vector<String>& CArgsParserResult::get_single_values() const
|
||||
|
|
|
@ -92,7 +92,7 @@ void CHttpJob::on_socket_connected()
|
|||
buffer.append(payload.pointer(), payload.size());
|
||||
|
||||
bool ok;
|
||||
if (buffer.size() >= m_headers.get("Content-Length").to_int(ok) && ok) {
|
||||
if (buffer.size() >= m_headers.get("Content-Length").value_or("0").to_int(ok) && ok) {
|
||||
m_state = State::Finished;
|
||||
break;
|
||||
}
|
||||
|
|
|
@ -266,7 +266,7 @@ void GWindowServerConnection::postprocess_bundles(Vector<IncomingMessageBundle>&
|
|||
}
|
||||
switch (event.type) {
|
||||
case WSAPI_ServerMessage::Type::Paint:
|
||||
if (Size(event.paint.window_size) != latest_paint_size_for_window_id.get(event.window_id)) {
|
||||
if (Size(event.paint.window_size) != latest_paint_size_for_window_id.get(event.window_id).value_or({})) {
|
||||
++coalesced_paints;
|
||||
break;
|
||||
}
|
||||
|
@ -295,7 +295,7 @@ void GWindowServerConnection::postprocess_bundles(Vector<IncomingMessageBundle>&
|
|||
handle_window_entered_or_left_event(event, *window);
|
||||
break;
|
||||
case WSAPI_ServerMessage::Type::WindowResized:
|
||||
if (Size(event.window.rect.size) != latest_size_for_window_id.get(event.window_id)) {
|
||||
if (Size(event.window.rect.size) != latest_size_for_window_id.get(event.window_id).value_or({})) {
|
||||
++coalesced_resizes;
|
||||
break;
|
||||
}
|
||||
|
|
|
@ -20,10 +20,10 @@ public:
|
|||
void for_each_font(Function<void(const StringView&)>);
|
||||
void for_each_fixed_width_font(Function<void(const StringView&)>);
|
||||
|
||||
Metadata get_metadata_by_name(const StringView& name) const
|
||||
Optional<Metadata> get_metadata_by_name(const StringView& name) const
|
||||
{
|
||||
return m_name_to_metadata.get(name);
|
||||
};
|
||||
}
|
||||
|
||||
private:
|
||||
GFontDatabase();
|
||||
|
|
|
@ -157,9 +157,9 @@ int main(int argc, char** argv)
|
|||
for (auto& key : dns_custom_hostnames.keys()) {
|
||||
dbgprintf("Known hostname: '%s'\n", key.characters());
|
||||
}
|
||||
if (dns_custom_hostnames.contains(hostname)) {
|
||||
responses.append(dns_custom_hostnames.get(hostname));
|
||||
dbgprintf("LookupServer: Found preconfigured host (from /etc/hosts): %s\n", responses[0].characters());
|
||||
if (auto known_host = dns_custom_hostnames.get(hostname)) {
|
||||
responses.append(known_host.value());
|
||||
dbg() << "LookupServer: Found preconfigured host (from /etc/hosts): " << known_host.value();
|
||||
} else if (!hostname.is_empty()) {
|
||||
bool did_timeout;
|
||||
int retries = 3;
|
||||
|
|
Loading…
Reference in a new issue