]> git.ipfire.org Git - thirdparty/binutils-gdb.git/commitdiff
gdbsupport: remove variadicity from filtered_iterator constructor
authorSimon Marchi <simon.marchi@efficios.com>
Wed, 3 Sep 2025 14:50:04 +0000 (10:50 -0400)
committerSimon Marchi <simon.marchi@efficios.com>
Tue, 7 Oct 2025 20:22:15 +0000 (16:22 -0400)
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>
gdb/breakpoint.c
gdb/inferior.h
gdb/thread-iter.h
gdb/unittests/filtered_iterator-selftests.c
gdbsupport/filtered-iterator.h

index 6ee0cde10dfee69ac97a7e23fff5835ebb64ecce..bfcfc2404b0bd52fb2565306840447ece04f2155 100644 (file)
@@ -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
index 2e396ae11ce18e0476219896c408db3701af47f0..5b499a207b43f93bd3df91f9ef3e0f62d1449953 100644 (file)
@@ -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
index 1d4c9b2c7d2fae0c323ae528b865c6c8696e579d..cdf9b2df5306c5bb8bb80c976dc712c8891a2991 100644 (file)
@@ -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 (); }
 
index c04cae4963e0554b03ee093a1aa0398db13cf4ba..455caf2649c8b5655106edd6c55098fd12143a05 100644 (file)
@@ -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);
index 4952582358b864e8a25cff55ba9df8a49e8bfbf9..872bdebdbf04699dde27b0abd695e8c902005020 100644 (file)
@@ -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