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
);