feat(lsm): iterator over items in trie
This commit is contained in:
parent
5564e23ceb
commit
f4d711365d
9 changed files with 229 additions and 8 deletions
|
|
@ -27,6 +27,7 @@ typedef enum lsm_error {
|
|||
lsm_error_null_value = 4,
|
||||
lsm_error_failed_io = 5,
|
||||
lsm_error_lock_busy = 6,
|
||||
lsm_error_done = 7,
|
||||
} lsm_error;
|
||||
|
||||
/*typedef struct lsm_string { */
|
||||
|
|
|
|||
|
|
@ -102,6 +102,6 @@ void lsm_bt_iter(lsm_bt_iterator *out, const lsm_bt *bt);
|
|||
* @return true if a new entry was returned, false if the iterator has no more
|
||||
* entries to return
|
||||
*/
|
||||
bool lsm_bt_iter_next(const void **out, char *key_out, lsm_bt_iterator *iter);
|
||||
bool lsm_bt_iter_next(void **out, char *key_out, lsm_bt_iterator *iter);
|
||||
|
||||
#endif
|
||||
|
|
|
|||
|
|
@ -1,7 +1,10 @@
|
|||
#ifndef LSM_TRIE
|
||||
#define LSM_TRIE
|
||||
|
||||
#include <stdlib.h>
|
||||
|
||||
#include "lsm.h"
|
||||
#include "lsm/bt.h"
|
||||
#include "lsm/str.h"
|
||||
|
||||
/**
|
||||
|
|
@ -9,6 +12,11 @@
|
|||
*/
|
||||
typedef struct lsm_trie lsm_trie;
|
||||
|
||||
/**
|
||||
* A node inside an `lsm_trie` trie
|
||||
*/
|
||||
typedef struct lsm_trie_node lsm_trie_node;
|
||||
|
||||
/**
|
||||
* Initialize a new trie.
|
||||
*
|
||||
|
|
@ -57,4 +65,36 @@ lsm_error lsm_trie_remove(void **out, lsm_trie *trie, const lsm_str *key);
|
|||
*/
|
||||
uint64_t lsm_trie_size(const lsm_trie *trie);
|
||||
|
||||
/**
|
||||
* Represents an in-flight iterator over a trie
|
||||
*/
|
||||
typedef struct lsm_trie_iterator lsm_trie_iterator;
|
||||
|
||||
/**
|
||||
* Initialize an iterator to iterate over all entries with keys starting
|
||||
* with the given prefix.
|
||||
*
|
||||
* @param out pointer to store iterator pointer in
|
||||
* @param trie trie to iterate
|
||||
* @param prefix prefix of the keys; a zero-length string means iterating over
|
||||
* the entire trie; NULL is interpreted as a zero-length string
|
||||
*/
|
||||
lsm_error lsm_trie_iter(lsm_trie_iterator **out, const lsm_trie *trie,
|
||||
const lsm_str *prefix);
|
||||
|
||||
/**
|
||||
* Advance the given iterator.
|
||||
*
|
||||
* @param out pointer to store next data pointer in
|
||||
* @param iter iterator to advance
|
||||
* @return `lsm_error_ok` if next element has been returned, `lsm_error_done` if
|
||||
* no more elements are present, or some other error code
|
||||
*/
|
||||
lsm_error lsm_trie_iter_next(void **out, lsm_trie_iterator *iter);
|
||||
|
||||
/**
|
||||
* Free the given iterator.
|
||||
*/
|
||||
void lsm_trie_iter_free(lsm_trie_iterator *iter);
|
||||
|
||||
#endif
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue