view src/plugins/fts-squat/squat-uidlist.h @ 6410:e4eb71ae8e96 HEAD

Changed .h ifdef/defines to use <NAME>_H format.
author Timo Sirainen <tss@iki.fi>
date Sun, 16 Sep 2007 11:31:27 +0300
parents ae2114f11a0e
children e739cffd05ef
line wrap: on
line source

#ifndef SQUAT_UIDLIST_H
#define SQUAT_UIDLIST_H

#include "seq-range-array.h"

struct squat_trie;
struct squat_uidlist;

struct squat_uidlist *
squat_uidlist_init(struct squat_trie *trie, const char *path,
		   uint32_t uidvalidity, bool mmap_disable);
void squat_uidlist_deinit(struct squat_uidlist *uidlist);

/* Make sure that we've the latest uidlist file fully mapped. */
int squat_uidlist_refresh(struct squat_uidlist *uidlist);

/* Get the last UID added to the file. */
int squat_uidlist_get_last_uid(struct squat_uidlist *uidlist, uint32_t *uid_r);

/* Add new UID to given UID list. The uid_list_idx is updated to contain the
   new list index. It must be put through _finish_list() before it's actually
   written to disk. */
int squat_uidlist_add(struct squat_uidlist *uidlist, uint32_t *uid_list_idx,
		      uint32_t uid);
/* Write UID list into disk. The uid_list_idx is updated to contain the new
   permanent index for it. */
int squat_uidlist_finish_list(struct squat_uidlist *uidlist,
			      uint32_t *uid_list_idx);
int squat_uidlist_flush(struct squat_uidlist *uidlist, uint32_t uid_validity);
/* Returns TRUE if uidlist should be compressed. current_message_count can be
   (unsigned int)-1 if you don't want include it in the check. */
bool squat_uidlist_need_compress(struct squat_uidlist *uidlist,
				 unsigned int current_message_count);
/* Mark the uidlist containing expunged messages. update_disk=FALSE should be
   done when the uidlist is going to be compressed and this function only tells
   the compression to check for the expunged messages. */
int squat_uidlist_mark_having_expunges(struct squat_uidlist *uidlist,
				       bool update_disk);

/* Compress the uidlist file. existing_uids may be NULL if they're not known. */
struct squat_uidlist_compress_ctx *
squat_uidlist_compress_begin(struct squat_uidlist *uidlist,
			     const ARRAY_TYPE(seq_range) *existing_uids);
int squat_uidlist_compress_next(struct squat_uidlist_compress_ctx *ctx,
				uint32_t *uid_list_idx);
void squat_uidlist_compress_rollback(struct squat_uidlist_compress_ctx **ctx);
int squat_uidlist_compress_commit(struct squat_uidlist_compress_ctx **ctx);

/* Returns UIDs for a given UID list index. */
int squat_uidlist_get(struct squat_uidlist *uidlist, uint32_t uid_list_idx,
		      ARRAY_TYPE(seq_range) *result);
/* Filter out UIDs which don't appear in the given UID list from the given
   result array */
int squat_uidlist_filter(struct squat_uidlist *uidlist, uint32_t uid_list_idx,
			 ARRAY_TYPE(seq_range) *result);

/* Returns TRUE when uidlist has used so much memory that it'd prefer to
   get flushed. */
bool squat_uidlist_want_flush(struct squat_uidlist *uidlist);

size_t squat_uidlist_mem_used(struct squat_uidlist *uidlist,
			      unsigned int *count_r);

#endif