/* Copyright (C) 2024-2026 Free Software Foundation, Inc.
This file is part of GDB.
This program is free software; you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation; either version 3 of the License, or
(at your option) any later version.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with this program. If not, see . */
#ifndef GDBSUPPORT_UNORDERED_MAP_H
#define GDBSUPPORT_UNORDERED_MAP_H
#include "unordered_dense/unordered_dense.h"
namespace gdb
{
template,
typename KeyEqual = std::equal_to>
using unordered_map
= ankerl::unordered_dense::map
>,
ankerl::unordered_dense::bucket_type::standard>;
/* An unordered_map with std::string keys that supports transparent
lookup from std::string_view, avoiding the construction of temporary
std::string objects during lookups. std::string_view is implicitly
constructible from `const char *` and `std::string`, so it covers those
too. */
namespace detail
{
struct unordered_string_map_hash
{
using is_transparent = void;
using is_avalanching = void;
std::uint64_t operator() (std::string_view sv) const noexcept
{ return ankerl::unordered_dense::hash () (sv); }
};
struct unordered_string_map_eq
{
using is_transparent = void;
bool operator() (std::string_view lhs, std::string_view rhs) const noexcept
{ return lhs == rhs; }
};
} /* namespace detail */
template
using unordered_string_map
= gdb::unordered_map;
} /* namespace gdb */
#endif /* GDBSUPPORT_UNORDERED_MAP_H */