Mercurial > dovecot > core-2.2
view src/lib-index/mail-tree.h @ 355:0dc59fd3faed HEAD
First version of binary tree file, still some locking issues while opening
the file.
author | Timo Sirainen <tss@iki.fi> |
---|---|
date | Sun, 06 Oct 2002 03:30:14 +0300 |
parents | |
children | 60040a9d243f |
line wrap: on
line source
#ifndef __MAIL_TREE_H #define __MAIL_TREE_H typedef struct _MailTreeHeader MailTreeHeader; typedef struct _MailTreeNode MailTreeNode; enum nodecolor { BLACK = 0, RED }; struct _MailTree { MailIndex *index; int fd; char *filepath; void *mmap_base; MailTreeNode *node_base; size_t mmap_used_length; size_t mmap_full_length; MailTreeHeader *header; unsigned int anon_mmap:1; unsigned int modified:1; }; struct _MailTreeHeader { unsigned int indexid; unsigned int root; unsigned int unused_root; unsigned int alignment; uoff_t used_file_size; }; struct _MailTreeNode { unsigned int left; unsigned int right; unsigned int up; unsigned int color; /* number of child nodes + 1, used to figure out message sequence numbers */ unsigned int node_count; unsigned int key; uoff_t value; }; int mail_tree_create(MailIndex *index); int mail_tree_open_or_create(MailIndex *index); void mail_tree_free(MailTree *tree); int mail_tree_rebuild(MailTree *tree); int mail_tree_sync_file(MailTree *tree); /* Find first existing UID in range. */ uoff_t mail_tree_lookup_uid_range(MailTree *tree, unsigned int *seq_r, unsigned int first_uid, unsigned int last_uid); /* Find message by sequence number. */ uoff_t mail_tree_lookup_sequence(MailTree *tree, unsigned int seq); /* Insert a new record in tree. */ int mail_tree_insert(MailTree *tree, unsigned int uid, uoff_t pos); /* Update existing record in tree. */ int mail_tree_update(MailTree *tree, unsigned int uid, uoff_t pos); /* Delete record from tree. */ void mail_tree_delete(MailTree *tree, unsigned int uid); /* private: */ int _mail_tree_set_corrupted(MailTree *tree, const char *fmt, ...); int _mail_tree_grow(MailTree *tree); #endif