squat-trie.h revision ebfbf5d78dcf95e8b176429f4b5b0694eb4e17d5
772199031f0ec687fa1fefd939206858c440e5a1Pavel Březina#ifndef __SQUAT_TRIE_H
772199031f0ec687fa1fefd939206858c440e5a1Pavel Březina#define __SQUAT_TRIE_H
772199031f0ec687fa1fefd939206858c440e5a1Pavel Březina
772199031f0ec687fa1fefd939206858c440e5a1Pavel Březinaenum file_lock_method;
772199031f0ec687fa1fefd939206858c440e5a1Pavel Březina
772199031f0ec687fa1fefd939206858c440e5a1Pavel Březina#include "seq-range-array.h"
772199031f0ec687fa1fefd939206858c440e5a1Pavel Březina
772199031f0ec687fa1fefd939206858c440e5a1Pavel Březinastruct squat_trie *
772199031f0ec687fa1fefd939206858c440e5a1Pavel Březinasquat_trie_open(const char *path, uint32_t uidvalidity,
772199031f0ec687fa1fefd939206858c440e5a1Pavel Březina enum file_lock_method lock_method, bool mmap_disable);
772199031f0ec687fa1fefd939206858c440e5a1Pavel Březinavoid squat_trie_close(struct squat_trie *trie);
772199031f0ec687fa1fefd939206858c440e5a1Pavel Březina
772199031f0ec687fa1fefd939206858c440e5a1Pavel Březinaint squat_trie_get_last_uid(struct squat_trie *trie, uint32_t *last_uid_r);
772199031f0ec687fa1fefd939206858c440e5a1Pavel Březina
772199031f0ec687fa1fefd939206858c440e5a1Pavel Březinaint squat_trie_lock(struct squat_trie *trie, int lock_type);
772199031f0ec687fa1fefd939206858c440e5a1Pavel Březinavoid squat_trie_unlock(struct squat_trie *trie);
772199031f0ec687fa1fefd939206858c440e5a1Pavel Březina
772199031f0ec687fa1fefd939206858c440e5a1Pavel Březinastruct squat_trie_build_context *
772199031f0ec687fa1fefd939206858c440e5a1Pavel Březinasquat_trie_build_init(struct squat_trie *trie, uint32_t *last_uid_r);
772199031f0ec687fa1fefd939206858c440e5a1Pavel Březinaint squat_trie_build_more(struct squat_trie_build_context *ctx, uint32_t uid,
772199031f0ec687fa1fefd939206858c440e5a1Pavel Březina const void *data, size_t size);
772199031f0ec687fa1fefd939206858c440e5a1Pavel Březinaint squat_trie_build_deinit(struct squat_trie_build_context *ctx);
772199031f0ec687fa1fefd939206858c440e5a1Pavel Březina
772199031f0ec687fa1fefd939206858c440e5a1Pavel Březinaint squat_trie_compress(struct squat_trie *trie,
772199031f0ec687fa1fefd939206858c440e5a1Pavel Březina const ARRAY_TYPE(seq_range) *existing_uids);
772199031f0ec687fa1fefd939206858c440e5a1Pavel Březina
c747b0c875785ce693f70b50bdda0237c4b04e35Pavel Březinaint squat_trie_mark_having_expunges(struct squat_trie *trie,
132e477d69e07e02fe6e4d668c0bb6226206474aPavel Březina const ARRAY_TYPE(seq_range) *existing_uids,
772199031f0ec687fa1fefd939206858c440e5a1Pavel Březina unsigned int current_message_count);
beeef7f627a5ed9264de25ee4c76eb9620c1c984Pavel Březina
beeef7f627a5ed9264de25ee4c76eb9620c1c984Pavel Březinaint squat_trie_lookup(struct squat_trie *trie, ARRAY_TYPE(seq_range) *result,
772199031f0ec687fa1fefd939206858c440e5a1Pavel Březina const char *str);
772199031f0ec687fa1fefd939206858c440e5a1Pavel Březinaint squat_trie_filter(struct squat_trie *trie, ARRAY_TYPE(seq_range) *result,
772199031f0ec687fa1fefd939206858c440e5a1Pavel Březina const char *str);
772199031f0ec687fa1fefd939206858c440e5a1Pavel Březina
772199031f0ec687fa1fefd939206858c440e5a1Pavel Březinasize_t squat_trie_mem_used(struct squat_trie *trie, unsigned int *count_r);
772199031f0ec687fa1fefd939206858c440e5a1Pavel Březina
772199031f0ec687fa1fefd939206858c440e5a1Pavel Březinastruct squat_uidlist *_squat_trie_get_uidlist(struct squat_trie *trie);
772199031f0ec687fa1fefd939206858c440e5a1Pavel Březina
772199031f0ec687fa1fefd939206858c440e5a1Pavel Březinavoid _squat_trie_pack_num(buffer_t *buffer, uint32_t num);
772199031f0ec687fa1fefd939206858c440e5a1Pavel Březinauint32_t _squat_trie_unpack_num(const uint8_t **p, const uint8_t *end);
772199031f0ec687fa1fefd939206858c440e5a1Pavel Březina
772199031f0ec687fa1fefd939206858c440e5a1Pavel Březinavoid squat_trie_set_corrupted(struct squat_trie *trie, const char *reason);
772199031f0ec687fa1fefd939206858c440e5a1Pavel Březina
772199031f0ec687fa1fefd939206858c440e5a1Pavel Březina#endif
772199031f0ec687fa1fefd939206858c440e5a1Pavel Březina