ref: b466a7650ce97d3843bcbb4b145bda323a201022
dir: /src/cache/ftlru.h/
#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 */