/* Definitions for symbol file management in GDB.
- Copyright (C) 1992-2018 Free Software Foundation, Inc.
+ Copyright (C) 1992-2019 Free Software Foundation, Inc.
This file is part of GDB.
#include "registry.h"
#include "gdb_bfd.h"
#include <vector>
+#include "common/next-iterator.h"
+#include "common/safe-iterator.h"
struct bcache;
struct htab;
void *cb_data, struct objfile *current_objfile);
\f
-/* Traverse all object files in the current program space.
- ALL_OBJFILES_SAFE works even if you delete the objfile during the
- traversal. */
+/* An iterarable object that can be used to iterate over all
+ objfiles. The basic use is in a foreach, like:
-/* Traverse all object files in program space SS. */
+ for (objfile *objf : all_objfiles (pspace)) { ... } */
-#define ALL_PSPACE_OBJFILES(ss, obj) \
- for ((obj) = ss->objfiles; (obj) != NULL; (obj) = (obj)->next)
+class all_objfiles : public next_adapter<struct objfile>
+{
+public:
+
+ explicit all_objfiles (struct program_space *pspace)
+ : next_adapter<struct objfile> (pspace->objfiles)
+ {
+ }
+};
+
+/* An iterarable object that can be used to iterate over all
+ objfiles. The basic use is in a foreach, like:
+
+ for (objfile *objf : all_objfiles_safe (pspace)) { ... }
+
+ This variant uses a basic_safe_iterator so that objfiles can be
+ deleted during iteration. */
+
+class all_objfiles_safe
+ : public next_adapter<struct objfile,
+ basic_safe_iterator<next_iterator<objfile>>>
+{
+public:
+
+ explicit all_objfiles_safe (struct program_space *pspace)
+ : next_adapter<struct objfile,
+ basic_safe_iterator<next_iterator<objfile>>>
+ (pspace->objfiles)
+ {
+ }
+};
+
+
+/* Traverse all object files in the current program space. */
#define ALL_OBJFILES(obj) \
for ((obj) = current_program_space->objfiles; \
(obj) != NULL; \
(obj) = (obj)->next)
-#define ALL_OBJFILES_SAFE(obj,nxt) \
- for ((obj) = current_program_space->objfiles; \
- (obj) != NULL? ((nxt)=(obj)->next,1) :0; \
- (obj) = (nxt))
-
/* Traverse all symtabs in one objfile. */
#define ALL_OBJFILE_FILETABS(objfile, cu, s) \