next_range<using_direct>
block::get_using () const
{
- if (m_namespace_info == nullptr)
- return {};
- else
- return next_range<using_direct> (m_namespace_info->using_decl);
+ next_iterator<using_direct> begin (m_namespace_info != nullptr
+ ? m_namespace_info->using_decl
+ : nullptr);
+
+ return next_range<using_direct> (std::move (begin));
}
/* See block.h. */
/* Return an iterator range for this block's multidict. */
iterator_range<mdict_iterator_wrapper> multidict_symbols () const
- { return iterator_range<mdict_iterator_wrapper> (m_multidict); }
+ {
+ mdict_iterator_wrapper begin (m_multidict);
+
+ return iterator_range<mdict_iterator_wrapper> (std::move (begin));
+ }
/* Set this block's multidict. */
void set_multidict (multidictionary *multidict)
struct block_iterator m_iter;
};
-/* An iterator range for block_iterator_wrapper. */
+/* Return an iterator range for block_iterator_wrapper. */
+
+inline iterator_range<block_iterator_wrapper>
+block_iterator_range (const block *block,
+ const lookup_name_info *name = nullptr)
+{
+ block_iterator_wrapper begin (block, name);
-typedef iterator_range<block_iterator_wrapper> block_iterator_range;
+ return iterator_range<block_iterator_wrapper> (std::move (begin));
+}
/* Return true if symbol A is the best match possible for DOMAIN. */
DIE. */
next_range<die_info> children () const
{
- return next_range<die_info> (child);
+ next_iterator<die_info> begin (child);
+
+ return next_range<die_info> (std::move (begin));
}
/* DWARF-2 tag for this DIE. */
#include "gdbsupport/byte-vector.h"
#include "gdbsupport/function-view.h"
#include "gdbsupport/gdb_ref_ptr.h"
-#include "gdbsupport/iterator-range.h"
#include "gdbsupport/next-iterator.h"
/* A registry adaptor for BFD. This arranges to store the registry in
static inline gdb_bfd_section_range
gdb_bfd_sections (bfd *abfd)
{
- return gdb_bfd_section_range (abfd->sections);
+ next_iterator<asection> begin (abfd->sections);
+
+ return gdb_bfd_section_range (std::move (begin));
}
static inline gdb_bfd_section_range
gdb_bfd_sections (const gdb_bfd_ref_ptr &abfd)
{
- return gdb_bfd_section_range (abfd->sections);
+ next_iterator<asection> begin (abfd->sections);
+
+ return gdb_bfd_section_range (std::move (begin));
};
/* A wrapper for bfd_stat that acquires the per-BFD lock on ABFD. */
inline all_threads_safe_range
all_threads_safe ()
{
- return all_threads_safe_range (all_threads_iterator::begin_t {});
+ all_threads_safe_iterator begin (all_threads_iterator::begin_t {});
+
+ return all_threads_safe_range (std::move (begin));
}
extern int thread_count (process_stratum_target *proc_target);
{ .... }
*/
inf_threads_range threads ()
- { return inf_threads_range (this->thread_list.begin ()); }
+ {
+ inf_threads_iterator begin (this->thread_list.begin ());
+
+ return inf_threads_range (std::move (begin));
+ }
/* Returns a range adapter covering the inferior's non-exited
threads. Used like this:
{ .... }
*/
inf_non_exited_threads_range non_exited_threads ()
- { return inf_non_exited_threads_range (this->thread_list.begin ()); }
+ {
+ inf_non_exited_threads_iterator begin (this->thread_list.begin ());
+
+ return inf_non_exited_threads_range (std::move (begin));
+ }
/* Like inferior::threads(), but returns a range adapter that can be
used with range-for, safely. I.e., it is safe to delete the
delete &f;
*/
inline safe_inf_threads_range threads_safe ()
- { return safe_inf_threads_range (this->thread_list.begin ()); }
+ {
+ safe_inf_threads_iterator begin (this->thread_list.begin ());
+
+ return safe_inf_threads_range (std::move (begin));
+ }
/* Find (non-exited) thread PTID of this inferior. */
thread_info *find_thread (ptid_t ptid);
inline all_inferiors_safe_range
all_inferiors_safe ()
{
- return all_inferiors_safe_range (nullptr, inferior_list);
+ all_inferiors_safe_iterator begin (nullptr, inferior_list);
+
+ return all_inferiors_safe_range (std::move (begin));
}
/* Returns a range representing all inferiors, suitable to use with
inline all_inferiors_range
all_inferiors (process_stratum_target *proc_target = nullptr)
{
- return all_inferiors_range (proc_target, inferior_list);
+ all_inferiors_iterator begin (proc_target, inferior_list);
+
+ return all_inferiors_range (std::move (begin));
}
/* Return a range that can be used to walk over all inferiors with PID
inline all_non_exited_inferiors_range
all_non_exited_inferiors (process_stratum_target *proc_target = nullptr)
{
- return all_non_exited_inferiors_range (proc_target, inferior_list);
+ all_non_exited_inferiors_iterator begin (proc_target, inferior_list);
+
+ return all_non_exited_inferiors_range (std::move (begin));
}
/* Prune away automatically added inferiors that aren't required
lwp_info_range
all_lwps ()
{
- return lwp_info_range (lwp_list.begin ());
+ lwp_info_iterator begin (lwp_list.begin ());
+
+ return lwp_info_range (std::move (begin));
}
/* See linux-nat.h. */
lwp_info_safe_range
all_lwps_safe ()
{
- return lwp_info_safe_range (lwp_list.begin ());
+ return lwp_info_safe_range (all_lwps ());
}
/* Add LP to sorted-by-reverse-creation-order doubly-linked list. */
compunit_symtab_range compunits ()
{
- return compunit_symtab_range (compunit_symtabs);
+ next_iterator<compunit_symtab> begin (compunit_symtabs);
+
+ return compunit_symtab_range (std::move (begin));
}
/* A range adapter that makes it possible to iterate over all
for (objfile &objf : pspace->objfiles ()) { ... } */
objfiles_range objfiles ()
{
- return objfiles_range (objfiles_iterator (m_objfiles_list.begin ()));
+ objfiles_iterator begin (m_objfiles_list.begin ());
+
+ return objfiles_range (std::move (begin));
}
using objfiles_safe_range = basic_safe_range<objfiles_range>;
deleted during iteration. */
objfiles_safe_range objfiles_safe ()
{
- return objfiles_safe_range
- (objfiles_range (objfiles_iterator (m_objfiles_list.begin ())));
+ return objfiles_safe_range (this->objfiles ());
}
/* Iterate over all objfiles of the program space in the order that makes the
partial_symtab_range range ()
{
- return partial_symtab_range (psymtabs);
+ next_iterator<partial_symtab> begin (psymtabs);
+
+ return partial_symtab_range (std::move (begin));
}
symtab_range filetabs () const
{
- return symtab_range (m_filetabs);
+ next_iterator<symtab> begin (m_filetabs);
+
+ return symtab_range (std::move (begin));
}
void add_filetab (symtab *filetab)
static inline
ui_range all_uis ()
{
- return ui_range (ui_list);
+ next_iterator<ui> begin (ui_list);
+
+ return ui_range (std::move (begin));
}
#endif /* GDB_UI_H */
/* Create an iterator_range using BEGIN as the begin iterator.
Assume that the end iterator can be default-constructed. */
- template <typename... Args>
- iterator_range (Args &&...args)
- : m_begin (std::forward<Args> (args)...)
+ explicit iterator_range (IteratorType begin)
+ : iterator_range (std::move (begin), IteratorType {})
{}
/* Create an iterator range using explicit BEGIN and END iterators. */