mirror of
https://github.com/bminor/binutils-gdb.git
synced 2025-12-26 17:18:55 +00:00
Remove linespec.c:symtab_collector class
linespec.c has a symtab_collector class that is readily replaced by a lambda. I think the result is more clear. I considered using the unordered_dense 'extract' method as well, to make the code a bit more efficient -- but it wasn't clear to me if the ordering of the vector mattered, and so I've just added a comment. Reviewed-By: Guinevere Larsen <guinevere@redhat.com>
This commit is contained in:
@@ -3602,43 +3602,6 @@ find_method (struct linespec_state *self,
|
||||
|
||||
|
||||
|
||||
namespace {
|
||||
|
||||
/* This function object is a callback for iterate_over_symtabs, used
|
||||
when collecting all matching symtabs. */
|
||||
|
||||
class symtab_collector
|
||||
{
|
||||
public:
|
||||
symtab_collector () = default;
|
||||
|
||||
DISABLE_COPY_AND_ASSIGN (symtab_collector);
|
||||
|
||||
/* Callable as a symbol_found_callback_ftype callback. */
|
||||
bool operator () (struct symtab *symtab)
|
||||
{
|
||||
if (m_symtab_table.insert (symtab).second)
|
||||
m_symtabs.push_back (symtab);
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
/* Return an rvalue reference to the collected symtabs. */
|
||||
std::vector<symtab *> &&release_symtabs ()
|
||||
{
|
||||
return std::move (m_symtabs);
|
||||
}
|
||||
|
||||
private:
|
||||
/* The result vector of symtabs. */
|
||||
std::vector<symtab *> m_symtabs;
|
||||
|
||||
/* This is used to ensure the symtabs are unique. */
|
||||
gdb::unordered_set<const symtab *> m_symtab_table;
|
||||
};
|
||||
|
||||
} // namespace
|
||||
|
||||
/* Given a file name, return a list of all matching symtabs. If
|
||||
SEARCH_PSPACE is not NULL, the search is restricted to just that
|
||||
program space. */
|
||||
@@ -3647,7 +3610,17 @@ static std::vector<symtab *>
|
||||
collect_symtabs_from_filename (const char *file,
|
||||
struct program_space *search_pspace)
|
||||
{
|
||||
symtab_collector collector;
|
||||
/* The result vector of symtabs. */
|
||||
std::vector<symtab *> symtabs;
|
||||
/* This is used to ensure the symtabs are unique. */
|
||||
gdb::unordered_set<const symtab *> symtab_table;
|
||||
|
||||
auto collector = [&] (struct symtab *symtab)
|
||||
{
|
||||
if (symtab_table.insert (symtab).second)
|
||||
symtabs.push_back (symtab);
|
||||
return false;
|
||||
};
|
||||
|
||||
/* Find that file's data. */
|
||||
if (search_pspace == NULL)
|
||||
@@ -3663,7 +3636,10 @@ collect_symtabs_from_filename (const char *file,
|
||||
else
|
||||
iterate_over_symtabs (search_pspace, file, collector);
|
||||
|
||||
return collector.release_symtabs ();
|
||||
/* It is tempting to use the unordered_dense 'extract' method here,
|
||||
and remove the separate vector -- but it's unclear if ordering
|
||||
matters. */
|
||||
return symtabs;
|
||||
}
|
||||
|
||||
/* Return all the symtabs associated to the FILENAME. If SEARCH_PSPACE is
|
||||
|
||||
Reference in New Issue
Block a user