shithub: freetype+ttf2subf

ref: b466a7650ce97d3843bcbb4b145bda323a201022
dir: /src/cache/ftlru.h/

View raw version
#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 */