summaryrefslogtreecommitdiff
path: root/src/benc.h
diff options
context:
space:
mode:
authorJesper Jensen <jesper@slashwin.dk>2021-08-29 00:47:32 +0200
committerJesper Jensen <jesper@slashwin.dk>2021-08-29 00:47:32 +0200
commit5471d80c5350f764ec53733bae9d32c0a1a339e0 (patch)
tree1578cb3da331b1819a12eb3127ceb25baaa3cd36 /src/benc.h
parente00efb4381c5123699e4ef9807b67eba54ea06a0 (diff)
Add formal benc cursor
Diffstat (limited to 'src/benc.h')
-rw-r--r--src/benc.h18
1 files changed, 18 insertions, 0 deletions
diff --git a/src/benc.h b/src/benc.h
index a5734ea..be06d5e 100644
--- a/src/benc.h
+++ b/src/benc.h
@@ -27,5 +27,23 @@ bool readint(const char** loc, int64_t* val);
void benc_print(const struct benc_node* stream, size_t stream_len, int* depth);
int64_t benc_decode(const char** cursor, const char* end, int* depth, struct benc_node* stream, size_t stream_len);
+struct bcursor {
+ const char* source;
+ const char* const source_end;
+ int source_depth;
+
+ struct benc_node* const base;
+ const size_t base_len;
+
+ struct benc_node* readhead;
+ struct benc_node* end;
+};
+
+int bcur_open(struct bcursor* cursor, const char* source, const char* source_end, struct benc_node* buffer, size_t buffer_len);
+int bcur_next(struct bcursor* cursor, uint32_t steps);
+int bcur_next_sibling(struct bcursor* cursor);
+ssize_t bcur_find_key(struct bcursor* cursor, const enum benc_nodetype* keyTypes, const char** keyValues, const size_t* keyLengths, const size_t keys);
+
void skip_sibling(const struct benc_node** cursor, const struct benc_node* end);
ssize_t skip_to_key(const struct benc_node** cursor, const struct benc_node* end, const enum benc_nodetype* keyTypes, const char** keyValues, const size_t* keyLengths, const size_t keys);
+