[binutils-gdb] gdbsupport: remove variadicity from filtered_iterator constructor
Simon Marchi
simark@sourceware.org
Tue Oct 7 20:23:14 GMT 2025
https://sourceware.org/git/gitweb.cgi?p=binutils-gdb.git;h=a65d188303c757b9e7bbb461c74100b2994783f6
commit a65d188303c757b9e7bbb461c74100b2994783f6
Author: Simon Marchi <simon.marchi@efficios.com>
Date: Wed Sep 3 10:50:04 2025 -0400
gdbsupport: remove variadicity from filtered_iterator constructor
For the same reason as the previous patches (making things easier to
understand, at the cost of being more explicit), remove
filtered_iterator's variadic constructor, forcing the callers to pass
already built underlying iterators.
Change-Id: I1a9b6d43f3f087579b61b90b6f8f4128d66e19a1
Approved-By: Tom Tromey <tom@tromey.com>
Diff:
---
gdb/breakpoint.c | 9 +++++++--
gdb/inferior.h | 10 ++++++----
gdb/thread-iter.h | 7 ++++++-
gdb/unittests/filtered_iterator-selftests.c | 17 +++++++++++------
gdbsupport/filtered-iterator.h | 15 ++++++++-------
5 files changed, 38 insertions(+), 20 deletions(-)
diff --git a/gdb/breakpoint.c b/gdb/breakpoint.c
index 6ee0cde10df..bfcfc2404b0 100644
--- a/gdb/breakpoint.c
+++ b/gdb/breakpoint.c
@@ -723,8 +723,13 @@ all_breakpoints_safe ()
tracepoint_range
all_tracepoints ()
{
- return tracepoint_range (tracepoint_iterator (breakpoint_chain.begin ()),
- tracepoint_iterator (breakpoint_chain.end ()));
+ breakpoint_iterator begin (breakpoint_chain.begin ());
+ breakpoint_iterator end (breakpoint_chain.end ());
+ tracepoint_iterator tracepoint_begin (std::move (begin), end);
+ tracepoint_iterator tracepoint_end (end, end);
+
+ return tracepoint_range (std::move (tracepoint_begin),
+ std::move (tracepoint_end));
}
/* Array is sorted by bp_location_ptr_is_less_than - primarily by the
diff --git a/gdb/inferior.h b/gdb/inferior.h
index 2e396ae11ce..5b499a207b4 100644
--- a/gdb/inferior.h
+++ b/gdb/inferior.h
@@ -487,9 +487,10 @@ public:
*/
inf_non_exited_threads_range non_exited_threads ()
{
- inf_non_exited_threads_iterator begin (this->thread_list.begin ());
+ inf_threads_iterator begin (this->thread_list.begin ());
+ inf_non_exited_threads_iterator filtered_begin (std::move (begin));
- return inf_non_exited_threads_range (std::move (begin));
+ return inf_non_exited_threads_range (std::move (filtered_begin));
}
/* Like inferior::threads(), but returns a range adapter that can be
@@ -860,9 +861,10 @@ all_inferiors (process_stratum_target *proc_target = nullptr)
inline all_non_exited_inferiors_range
all_non_exited_inferiors (process_stratum_target *proc_target = nullptr)
{
- all_non_exited_inferiors_iterator begin (proc_target, inferior_list);
+ all_inferiors_iterator begin (proc_target, inferior_list);
+ all_non_exited_inferiors_iterator filtered_begin (std::move (begin));
- return all_non_exited_inferiors_range (std::move (begin));
+ return all_non_exited_inferiors_range (std::move (filtered_begin));
}
/* Prune away automatically added inferiors that aren't required
diff --git a/gdb/thread-iter.h b/gdb/thread-iter.h
index 1d4c9b2c7d2..cdf9b2df530 100644
--- a/gdb/thread-iter.h
+++ b/gdb/thread-iter.h
@@ -237,7 +237,12 @@ public:
{}
all_non_exited_threads_iterator begin () const
- { return all_non_exited_threads_iterator (m_filter_target, m_filter_ptid); }
+ {
+ all_matching_threads_iterator begin (m_filter_target, m_filter_ptid);
+
+ return all_non_exited_threads_iterator (std::move (begin));
+ }
+
all_non_exited_threads_iterator end () const
{ return all_non_exited_threads_iterator (); }
diff --git a/gdb/unittests/filtered_iterator-selftests.c b/gdb/unittests/filtered_iterator-selftests.c
index c04cae4963e..455caf2649c 100644
--- a/gdb/unittests/filtered_iterator-selftests.c
+++ b/gdb/unittests/filtered_iterator-selftests.c
@@ -115,12 +115,15 @@ test_filtered_iterator ()
std::vector<int> even_ints;
const std::vector<int> expected_even_ints { 4, 4, 6, 8 };
+ int_array_iterator begin (array, ARRAY_SIZE (array));
+ int_array_iterator end;
filtered_iterator<int_array_iterator, even_numbers_only>
- iter (array, ARRAY_SIZE (array));
- filtered_iterator<int_array_iterator, even_numbers_only> end;
+ filtered_iter (begin, end);
+ filtered_iterator<int_array_iterator, even_numbers_only>
+ filtered_end (end, end);
- for (; iter != end; ++iter)
- even_ints.push_back (*iter);
+ for (; filtered_iter != filtered_end; ++filtered_iter)
+ even_ints.push_back (*filtered_iter);
SELF_CHECK (even_ints == expected_even_ints);
}
@@ -152,10 +155,12 @@ test_filtered_iterator_eq ()
{
int array[] = { 4, 4, 5, 6, 7, 8, 9 };
+ int_array_iterator begin (array, ARRAY_SIZE (array));
+ int_array_iterator end;
filtered_iterator<int_array_iterator, even_numbers_only>
- iter1(array, ARRAY_SIZE (array));
+ iter1 (begin, end);
filtered_iterator<int_array_iterator, even_numbers_only>
- iter2(array, ARRAY_SIZE (array));
+ iter2 (begin, end);
/* They start equal. */
SELF_CHECK (iter1 == iter2);
diff --git a/gdbsupport/filtered-iterator.h b/gdbsupport/filtered-iterator.h
index 4952582358b..872bdebdbf0 100644
--- a/gdbsupport/filtered-iterator.h
+++ b/gdbsupport/filtered-iterator.h
@@ -37,18 +37,19 @@ public:
using difference_type
= typename std::iterator_traits<BaseIterator>::difference_type;
- /* Construct by forwarding all arguments to the underlying
- iterator. */
- template<typename... Args>
- explicit filtered_iterator (Args &&...args)
- : m_it (std::forward<Args> (args)...)
- { skip_filtered (); }
+ /* Construct by providing the begin underlying iterators. The end iterator
+ is default-constructed. */
+ filtered_iterator (BaseIterator begin)
+ : filtered_iterator (std::move (begin), BaseIterator {})
+ {}
+ /* Construct by providing begin and end underlying iterators. */
filtered_iterator (BaseIterator begin, BaseIterator end)
: m_it (std::move (begin)), m_end (std::move (end))
{ skip_filtered (); }
- /* Create a one-past-end iterator. */
+ /* Create a one-past-end iterator. The underlying end iterator is obtained
+ by default-constructing. */
filtered_iterator () = default;
/* Need these as the variadic constructor would be a better match
More information about the Gdb-cvs
mailing list