summaryrefslogtreecommitdiffstatshomepage
path: root/src/emu/debug/textbuf.h
diff options
context:
space:
mode:
Diffstat (limited to 'src/emu/debug/textbuf.h')
-rw-r--r--src/emu/debug/textbuf.h83
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