#ifndef mmap_cache_internals_h
#define mmap_cache_internals_h
#ifdef DEBUG
#define ASSERT(x) assert(x)
#include <assert.h>
#else
#define ASSERT(x)
#endif
#ifdef WIN32
#include <windows.h>
#endif
struct
mmap_cache {
void
* p_base;
MU32 * p_base_slots;
MU32 p_cur;
MU64 p_offset;
MU32 p_num_slots;
MU32 p_free_slots;
MU32 p_old_slots;
MU32 p_free_data;
MU32 p_free_bytes;
MU32 p_n_reads;
MU32 p_n_read_hits;
int
p_changed;
MU32 c_num_pages;
MU32 c_page_size;
MU64 c_size;
void
* mm_var;
MU32 start_slots;
MU32 expire_time;
int
catch_deadlocks;
int
enable_stats;
#ifdef WIN32
HANDLE
fh;
#else
int
fh;
#endif
char
* share_file;
int
permissions;
int
init_file;
int
test_file;
int
cache_not_found;
char
* last_error;
};
struct
mmap_cache_it {
mmap_cache * cache;
MU32 p_cur;
MU32 * slot_ptr;
MU32 * slot_ptr_end;
};
#define PP(p) ((MU32 *)p)
#define P_Magic(p) (*(PP(p)+0))
#define P_NumSlots(p) (*(PP(p)+1))
#define P_FreeSlots(p) (*(PP(p)+2))
#define P_OldSlots(p) (*(PP(p)+3))
#define P_FreeData(p) (*(PP(p)+4))
#define P_FreeBytes(p) (*(PP(p)+5))
#define P_NReads(p) (*(PP(p)+6))
#define P_NReadHits(p) (*(PP(p)+7))
#define P_HEADERSIZE 32
#define SP(s) ((MU32 *)s)
#define PTR_ADD(p,o) ((void *)((char *)p + o))
#define S_Ptr(b,s) ((MU32 *)PTR_ADD(b, s))
#define S_LastAccess(s) (*(s+0))
#define S_ExpireOn(s) (*(s+1))
#define S_SlotHash(s) (*(s+2))
#define S_Flags(s) (*(s+3))
#define S_KeyLen(s) (*(s+4))
#define S_ValLen(s) (*(s+5))
#define S_KeyPtr(s) ((void *)(s+6))
#define S_ValPtr(s) (PTR_ADD((void *)(s+6), S_KeyLen(s)))
#define S_SlotLen(s) (sizeof(MU32)*6 + S_KeyLen(s) + S_ValLen(s))
#define KV_SlotLen(k,v) (sizeof(MU32)*6 + k + v)
#define ROUNDLEN(l) ((l) += 3 - (((l)-1) & 3))
extern
char
* def_share_file;
extern
MU32 def_init_file;
extern
MU32 def_test_file;
extern
MU32 def_expire_time;
extern
MU32 def_c_num_pages;
extern
MU32 def_c_page_size;
extern
MU32 def_start_slots;
extern
char
* _mmc_get_def_share_filename(mmap_cache * cache);
int
mmc_open_cache_file(mmap_cache* cache,
int
* do_init);
int
mmc_map_memory(mmap_cache* cache);
int
mmc_unmap_memory(mmap_cache* cache);
int
mmc_lock_page(mmap_cache* cache, MU64 p_offset);
int
mmc_unlock_page(mmap_cache * cache);
int
mmc_close_fh(mmap_cache* cache);
int
_mmc_set_error(mmap_cache *cache,
int
err,
char
* error_string, ...);
char
* _mmc_get_def_share_filename(mmap_cache * cache);
#endif