diff options
| author | Jesper Jensen <jesper@slashwin.dk> | 2021-08-29 00:47:32 +0200 |
|---|---|---|
| committer | Jesper Jensen <jesper@slashwin.dk> | 2021-08-29 00:47:32 +0200 |
| commit | 5471d80c5350f764ec53733bae9d32c0a1a339e0 (patch) | |
| tree | 1578cb3da331b1819a12eb3127ceb25baaa3cd36 /src/benc.h | |
| parent | e00efb4381c5123699e4ef9807b67eba54ea06a0 (diff) | |
Add formal benc cursor
Diffstat (limited to 'src/benc.h')
| -rw-r--r-- | src/benc.h | 18 |
1 files changed, 18 insertions, 0 deletions
@@ -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); + |
