mirror of
https://github.com/Cesarus85/ringfall-mjolnir-vr.git
synced 2026-10-17 20:00:25 +02:00
144 lines
2.8 KiB
C
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
|