Cache-FastMmap
view release on metacpan or search on metacpan
mmap_cache.h view on Meta::CPAN
* - Find the hash slot for the key
*
* For get's:
*
* - Use linear probing to find correct key, or empty slot
*
* For set's:
*
* - Use linear probing to find empty slot
* - If not enough free slots, do an 'expunge' run
* - Store key/value at FreeData offset, update, and store in slot
* - If not enough space at FreeData offset, do an 'expunge' run
* then store data
*
* For delete's:
*
* - Use linear probing to find correct key, or empty slot
* - Set slot to empty (data cleaned up in expunge run)
*
* An expunge run consists of:
*
* - Scan slots to find used key/value parts. Remove older items
* - If ratio used/free slots too high, increase slot count
* - Compact key/value data into one memory block
* - Restore and update offsets in slots
*
*/
#include <stdint.h>
/* Main cache structure passed as a pointer to each function */
typedef struct mmap_cache mmap_cache;
/* Iterator structure for iterating over items in cache */
typedef struct mmap_cache_it mmap_cache_it;
/* Unsigned 32 bit integer */
typedef uint32_t MU32;
/* Unsigned 64 bit integer */
typedef uint64_t MU64;
/* Magic value for no p_cur */
#define NOPAGE (~(MU32)0)
/* Allow overriding "time" for tests */
void mmc_set_time_override(MU32);
/* Initialisation/closing/error functions */
mmap_cache * mmc_new();
int mmc_init(mmap_cache *);
int mmc_set_param(mmap_cache *, char *, char *);
int mmc_get_param(mmap_cache *, char *);
int mmc_close(mmap_cache *);
char * mmc_error(mmap_cache *);
/* Functions for find/locking a page */
int mmc_hash(mmap_cache *, void *, int, MU32 *, MU32 *);
int mmc_lock(mmap_cache *, MU32);
int mmc_unlock(mmap_cache *);
int mmc_is_locked(mmap_cache *);
/* Functions for getting/setting/deleting values in current page */
int mmc_read(mmap_cache *, MU32, void *, int, void **, int *, MU32 *, MU32 *);
int mmc_write(mmap_cache *, MU32, void *, int, void *, int, MU32, MU32);
int mmc_delete(mmap_cache *, MU32, void *, int, MU32 *);
/* Functions of expunging values in current page */
int mmc_calc_expunge(mmap_cache *, int, int, MU32 *, MU32 ***);
int mmc_do_expunge(mmap_cache *, int, MU32, MU32 **);
/* Functions for iterating over items in a cache */
mmap_cache_it * mmc_iterate_new(mmap_cache *);
MU32 * mmc_iterate_next(mmap_cache_it *);
void mmc_iterate_close(mmap_cache_it *);
/* Retrieve details of a cache page/entry */
void mmc_get_details(mmap_cache *, MU32 *, void **, int *, void **, int *, MU32 *, MU32 *, MU32 *);
void mmc_get_page_details(mmap_cache * cache, MU32 * nreads, MU32 * nreadhits);
void mmc_reset_page_details(mmap_cache * cache);
/* Internal functions */
int _mmc_set_error(mmap_cache *, int, char *, ...);
void _mmc_init_page(mmap_cache *, MU32);
MU32 * _mmc_find_slot(mmap_cache * , MU32 , void *, int, int );
void _mmc_delete_slot(mmap_cache * , MU32 *);
int _mmc_check_expunge(mmap_cache * , int);
int _mmc_test_page(mmap_cache *);
int _mmc_dump_page(mmap_cache *);
( run in 1.523 second using v1.01-cache-2.11-cpan-39bf76dae61 )