123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192 |
- #ifndef ART_ART_H
- #define ART_ART_H
- #include <stdbool.h>
- #include <stddef.h>
- #include <stdint.h>
- #define ART_KEY_BYTES 6
- #ifdef __cplusplus
- extern "C" {
- namespace roaring {
- namespace internal {
- #endif
- typedef uint8_t art_key_chunk_t;
- typedef struct art_node_s art_node_t;
- typedef struct art_s {
- art_node_t *root;
- } art_t;
- typedef struct art_val_s {
- art_key_chunk_t key[ART_KEY_BYTES];
- } art_val_t;
- int art_compare_keys(const art_key_chunk_t key1[],
- const art_key_chunk_t key2[]);
- void art_insert(art_t *art, const art_key_chunk_t *key, art_val_t *val);
- art_val_t *art_erase(art_t *art, const art_key_chunk_t *key);
- art_val_t *art_find(const art_t *art, const art_key_chunk_t *key);
- bool art_is_empty(const art_t *art);
- void art_free(art_t *art);
- size_t art_size_in_bytes(const art_t *art);
- void art_printf(const art_t *art);
- typedef bool (*art_validate_cb_t)(const art_val_t *val, const char **reason);
- bool art_internal_validate(const art_t *art, const char **reason,
- art_validate_cb_t validate_cb);
- typedef struct art_iterator_frame_s {
- art_node_t *node;
- uint8_t index_in_node;
- } art_iterator_frame_t;
- typedef struct art_iterator_s {
- art_key_chunk_t key[ART_KEY_BYTES];
- art_val_t *value;
- uint8_t depth;
- uint8_t frame;
-
-
- art_iterator_frame_t frames[ART_KEY_BYTES + 1];
- } art_iterator_t;
- art_iterator_t art_init_iterator(const art_t *art, bool first);
- art_iterator_t art_lower_bound(const art_t *art, const art_key_chunk_t *key);
- art_iterator_t art_upper_bound(const art_t *art, const art_key_chunk_t *key);
- bool art_iterator_move(art_iterator_t *iterator, bool forward);
- bool art_iterator_next(art_iterator_t *iterator);
- bool art_iterator_prev(art_iterator_t *iterator);
- bool art_iterator_lower_bound(art_iterator_t *iterator,
- const art_key_chunk_t *key);
- void art_iterator_insert(art_t *art, art_iterator_t *iterator,
- const art_key_chunk_t *key, art_val_t *val);
- art_val_t *art_iterator_erase(art_t *art, art_iterator_t *iterator);
- #ifdef __cplusplus
- }
- }
- }
- #endif
- #endif
|