aboutsummaryrefslogtreecommitdiff
path: root/editor.h
diff options
context:
space:
mode:
authorMarc André Tanner <mat@brain-dump.org>2014-08-01 11:23:50 +0200
committerMarc André Tanner <mat@brain-dump.org>2014-08-01 11:23:50 +0200
commit62ec1d8570f14aae1640c009dfe2ecfcc75ead11 (patch)
tree5cc8d911fb042faa2b603e82f3561803ca7ab73a /editor.h
parenteea17f2c606cb5f233f9809cbc7e4c84ad538052 (diff)
downloadvis-62ec1d8570f14aae1640c009dfe2ecfcc75ead11.tar.gz
vis-62ec1d8570f14aae1640c009dfe2ecfcc75ead11.tar.xz
Improve iterator API
Diffstat (limited to 'editor.h')
-rw-r--r--editor.h23
1 files changed, 17 insertions, 6 deletions
diff --git a/editor.h b/editor.h
index 97eaac5..9a109b2 100644
--- a/editor.h
+++ b/editor.h
@@ -4,12 +4,16 @@ typedef struct Editor Editor;
typedef struct Piece Piece;
typedef struct {
+ const char const *start;
+ const char const *end;
const char const *text;
- /* const */ size_t len;
const Piece const *piece;
} Iterator;
-typedef bool (*iterator_callback_t)(void*, size_t pos, const char *data, size_t len);
+#define editor_iterate(ed, it, pos) \
+ for (Iterator it = editor_iterator_get((ed), (pos)); \
+ editor_iterator_valid(&it); \
+ editor_iterator_next(&it))
Editor *editor_load(const char *file);
bool editor_insert(Editor*, size_t pos, const char *data);
@@ -20,11 +24,18 @@ bool editor_replace_raw(Editor*, size_t pos, const char *data, size_t len);
void editor_snapshot(Editor*);
bool editor_undo(Editor*);
bool editor_redo(Editor*);
-Iterator editor_iterator_get(Editor*, size_t pos);
+
+size_t editor_bytes_get(Editor*, size_t pos, size_t len, char *buf);
bool editor_iterator_valid(const Iterator*);
-void editor_iterator_next(Iterator*);
-void editor_iterator_prev(Iterator*);
-void editor_iterate(Editor*, void*, size_t pos, iterator_callback_t);
+Iterator editor_iterator_get(Editor*, size_t pos);
+bool editor_iterator_next(Iterator*);
+bool editor_iterator_prev(Iterator*);
+Iterator editor_iterator_byte_get(Editor*, size_t pos, char *byte);
+bool editor_iterator_byte_next(Iterator*, char *b);
+bool editor_iterator_byte_prev(Iterator*, char *b);
+bool editor_iterator_byte_peek(Iterator *it, char *b);
+
+size_t editor_size(Editor*);
bool editor_modified(Editor*);
int editor_save(Editor*, const char *file);
void editor_free(Editor *ed);