More const-correctness in cooked indexer

I noticed that iterating over the index yields non-const
cooked_index_entry objects.  However, after finalization, they should
not be modified.  This patch enforces this by adding const where
needed.

v2 makes the find, all_entries, and wait methods const as well.
This commit is contained in:
Tom Tromey
2023-01-27 09:20:43 -07:00
parent d919513153
commit 35e1763185
2 changed files with 13 additions and 12 deletions

View File

@ -355,11 +355,11 @@ cooked_index::do_finalize ()
/* See cooked-index.h. */ /* See cooked-index.h. */
cooked_index::range cooked_index::range
cooked_index::find (const std::string &name, bool completing) cooked_index::find (const std::string &name, bool completing) const
{ {
wait (); wait ();
auto lower = std::lower_bound (m_entries.begin (), m_entries.end (), name, auto lower = std::lower_bound (m_entries.cbegin (), m_entries.cend (), name,
[=] (const cooked_index_entry *entry, [=] (const cooked_index_entry *entry,
const std::string &n) const std::string &n)
{ {
@ -367,7 +367,7 @@ cooked_index::find (const std::string &name, bool completing)
completing); completing);
}); });
auto upper = std::upper_bound (m_entries.begin (), m_entries.end (), name, auto upper = std::upper_bound (m_entries.cbegin (), m_entries.cend (), name,
[=] (const std::string &n, [=] (const std::string &n,
const cooked_index_entry *entry) const cooked_index_entry *entry)
{ {
@ -413,7 +413,7 @@ cooked_index_vector::get_addrmaps ()
/* See cooked-index.h. */ /* See cooked-index.h. */
cooked_index_vector::range cooked_index_vector::range
cooked_index_vector::find (const std::string &name, bool completing) cooked_index_vector::find (const std::string &name, bool completing) const
{ {
std::vector<cooked_index::range> result_range; std::vector<cooked_index::range> result_range;
result_range.reserve (m_vector.size ()); result_range.reserve (m_vector.size ());

View File

@ -217,7 +217,7 @@ public:
void finalize (); void finalize ();
/* Wait for this index's finalization to be complete. */ /* Wait for this index's finalization to be complete. */
void wait () void wait () const
{ {
m_future.wait (); m_future.wait ();
} }
@ -225,19 +225,20 @@ public:
friend class cooked_index_vector; friend class cooked_index_vector;
/* A simple range over part of m_entries. */ /* A simple range over part of m_entries. */
typedef iterator_range<std::vector<cooked_index_entry *>::iterator> range; typedef iterator_range<std::vector<cooked_index_entry *>::const_iterator>
range;
/* Return a range of all the entries. */ /* Return a range of all the entries. */
range all_entries () range all_entries () const
{ {
wait (); wait ();
return { m_entries.begin (), m_entries.end () }; return { m_entries.cbegin (), m_entries.cend () };
} }
/* Look up an entry by name. Returns a range of all matching /* Look up an entry by name. Returns a range of all matching
results. If COMPLETING is true, then a larger range, suitable results. If COMPLETING is true, then a larger range, suitable
for completion, will be returned. */ for completion, will be returned. */
range find (const std::string &name, bool completing); range find (const std::string &name, bool completing) const;
private: private:
@ -317,7 +318,7 @@ public:
/* Wait until the finalization of the entire cooked_index_vector is /* Wait until the finalization of the entire cooked_index_vector is
done. */ done. */
void wait () void wait () const
{ {
for (auto &item : m_vector) for (auto &item : m_vector)
item->wait (); item->wait ();
@ -340,10 +341,10 @@ public:
/* Look up an entry by name. Returns a range of all matching /* Look up an entry by name. Returns a range of all matching
results. If COMPLETING is true, then a larger range, suitable results. If COMPLETING is true, then a larger range, suitable
for completion, will be returned. */ for completion, will be returned. */
range find (const std::string &name, bool completing); range find (const std::string &name, bool completing) const;
/* Return a range of all the entries. */ /* Return a range of all the entries. */
range all_entries () range all_entries () const
{ {
std::vector<cooked_index::range> result_range; std::vector<cooked_index::range> result_range;
result_range.reserve (m_vector.size ()); result_range.reserve (m_vector.size ());