Replace inf_threads_iterator with next_iterator

This changes inf_threads_iterator and some range adapters in
thread-iter.h to use next_iterator and next_adapter instead.

gdb/ChangeLog
2019-01-10  Tom Tromey  <tom@tromey.com>

	* thread-iter.h (inf_threads_iterator): Use next_iterator.
	(basic_inf_threads_range): Remove.
	(inf_threads_range, inf_non_exited_threads_range)
	(safe_inf_threads_range): Use next_adapter.
This commit is contained in:
Tom Tromey 2019-01-10 10:50:43 -07:00
parent b56f80d8b2
commit 7cf47dc466
2 changed files with 12 additions and 60 deletions

View File

@ -1,3 +1,10 @@
2019-01-10 Tom Tromey <tom@tromey.com>
* thread-iter.h (inf_threads_iterator): Use next_iterator.
(basic_inf_threads_range): Remove.
(inf_threads_range, inf_non_exited_threads_range)
(safe_inf_threads_range): Use next_adapter.
2019-01-10 Keith Seitz <keiths@redhat.com>
PR gdb/23712

View File

@ -20,68 +20,13 @@
#define THREAD_ITER_H
#include "common/filtered-iterator.h"
#include "common/next-iterator.h"
#include "common/safe-iterator.h"
/* A forward iterator that iterates over a given inferior's
threads. */
class inf_threads_iterator
{
public:
typedef inf_threads_iterator self_type;
typedef struct thread_info *value_type;
typedef struct thread_info *&reference;
typedef struct thread_info **pointer;
typedef std::forward_iterator_tag iterator_category;
typedef int difference_type;
/* Create an iterator pointing at HEAD. This takes a thread pointer
instead of an inferior pointer to avoid circular dependencies
between the thread and inferior header files. */
explicit inf_threads_iterator (struct thread_info *head)
: m_thr (head)
{}
/* Create a one-past-end iterator. */
inf_threads_iterator ()
: m_thr (nullptr)
{}
inf_threads_iterator& operator++ ()
{
m_thr = m_thr->next;
return *this;
}
thread_info *operator* () const { return m_thr; }
bool operator!= (const inf_threads_iterator &other) const
{ return m_thr != other.m_thr; }
private:
/* The currently-iterated thread. NULL if we reached the end of the
list. */
thread_info *m_thr;
};
/* A range adapter that makes it possible to iterate over an
inferior's thread list with range-for. */
template<typename Iterator>
struct basic_inf_threads_range
{
friend struct inferior;
private:
explicit basic_inf_threads_range (struct thread_info *head)
: m_head (head)
{}
public:
Iterator begin () const { return Iterator (m_head); }
Iterator end () const { return Iterator (); }
private:
thread_info *m_head;
};
using inf_threads_iterator = next_iterator<thread_info>;
/* A forward iterator that iterates over all threads of all
inferiors. */
@ -223,19 +168,19 @@ using safe_inf_threads_iterator
of an inferior with range-for. */
using inf_threads_range
= basic_inf_threads_range<inf_threads_iterator>;
= next_adapter<thread_info, inf_threads_iterator>;
/* A range adapter that makes it possible to iterate over all
non-exited threads of an inferior with range-for. */
using inf_non_exited_threads_range
= basic_inf_threads_range<inf_non_exited_threads_iterator>;
= next_adapter<thread_info, inf_non_exited_threads_iterator>;
/* A range adapter that makes it possible to iterate over all threads
of an inferior with range-for, safely. */
using safe_inf_threads_range
= basic_inf_threads_range<safe_inf_threads_iterator>;
= next_adapter<thread_info, safe_inf_threads_iterator>;
/* A range adapter that makes it possible to iterate over all threads
of all inferiors with range-for. */