mirror of
https://sourceware.org/git/binutils-gdb.git
synced 2025-01-30 12:44:10 +08:00
8f942ca8a5
Add a copy of unordered_dense.h from [1]. This file implements an efficient hash map and hash set with a nice C++ interface (a near drop-in for std::unordered_map and std::unordered_set). This is expected to be used to replace uses of `htab_t`, for improved code readability and type safety. Performance-wise, it is preferred to the std types (std::unordered_map and std::unordered_set) due to it using open addressing vs closed addressing for the std types. I chose this particular implementation because it is simple to use, it's a standalone header and it typically performs well in benchmarks I have seen (e.g. [2]). The license being MIT, my understanding is that it's not a problem to use it and re-distribute it. Add two additional files, gdbsupport/unordered_map.h and gdbsupport/unordered_set.h, which make the map and set offered by gdbsupport/unordered_dense.h available as gdb::unordered_map and gdb::unordered_set. [1] https://github.com/martinus/unordered_dense [2] https://jacksonallan.github.io/c_cpp_hash_tables_benchmark/#conclusion-which-hash-table-to-choose Change-Id: I0c7469ccf9a14540465479e58b2a5140a2440a7d Approved-By: Tom Tromey <tom@tromey.com>
37 lines
1.2 KiB
C++
37 lines
1.2 KiB
C++
/* Copyright (C) 2024 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 <http://www.gnu.org/licenses/>. */
|
|
|
|
#ifndef GDBSUPPORT_UNORDERED_SET_H
|
|
#define GDBSUPPORT_UNORDERED_SET_H
|
|
|
|
#include "unordered_dense.h"
|
|
|
|
namespace gdb
|
|
{
|
|
|
|
template<typename Key,
|
|
typename Hash = ankerl::unordered_dense::hash<Key>,
|
|
typename KeyEqual = std::equal_to<Key>>
|
|
using unordered_set
|
|
= ankerl::unordered_dense::set
|
|
<Key, Hash, KeyEqual, std::allocator<Key>,
|
|
ankerl::unordered_dense::bucket_type::standard>;
|
|
|
|
} /* namespace gdb */
|
|
|
|
#endif /* GDBSUPPORT_UNORDERED_SET_H */
|