From 5471d80c5350f764ec53733bae9d32c0a1a339e0 Mon Sep 17 00:00:00 2001 From: Jesper Jensen Date: Sun, 29 Aug 2021 00:47:32 +0200 Subject: Add formal benc cursor --- src/benc.h | 18 ++++++++++++++++++ 1 file changed, 18 insertions(+) (limited to 'src/benc.h') 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); + -- cgit v1.2.3