diff options
Diffstat (limited to 'src/emu/debug/textbuf.h')
-rw-r--r-- | src/emu/debug/textbuf.h | 83 |
1 files changed, 62 insertions, 21 deletions
diff --git a/src/emu/debug/textbuf.h b/src/emu/debug/textbuf.h index 9d42c3032ce..2ec6afca981 100644 --- a/src/emu/debug/textbuf.h +++ b/src/emu/debug/textbuf.h @@ -11,46 +11,87 @@ #ifndef MAME_EMU_DEBUG_TEXTBUF_H #define MAME_EMU_DEBUG_TEXTBUF_H +#include <memory> +#include <string_view> + #include "emucore.h" + /*************************************************************************** TYPE DEFINITIONS ***************************************************************************/ struct text_buffer; - +// helper class for iterating over the lines of a text_buffer +class text_buffer_lines +{ +private: + const text_buffer &m_buffer; + +public: + text_buffer_lines(const text_buffer& buffer) : m_buffer(buffer) { } + + class text_buffer_line_iterator + { + const text_buffer &m_buffer; + s32 m_lineptr; + public: + text_buffer_line_iterator(const text_buffer &buffer, s32 lineptr) : + m_buffer(buffer), + m_lineptr(lineptr) + { + } + + // technically this isn't a valid forward iterator, because operator * doesn't return a reference + std::string_view operator*() const; + text_buffer_line_iterator &operator++(); + + bool operator!=(const text_buffer_line_iterator& rhs) + { + return m_lineptr != rhs.m_lineptr; + } + // according to C++ spec, only != is needed; == is present for completeness. + bool operator==(const text_buffer_line_iterator& rhs) { return !operator!=(rhs); } + }; + + typedef text_buffer_line_iterator iterator; + typedef text_buffer_line_iterator const iterator_const; + + iterator begin() const; + iterator end() const; +}; /*************************************************************************** FUNCTION PROTOTYPES ***************************************************************************/ -/* allocate a new text buffer */ -text_buffer *text_buffer_alloc(u32 bytes, u32 lines); - -/* free a text buffer */ -void text_buffer_free(text_buffer *text); +// free a text buffer +struct text_buffer_deleter { void operator()(text_buffer *text) const; }; +using text_buffer_ptr = std::unique_ptr<text_buffer, text_buffer_deleter>; -/* clear a text buffer */ -void text_buffer_clear(text_buffer *text); +// allocate a new text buffer +text_buffer_ptr text_buffer_alloc(u32 bytes, u32 lines); -/* "print" data to a text buffer */ -void text_buffer_print(text_buffer *text, const char *data); +// clear a text buffer +void text_buffer_clear(text_buffer &text); -/* "print" data to a text buffer with word wrapping to a given column */ -void text_buffer_print_wrap(text_buffer *text, const char *data, int wrapcol); +// "print" data to a text buffer +void text_buffer_print(text_buffer &text, std::string_view data); -/* get the maximum width of lines seen so far */ -u32 text_buffer_max_width(text_buffer *text); +// "print" data to a text buffer with word wrapping to a given column +void text_buffer_print_wrap(text_buffer &text, std::string_view data, int wrapcol); -/* get the current number of lines in the buffer */ -u32 text_buffer_num_lines(text_buffer *text); +// get the maximum width of lines seen so far +u32 text_buffer_max_width(const text_buffer &text); -/* get an absolute sequence number for a given line */ -u32 text_buffer_line_index_to_seqnum(text_buffer *text, u32 index); +// get the current number of lines in the buffer +u32 text_buffer_num_lines(const text_buffer &text); -/* get a sequenced line from the text buffer */ -const char *text_buffer_get_seqnum_line(text_buffer *text, u32 seqnum); +// get an absolute sequence number for a given line +u32 text_buffer_line_index_to_seqnum(const text_buffer &text, u32 index); +// get a sequenced line from the text buffer +const char *text_buffer_get_seqnum_line(const text_buffer &text, u32 seqnum); -#endif /* MAME_EMU_DEBUG_TEXTBUF_H */ +#endif // MAME_EMU_DEBUG_TEXTBUF_H |