/* public interfaces for block io routines */ #ifndef _BLOCK_H #define _BLOCK_H /*#define IBEX_STATS*/ /* define to get/dump block access stats */ #include #include /* version of file format */ #define IBEX_VERSION "ibx6" typedef guint32 nameid_t; typedef guint32 blockid_t; #define BLOCK_BITS (8) #define BLOCK_SIZE (1<memblock mapping */ int fd; /* file fd */ char *name; /* file name */ jmp_buf failenv; /* for exception failure */ int failed; /* indicates the file failed */ #ifdef IBEX_STATS GHashTable *stats; #endif struct _root root; /* root block */ /* temporary here */ struct _IBEXWord *words; /* word index */ }; #ifdef IBEX_STATS struct _stat_info { int read; int write; int cache_hit; int cache_miss; }; #endif /* IBEX_STATS */ struct _memcache *ibex_block_cache_open(const char *name, int flags, int mode); void ibex_block_cache_close(struct _memcache *block_cache); void ibex_block_cache_sync(struct _memcache *block_cache); void ibex_block_cache_flush(struct _memcache *block_cache); #define ibex_block_cache_setjmp(bc) (((bc)==NULL)?1:setjmp((bc)->failenv)) #define ibex_block_cache_assert(bc, cond) { if (!(cond)) { ibex_block_cache_fail(bc, __FILE__, __LINE__, # cond); } } void ibex_block_cache_fail(struct _memcache *block_cache, char *file, int line, char *why); blockid_t ibex_block_get(struct _memcache *block_cache); void ibex_block_free(struct _memcache *block_cache, blockid_t blockid); void ibex_block_dirty(struct _block *block); struct _block *ibex_block_read(struct _memcache *block_cache, blockid_t blockid); #define block_number(x) ((x)>>BLOCK_BITS) #define block_location(x) ((x)<