Synopsis
typedef             camel_hash_t;
struct              CamelPartitionKey;
struct              CamelPartitionKeyBlock;
struct              CamelPartitionMap;
struct              CamelPartitionMapBlock;
struct              CamelPartitionTable;
CamelPartitionTable * camel_partition_table_new         (struct _CamelBlockFile *bs,
                                                         camel_block_t root);
gint                camel_partition_table_sync          (CamelPartitionTable *cpi);
gint                camel_partition_table_add           (CamelPartitionTable *cpi,
                                                         const gchar *key,
                                                         camel_key_t keyid);
camel_key_t         camel_partition_table_lookup        (CamelPartitionTable *cpi,
                                                         const gchar *key);
gboolean            camel_partition_table_remove        (CamelPartitionTable *cpi,
                                                         const gchar *key);
struct              CamelKeyBlock;
struct              CamelKeyRootBlock;
struct              CamelKeyKey;
#define             CAMEL_KEY_TABLE_MAX_KEY
struct              CamelKeyTable;
CamelKeyTable *	    camel_key_table_new                 (CamelBlockFile *bs,
                                                         camel_block_t root);
gint                camel_key_table_sync                (CamelKeyTable *ki);
camel_key_t         camel_key_table_add                 (CamelKeyTable *ki,
                                                         const gchar *key,
                                                         camel_block_t data,
                                                         guint flags);
gboolean            camel_key_table_set_data            (CamelKeyTable *ki,
                                                         camel_key_t keyid,
                                                         camel_block_t data);
gboolean            camel_key_table_set_flags           (CamelKeyTable *ki,
                                                         camel_key_t keyid,
                                                         guint flags,
                                                         guint set);
camel_block_t       camel_key_table_lookup              (CamelKeyTable *ki,
                                                         camel_key_t keyid,
                                                         gchar **key,
                                                         guint *flags);
camel_key_t         camel_key_table_next                (CamelKeyTable *ki,
                                                         camel_key_t next,
                                                         gchar **keyp,
                                                         guint *flagsp,
                                                         camel_block_t *datap);
 
Details
camel_hash_t
typedef guint32 camel_hash_t; /* a hashed key */
 
struct CamelPartitionKey
struct CamelPartitionKey {
	camel_hash_t hashid;
	camel_key_t keyid;
};
 
struct CamelPartitionKeyBlock
struct CamelPartitionKeyBlock {
	guint32 used;
	struct _CamelPartitionKey keys[(CAMEL_BLOCK_SIZE-4)/sizeof (struct _CamelPartitionKey)];
};
 
struct CamelPartitionMap
struct CamelPartitionMap {
	camel_hash_t hashid;
	camel_block_t blockid;
};
 
struct CamelPartitionMapBlock
struct CamelPartitionMapBlock {
	camel_block_t next;
	guint32 used;
	struct _CamelPartitionMap partition[(CAMEL_BLOCK_SIZE-8)/sizeof (struct _CamelPartitionMap)];
};
 
struct CamelPartitionTable
struct CamelPartitionTable;
 
camel_partition_table_remove ()
gboolean            camel_partition_table_remove        (CamelPartitionTable *cpi,
                                                         const gchar *key);
 
struct CamelKeyBlock
struct CamelKeyBlock {
	camel_block_t next;
	guint32 used;
	union {
		struct _CamelKeyKey keys[(CAMEL_BLOCK_SIZE-8)/sizeof (struct _CamelKeyKey)];
		gchar keydata[CAMEL_BLOCK_SIZE-8];
	} u;
};
 
struct CamelKeyRootBlock
struct CamelKeyRootBlock {
	camel_block_t first;
	camel_block_t last;
	camel_key_t free; /* free list */
};
 
struct CamelKeyKey
struct CamelKeyKey {
	camel_block_t data;
	guint offset:10;
	guint flags:22;
};
 
CAMEL_KEY_TABLE_MAX_KEY
#define CAMEL_KEY_TABLE_MAX_KEY (128) /* max size of any key */
 
struct CamelKeyTable
struct CamelKeyTable;
 
camel_key_table_sync ()
gint                camel_key_table_sync                (CamelKeyTable *ki);
 
camel_key_table_set_flags ()
gboolean            camel_key_table_set_flags           (CamelKeyTable *ki,
                                                         camel_key_t keyid,
                                                         guint flags,
                                                         guint set);