diff options
Diffstat (limited to 'src/emu/debug/debugvw.h')
-rw-r--r-- | src/emu/debug/debugvw.h | 36 |
1 files changed, 24 insertions, 12 deletions
diff --git a/src/emu/debug/debugvw.h b/src/emu/debug/debugvw.h index 374af7f384e..64bd5dac10a 100644 --- a/src/emu/debug/debugvw.h +++ b/src/emu/debug/debugvw.h @@ -13,6 +13,12 @@ #include "express.h" +#include <algorithm> +#include <iterator> +#include <memory> +#include <string> +#include <vector> + //************************************************************************** // CONSTANTS @@ -28,7 +34,9 @@ enum debug_view_type DVT_MEMORY, DVT_LOG, DVT_BREAK_POINTS, - DVT_WATCH_POINTS + DVT_WATCH_POINTS, + DVT_REGISTER_POINTS, + DVT_EXCEPTION_POINTS }; @@ -107,23 +115,19 @@ class debug_view_source { DISABLE_COPYING(debug_view_source); - friend class simple_list<debug_view_source>; - public: // construction/destruction - debug_view_source(const char *name, device_t *device = nullptr); + debug_view_source(std::string &&name, device_t *device = nullptr); virtual ~debug_view_source(); // getters const char *name() const { return m_name.c_str(); } - debug_view_source *next() const { return m_next; } device_t *device() const { return m_device; } private: // internal state - debug_view_source * m_next; // link to next item - std::string m_name; // name of the source item - device_t * m_device; // associated device (if applicable) + std::string const m_name; // name of the source item + device_t *const m_device; // associated device (if applicable) }; @@ -149,9 +153,16 @@ public: debug_view_xy cursor_position() { flush_updates(); return m_cursor; } bool cursor_supported() { flush_updates(); return m_supports_cursor; } bool cursor_visible() { flush_updates(); return m_cursor_visible; } + size_t source_count() const { return m_source_list.size(); } const debug_view_source *source() const { return m_source; } - const debug_view_source *first_source() const { return m_source_list.first(); } - const simple_list<debug_view_source> &source_list() const { return m_source_list; } + const debug_view_source *source(unsigned i) const { return (m_source_list.size() > i) ? m_source_list[i].get() : nullptr; } + const debug_view_source *first_source() const { return m_source_list.empty() ? nullptr : m_source_list[0].get(); } + auto source_index(const debug_view_source &source) const + { + const auto it(std::find_if(m_source_list.begin(), m_source_list.end(), [&source] (const auto &x) { return x.get() == &source; })); + return (m_source_list.end() != it) ? std::distance(m_source_list.begin(), it) : -1; + } + const std::vector<std::unique_ptr<const debug_view_source> > &source_list() const { return m_source_list; } // setters void set_visible_size(debug_view_xy size); @@ -188,7 +199,7 @@ protected: debug_view * m_next; // link to the next view debug_view_type m_type; // type of view const debug_view_source *m_source; // currently selected data source - simple_list<debug_view_source> m_source_list; // list of available data sources + std::vector<std::unique_ptr<const debug_view_source> > m_source_list; // list of available data sources // OSD data debug_view_osd_update_func m_osdupdate; // callback for the update @@ -258,12 +269,13 @@ public: u64 last_value() const { return m_result; } u64 value() { recompute(); return m_result; } const char *string() const { return m_string.c_str(); } - symbol_table *context() const { return m_parsed.symbols(); } + symbol_table &context() const { return m_parsed.symbols(); } // setters void mark_dirty() { m_dirty = true; } template <typename... Params> void set_string(Params &&... args) { m_string.assign(std::forward<Params>(args)...); m_dirty = true; } void set_context(symbol_table *context); + void set_default_base(int base) { m_parsed.set_default_base(base); } private: // internal helpers |