beware, this code is not tested, and probably doesn't compile correctly.. more information will follow..
84 lines
2.7 KiB
C
84 lines
2.7 KiB
C
#ifndef FTLRU_H
|
|
#define FTLRU_H
|
|
|
|
#include <freetype/freetype.h>
|
|
|
|
|
|
typedef FT_Pointer FT_LruKey;
|
|
|
|
|
|
typedef struct FT_LruNodeRec_
|
|
{
|
|
FT_ListNodeRec root;
|
|
FT_LruKey key;
|
|
|
|
} FT_LruNodeRec, *FT_LruNode;
|
|
|
|
|
|
typedef struct FT_LruRec_* FT_Lru;
|
|
|
|
typedef struct FT_Lru_Class_
|
|
{
|
|
FT_UInt lru_size; /* object size in bytes */
|
|
|
|
FT_Error (*init_element)( FT_Lru lru,
|
|
FT_LruNode node );
|
|
|
|
void (*done_element)( FT_Lru lru,
|
|
FT_LruNode node );
|
|
|
|
FT_Error (*flush_element)( FT_Lru lru,
|
|
FT_LruNode node,
|
|
FT_LruKey new_key );
|
|
|
|
FT_Bool (*compare_element)( FT_LruNode node,
|
|
FT_LruKey key );
|
|
} FT_Lru_Class;
|
|
|
|
|
|
typedef FT_Bool (*FT_Lru_Selector)( FT_Lru lru,
|
|
FT_LruNode node,
|
|
FT_Pointer data );
|
|
|
|
typedef struct FT_LruRec_
|
|
{
|
|
FT_Lru_Class* clazz;
|
|
FT_UInt max_elements;
|
|
FT_UInt num_elements;
|
|
FT_ListRec elements;
|
|
FT_Memory memory;
|
|
|
|
/* the following fields are only meaningful for static lru containers */
|
|
FT_ListRec free_nodes;
|
|
FT_LruNode nodes;
|
|
|
|
} FT_LruRec;
|
|
|
|
|
|
FT_EXPORT_DEF(FT_Error) FT_Lru_New ( const FT_Lru_Class* clazz,
|
|
FT_UInt max_elements,
|
|
FT_Memory memory,
|
|
FT_Bool pre_alloc,
|
|
FT_Lru *alru );
|
|
|
|
FT_EXPORT_DEF(void) FT_Lru_Reset ( FT_Lru lru );
|
|
|
|
FT_EXPORT_DEF(void) FT_Lru_Done ( FT_Lru lru );
|
|
|
|
FT_EXPORT_DEF(FT_Error) FT_Lru_Lookup_Node( FT_Lru lru,
|
|
FT_LruKey key,
|
|
FT_LruNode* anode );
|
|
|
|
FT_EXPORT_DEF(FT_Error) FT_Lru_Lookup( FT_Lru lru,
|
|
FT_LruKey key,
|
|
FT_Pointer *aobject );
|
|
|
|
FT_EXPORT_DEF(void) FT_Lru_Remove_Node( FT_Lru lru,
|
|
FT_LruNode node );
|
|
|
|
FT_EXPORT_DEF(void) FT_Lru_Remove_Selection( FT_Lru lru,
|
|
FT_Lru_Selector selector,
|
|
FT_Pointer data );
|
|
|
|
#endif /* FTLRU_H */
|