Files

144 lines
2.8 KiB
C

/*
LRUV_CACHE.H
header included in hcex build.
*/
#ifndef __LRUV_CACHE_H
#define __LRUV_CACHE_H
#pragma once
/* ---------- headers */
#include "cseries/cseries.h"
/* ---------- constants */
/* ---------- macros */
/* ---------- structures */
struct data_array;
typedef void (*lruv_delete_block_proc)(
long block_index);
typedef boolean (*lruv_locked_block_proc)(
long block_index);
typedef void (*lruv_debug_header_proc)(
FILE *stream);
typedef const char *(*lruv_debug_block_name_proc)(
long block_index);
struct lruv_cache
{
char name[32];
lruv_delete_block_proc delete_block_proc;
lruv_locked_block_proc locked_block_proc;
long page_count;
long page_size_bits;
long tick;
long first_block_index;
long last_block_index;
struct data_array *blocks;
unsigned long signature;
};
struct lruv_cache_block
{
short identifier;
short flags;
long page_count;
long first_page_index;
long next_block_index;
long previous_block_index;
long last_used_tick;
long user_data;
};
typedef char lruv_cache_size_assert[
sizeof(struct lruv_cache) == 0x44 ? 1 : -1];
typedef char lruv_cache_block_size_assert[
sizeof(struct lruv_cache_block) == 0x1C ? 1 : -1];
/* ---------- prototypes/LRUV_CACHE.C */
long lruv_allocation_size(long maximum_block_count);
void lruv_initialize(
struct lruv_cache *cache,
const char *name,
long page_count,
long page_size_bits,
long maximum_block_count,
lruv_delete_block_proc delete_block_proc,
lruv_locked_block_proc locked_block_proc);
void lruv_update_function_pointers(
struct lruv_cache *cache,
lruv_delete_block_proc delete_block_proc,
lruv_locked_block_proc locked_block_proc);
boolean lruv_has_locked_proc(
struct lruv_cache *cache);
struct lruv_cache *lruv_new(
const char *name,
long page_count,
long page_size_bits,
long maximum_block_count,
lruv_delete_block_proc delete_block_proc,
lruv_locked_block_proc locked_block_proc);
void lruv_delete(
struct lruv_cache *cache);
void lruv_idle(
struct lruv_cache *cache);
void lruv_block_delete(
struct lruv_cache *cache,
long block_index);
void lruv_block_touch(
struct lruv_cache *cache,
long block_index);
void *lruv_block_get_address(
struct lruv_cache *cache,
long block_index);
boolean lruv_block_touched(
struct lruv_cache *cache,
long block_index);
long lruv_block_new(
struct lruv_cache *cache,
long size);
void lruv_cache_get_page_usage(
struct lruv_cache *cache,
byte *page_usage);
void lruv_resize(
struct lruv_cache *cache,
long new_page_count);
void lruv_debug_to_file(
const char *path,
const char *allocation_name,
long allocation_size,
struct lruv_cache *cache,
lruv_debug_header_proc header_proc,
lruv_debug_block_name_proc block_name_proc);
void lruv_flush(
struct lruv_cache *cache);
/* ---------- globals */
/* ---------- public code */
#endif // __LRUV_CACHE_H