2006-03-20 12:48:13 +01:00
|
|
|
/***************************************************************************/
|
|
|
|
/* */
|
|
|
|
/* ftcglyph.h */
|
|
|
|
/* */
|
|
|
|
/* FreeType abstract glyph cache (specification). */
|
|
|
|
/* */
|
2007-05-16 17:19:42 +02:00
|
|
|
/* Copyright 2000-2001, 2003, 2004, 2006, 2007 by */
|
2006-03-20 12:48:13 +01:00
|
|
|
/* David Turner, Robert Wilhelm, and Werner Lemberg. */
|
|
|
|
/* */
|
|
|
|
/* This file is part of the FreeType project, and may only be used, */
|
|
|
|
/* modified, and distributed under the terms of the FreeType project */
|
|
|
|
/* license, LICENSE.TXT. By continuing to use, modify, or distribute */
|
|
|
|
/* this file you indicate that you have read the license and */
|
|
|
|
/* understand and accept it fully. */
|
|
|
|
/* */
|
|
|
|
/***************************************************************************/
|
|
|
|
|
|
|
|
|
|
|
|
/*
|
|
|
|
*
|
|
|
|
* FTC_GCache is an _abstract_ cache object optimized to store glyph
|
|
|
|
* data. It works as follows:
|
|
|
|
*
|
|
|
|
* - It manages FTC_GNode objects. Each one of them can hold one or more
|
|
|
|
* glyph `items'. Item types are not specified in the FTC_GCache but
|
|
|
|
* in classes that extend it.
|
|
|
|
*
|
|
|
|
* - Glyph attributes, like face ID, character size, render mode, etc.,
|
|
|
|
* can be grouped into abstract `glyph families'. This avoids storing
|
|
|
|
* the attributes within the FTC_GCache, since it is likely that many
|
|
|
|
* FTC_GNodes will belong to the same family in typical uses.
|
|
|
|
*
|
|
|
|
* - Each FTC_GNode is thus an FTC_Node with two additional fields:
|
|
|
|
*
|
|
|
|
* * gindex: A glyph index, or the first index in a glyph range.
|
|
|
|
* * family: A pointer to a glyph `family'.
|
|
|
|
*
|
|
|
|
* - Family types are not fully specific in the FTC_Family type, but
|
|
|
|
* by classes that extend it.
|
|
|
|
*
|
|
|
|
* Note that both FTC_ImageCache and FTC_SBitCache extend FTC_GCache.
|
|
|
|
* They share an FTC_Family sub-class called FTC_BasicFamily which is
|
|
|
|
* used to store the following data: face ID, pixel/point sizes, load
|
|
|
|
* flags. For more details see the file `src/cache/ftcbasic.c'.
|
|
|
|
*
|
|
|
|
* Client applications can extend FTC_GNode with their own FTC_GNode
|
|
|
|
* and FTC_Family sub-classes to implement more complex caches (e.g.,
|
|
|
|
* handling automatic synthesis, like obliquing & emboldening, colored
|
|
|
|
* glyphs, etc.).
|
|
|
|
*
|
|
|
|
* See also the FTC_ICache & FTC_SCache classes in `ftcimage.h' and
|
|
|
|
* `ftcsbits.h', which both extend FTC_GCache with additional
|
|
|
|
* optimizations.
|
|
|
|
*
|
|
|
|
* A typical FTC_GCache implementation must provide at least the
|
|
|
|
* following:
|
|
|
|
*
|
|
|
|
* - FTC_GNode sub-class, e.g. MyNode, with relevant methods:
|
|
|
|
* my_node_new (must call FTC_GNode_Init)
|
|
|
|
* my_node_free (must call FTC_GNode_Done)
|
|
|
|
* my_node_compare (must call FTC_GNode_Compare)
|
|
|
|
* my_node_remove_faceid (must call ftc_gnode_unselect in case
|
|
|
|
* of match)
|
|
|
|
*
|
|
|
|
* - FTC_Family sub-class, e.g. MyFamily, with relevant methods:
|
|
|
|
* my_family_compare
|
|
|
|
* my_family_init
|
|
|
|
* my_family_reset (optional)
|
|
|
|
* my_family_done
|
|
|
|
*
|
|
|
|
* - FTC_GQuery sub-class, e.g. MyQuery, to hold cache-specific query
|
|
|
|
* data.
|
|
|
|
*
|
|
|
|
* - Constant structures for a FTC_GNodeClass.
|
|
|
|
*
|
|
|
|
* - MyCacheNew() can be implemented easily as a call to the convenience
|
|
|
|
* function FTC_GCache_New.
|
|
|
|
*
|
|
|
|
* - MyCacheLookup with a call to FTC_GCache_Lookup. This function will
|
|
|
|
* automatically:
|
|
|
|
*
|
|
|
|
* - Search for the corresponding family in the cache, or create
|
|
|
|
* a new one if necessary. Put it in FTC_GQUERY(myquery).family
|
|
|
|
*
|
|
|
|
* - Call FTC_Cache_Lookup.
|
|
|
|
*
|
|
|
|
* If it returns NULL, you should create a new node, then call
|
|
|
|
* ftc_cache_add as usual.
|
|
|
|
*/
|
|
|
|
|
|
|
|
|
|
|
|
/*************************************************************************/
|
|
|
|
/* */
|
|
|
|
/* Important: The functions defined in this file are only used to */
|
|
|
|
/* implement an abstract glyph cache class. You need to */
|
|
|
|
/* provide additional logic to implement a complete cache. */
|
|
|
|
/* */
|
|
|
|
/*************************************************************************/
|
|
|
|
|
|
|
|
|
|
|
|
/*************************************************************************/
|
|
|
|
/*************************************************************************/
|
|
|
|
/*************************************************************************/
|
|
|
|
/*************************************************************************/
|
|
|
|
/*************************************************************************/
|
|
|
|
/********* *********/
|
|
|
|
/********* WARNING, THIS IS BETA CODE. *********/
|
|
|
|
/********* *********/
|
|
|
|
/*************************************************************************/
|
|
|
|
/*************************************************************************/
|
|
|
|
/*************************************************************************/
|
|
|
|
/*************************************************************************/
|
|
|
|
/*************************************************************************/
|
|
|
|
|
|
|
|
|
|
|
|
#ifndef __FTCGLYPH_H__
|
|
|
|
#define __FTCGLYPH_H__
|
|
|
|
|
|
|
|
|
|
|
|
#include <ft2build.h>
|
* include/freetype/cache/ftccache.h,
include/freetype/cache/ftccmap.h,
include/freetype/cache/ftcglyph.h
include/freetype/cache/ftcimage.h
include/freetype/cache/ftcmanag.h
include/freetype/cache/ftcmru.h
include/freetype/cache/ftcsbits.h:
removing these header files from the public include directory.
* include/freetype/config/ftheader.h:
changing the definition of FT_CACHE_INTERNAL_XXX_H macros to
redirect to FT_CACHE_H instead
* src/cache/ftcbasic.c, src/cache/ftccache.c, src/cache/ftccache.h,
src/cache/ftccback.h, src/cache/ftccmap.c, src/cache/ftcglyph.c,
src/cache/ftcglyph.h, src/cache/ftcimage.c, src/cache/ftcimage.h,
src/cache/ftcmanag.c, src/cache/ftcmanag.h, src/cache/ftcmru.c,
src/cache/ftcmru.h, src/cache/ftcsbits.c, src/cache/ftcsbits.h:
modifications to prevent using the FT_CACHE_INTERNAL_XXX_H macros,
and grab the headers in 'src/cache' instead (see below).
2006-03-20 13:10:24 +01:00
|
|
|
#include "ftcmanag.h"
|
2006-03-20 12:48:13 +01:00
|
|
|
|
|
|
|
|
|
|
|
FT_BEGIN_HEADER
|
|
|
|
|
|
|
|
|
|
|
|
/*
|
|
|
|
* We can group glyphs into `families'. Each family correspond to a
|
|
|
|
* given face ID, character size, transform, etc.
|
|
|
|
*
|
|
|
|
* Families are implemented as MRU list nodes. They are
|
|
|
|
* reference-counted.
|
|
|
|
*/
|
|
|
|
|
|
|
|
typedef struct FTC_FamilyRec_
|
|
|
|
{
|
|
|
|
FTC_MruNodeRec mrunode;
|
|
|
|
FT_UInt num_nodes; /* current number of nodes in this family */
|
|
|
|
FTC_Cache cache;
|
|
|
|
FTC_MruListClass clazz;
|
|
|
|
|
|
|
|
} FTC_FamilyRec, *FTC_Family;
|
|
|
|
|
|
|
|
#define FTC_FAMILY(x) ( (FTC_Family)(x) )
|
|
|
|
#define FTC_FAMILY_P(x) ( (FTC_Family*)(x) )
|
|
|
|
|
|
|
|
|
|
|
|
typedef struct FTC_GNodeRec_
|
|
|
|
{
|
|
|
|
FTC_NodeRec node;
|
|
|
|
FTC_Family family;
|
|
|
|
FT_UInt gindex;
|
|
|
|
|
|
|
|
} FTC_GNodeRec, *FTC_GNode;
|
|
|
|
|
|
|
|
#define FTC_GNODE( x ) ( (FTC_GNode)(x) )
|
|
|
|
#define FTC_GNODE_P( x ) ( (FTC_GNode*)(x) )
|
|
|
|
|
|
|
|
|
|
|
|
typedef struct FTC_GQueryRec_
|
|
|
|
{
|
|
|
|
FT_UInt gindex;
|
|
|
|
FTC_Family family;
|
|
|
|
|
|
|
|
} FTC_GQueryRec, *FTC_GQuery;
|
|
|
|
|
|
|
|
#define FTC_GQUERY( x ) ( (FTC_GQuery)(x) )
|
|
|
|
|
|
|
|
|
|
|
|
/*************************************************************************/
|
|
|
|
/* */
|
|
|
|
/* These functions are exported so that they can be called from */
|
|
|
|
/* user-provided cache classes; otherwise, they are really part of the */
|
|
|
|
/* cache sub-system internals. */
|
|
|
|
/* */
|
|
|
|
|
|
|
|
/* must be called by derived FTC_Node_InitFunc routines */
|
* src/cache/ftccache.c, (ftc_node_mru_up, FTC_Cache_Lookup)
[!FTC_INLINE]: Compile conditionally.
* src/cache/ftccache.h: Updated.
* src/cache/ftcglyph.c (FTC_GNode_Init, FTC_GNode_UnselectFamily,
FTC_GNode_Done, FTC_GNode_Compare, FTC_Family_Init, FTC_GCache_New):
s/FT_EXPORT/FT_LOCAL/.
(FTC_GCache_Init, FTC_GCache_Done): Commented out.
(FTC_GCache_Lookup) [!FTC_INLINE]: Compile conditionally.
s/FT_EXPORT/FT_LOCAL/.
* src/cache/ftcglyph.h: Updated.
* src/cache/ftcimage.c (FTC_INode_Free, FTC_INode_New):
s/FT_EXPORT/FT_LOCAL/.
(FTC_INode_Weight): Commented out.
* src/cache/ftcimage.h: Updated.
* src/cache/ftmanag.c (FTC_Manager_Compress,
FTC_Manager_RegisterCache, FTC_Manager_FlushN):
s/FT_EXPORT/FT_LOCAL/.
* src/cache/ftmanag.h: Updated.
* src/cache/ftcsbits.c (FTC_SNode_Free, FTC_SNode_New,
FTC_SNode_Compare): s/FT_EXPORT/FT_LOCAL/.
(FTC_SNode_Weight): Commented out.
* src/cache/ftcsbits.h: Updated.
2006-03-22 16:30:41 +01:00
|
|
|
FT_LOCAL( void )
|
2006-03-20 12:48:13 +01:00
|
|
|
FTC_GNode_Init( FTC_GNode node,
|
|
|
|
FT_UInt gindex, /* glyph index for node */
|
|
|
|
FTC_Family family );
|
|
|
|
|
|
|
|
/* returns TRUE iff the query's glyph index correspond to the node; */
|
2006-03-24 13:46:49 +01:00
|
|
|
/* this assumes that the `family' and `hash' fields of the query are */
|
2006-03-20 12:48:13 +01:00
|
|
|
/* already correctly set */
|
* src/cache/ftccache.c, (ftc_node_mru_up, FTC_Cache_Lookup)
[!FTC_INLINE]: Compile conditionally.
* src/cache/ftccache.h: Updated.
* src/cache/ftcglyph.c (FTC_GNode_Init, FTC_GNode_UnselectFamily,
FTC_GNode_Done, FTC_GNode_Compare, FTC_Family_Init, FTC_GCache_New):
s/FT_EXPORT/FT_LOCAL/.
(FTC_GCache_Init, FTC_GCache_Done): Commented out.
(FTC_GCache_Lookup) [!FTC_INLINE]: Compile conditionally.
s/FT_EXPORT/FT_LOCAL/.
* src/cache/ftcglyph.h: Updated.
* src/cache/ftcimage.c (FTC_INode_Free, FTC_INode_New):
s/FT_EXPORT/FT_LOCAL/.
(FTC_INode_Weight): Commented out.
* src/cache/ftcimage.h: Updated.
* src/cache/ftmanag.c (FTC_Manager_Compress,
FTC_Manager_RegisterCache, FTC_Manager_FlushN):
s/FT_EXPORT/FT_LOCAL/.
* src/cache/ftmanag.h: Updated.
* src/cache/ftcsbits.c (FTC_SNode_Free, FTC_SNode_New,
FTC_SNode_Compare): s/FT_EXPORT/FT_LOCAL/.
(FTC_SNode_Weight): Commented out.
* src/cache/ftcsbits.h: Updated.
2006-03-22 16:30:41 +01:00
|
|
|
FT_LOCAL( FT_Bool )
|
2006-03-20 12:48:13 +01:00
|
|
|
FTC_GNode_Compare( FTC_GNode gnode,
|
|
|
|
FTC_GQuery gquery );
|
|
|
|
|
|
|
|
/* call this function to clear a node's family -- this is necessary */
|
|
|
|
/* to implement the `node_remove_faceid' cache method correctly */
|
* src/cache/ftccache.c, (ftc_node_mru_up, FTC_Cache_Lookup)
[!FTC_INLINE]: Compile conditionally.
* src/cache/ftccache.h: Updated.
* src/cache/ftcglyph.c (FTC_GNode_Init, FTC_GNode_UnselectFamily,
FTC_GNode_Done, FTC_GNode_Compare, FTC_Family_Init, FTC_GCache_New):
s/FT_EXPORT/FT_LOCAL/.
(FTC_GCache_Init, FTC_GCache_Done): Commented out.
(FTC_GCache_Lookup) [!FTC_INLINE]: Compile conditionally.
s/FT_EXPORT/FT_LOCAL/.
* src/cache/ftcglyph.h: Updated.
* src/cache/ftcimage.c (FTC_INode_Free, FTC_INode_New):
s/FT_EXPORT/FT_LOCAL/.
(FTC_INode_Weight): Commented out.
* src/cache/ftcimage.h: Updated.
* src/cache/ftmanag.c (FTC_Manager_Compress,
FTC_Manager_RegisterCache, FTC_Manager_FlushN):
s/FT_EXPORT/FT_LOCAL/.
* src/cache/ftmanag.h: Updated.
* src/cache/ftcsbits.c (FTC_SNode_Free, FTC_SNode_New,
FTC_SNode_Compare): s/FT_EXPORT/FT_LOCAL/.
(FTC_SNode_Weight): Commented out.
* src/cache/ftcsbits.h: Updated.
2006-03-22 16:30:41 +01:00
|
|
|
FT_LOCAL( void )
|
2006-03-20 12:48:13 +01:00
|
|
|
FTC_GNode_UnselectFamily( FTC_GNode gnode,
|
|
|
|
FTC_Cache cache );
|
|
|
|
|
|
|
|
/* must be called by derived FTC_Node_DoneFunc routines */
|
* src/cache/ftccache.c, (ftc_node_mru_up, FTC_Cache_Lookup)
[!FTC_INLINE]: Compile conditionally.
* src/cache/ftccache.h: Updated.
* src/cache/ftcglyph.c (FTC_GNode_Init, FTC_GNode_UnselectFamily,
FTC_GNode_Done, FTC_GNode_Compare, FTC_Family_Init, FTC_GCache_New):
s/FT_EXPORT/FT_LOCAL/.
(FTC_GCache_Init, FTC_GCache_Done): Commented out.
(FTC_GCache_Lookup) [!FTC_INLINE]: Compile conditionally.
s/FT_EXPORT/FT_LOCAL/.
* src/cache/ftcglyph.h: Updated.
* src/cache/ftcimage.c (FTC_INode_Free, FTC_INode_New):
s/FT_EXPORT/FT_LOCAL/.
(FTC_INode_Weight): Commented out.
* src/cache/ftcimage.h: Updated.
* src/cache/ftmanag.c (FTC_Manager_Compress,
FTC_Manager_RegisterCache, FTC_Manager_FlushN):
s/FT_EXPORT/FT_LOCAL/.
* src/cache/ftmanag.h: Updated.
* src/cache/ftcsbits.c (FTC_SNode_Free, FTC_SNode_New,
FTC_SNode_Compare): s/FT_EXPORT/FT_LOCAL/.
(FTC_SNode_Weight): Commented out.
* src/cache/ftcsbits.h: Updated.
2006-03-22 16:30:41 +01:00
|
|
|
FT_LOCAL( void )
|
2006-03-20 12:48:13 +01:00
|
|
|
FTC_GNode_Done( FTC_GNode node,
|
|
|
|
FTC_Cache cache );
|
|
|
|
|
|
|
|
|
* src/cache/ftccache.c, (ftc_node_mru_up, FTC_Cache_Lookup)
[!FTC_INLINE]: Compile conditionally.
* src/cache/ftccache.h: Updated.
* src/cache/ftcglyph.c (FTC_GNode_Init, FTC_GNode_UnselectFamily,
FTC_GNode_Done, FTC_GNode_Compare, FTC_Family_Init, FTC_GCache_New):
s/FT_EXPORT/FT_LOCAL/.
(FTC_GCache_Init, FTC_GCache_Done): Commented out.
(FTC_GCache_Lookup) [!FTC_INLINE]: Compile conditionally.
s/FT_EXPORT/FT_LOCAL/.
* src/cache/ftcglyph.h: Updated.
* src/cache/ftcimage.c (FTC_INode_Free, FTC_INode_New):
s/FT_EXPORT/FT_LOCAL/.
(FTC_INode_Weight): Commented out.
* src/cache/ftcimage.h: Updated.
* src/cache/ftmanag.c (FTC_Manager_Compress,
FTC_Manager_RegisterCache, FTC_Manager_FlushN):
s/FT_EXPORT/FT_LOCAL/.
* src/cache/ftmanag.h: Updated.
* src/cache/ftcsbits.c (FTC_SNode_Free, FTC_SNode_New,
FTC_SNode_Compare): s/FT_EXPORT/FT_LOCAL/.
(FTC_SNode_Weight): Commented out.
* src/cache/ftcsbits.h: Updated.
2006-03-22 16:30:41 +01:00
|
|
|
FT_LOCAL( void )
|
2006-03-20 12:48:13 +01:00
|
|
|
FTC_Family_Init( FTC_Family family,
|
|
|
|
FTC_Cache cache );
|
|
|
|
|
|
|
|
typedef struct FTC_GCacheRec_
|
|
|
|
{
|
|
|
|
FTC_CacheRec cache;
|
|
|
|
FTC_MruListRec families;
|
|
|
|
|
|
|
|
} FTC_GCacheRec, *FTC_GCache;
|
|
|
|
|
|
|
|
#define FTC_GCACHE( x ) ((FTC_GCache)(x))
|
|
|
|
|
|
|
|
|
* src/cache/ftccache.c, (ftc_node_mru_up, FTC_Cache_Lookup)
[!FTC_INLINE]: Compile conditionally.
* src/cache/ftccache.h: Updated.
* src/cache/ftcglyph.c (FTC_GNode_Init, FTC_GNode_UnselectFamily,
FTC_GNode_Done, FTC_GNode_Compare, FTC_Family_Init, FTC_GCache_New):
s/FT_EXPORT/FT_LOCAL/.
(FTC_GCache_Init, FTC_GCache_Done): Commented out.
(FTC_GCache_Lookup) [!FTC_INLINE]: Compile conditionally.
s/FT_EXPORT/FT_LOCAL/.
* src/cache/ftcglyph.h: Updated.
* src/cache/ftcimage.c (FTC_INode_Free, FTC_INode_New):
s/FT_EXPORT/FT_LOCAL/.
(FTC_INode_Weight): Commented out.
* src/cache/ftcimage.h: Updated.
* src/cache/ftmanag.c (FTC_Manager_Compress,
FTC_Manager_RegisterCache, FTC_Manager_FlushN):
s/FT_EXPORT/FT_LOCAL/.
* src/cache/ftmanag.h: Updated.
* src/cache/ftcsbits.c (FTC_SNode_Free, FTC_SNode_New,
FTC_SNode_Compare): s/FT_EXPORT/FT_LOCAL/.
(FTC_SNode_Weight): Commented out.
* src/cache/ftcsbits.h: Updated.
2006-03-22 16:30:41 +01:00
|
|
|
#if 0
|
2006-03-20 12:48:13 +01:00
|
|
|
/* can be used as @FTC_Cache_InitFunc */
|
* src/cache/ftccache.c, (ftc_node_mru_up, FTC_Cache_Lookup)
[!FTC_INLINE]: Compile conditionally.
* src/cache/ftccache.h: Updated.
* src/cache/ftcglyph.c (FTC_GNode_Init, FTC_GNode_UnselectFamily,
FTC_GNode_Done, FTC_GNode_Compare, FTC_Family_Init, FTC_GCache_New):
s/FT_EXPORT/FT_LOCAL/.
(FTC_GCache_Init, FTC_GCache_Done): Commented out.
(FTC_GCache_Lookup) [!FTC_INLINE]: Compile conditionally.
s/FT_EXPORT/FT_LOCAL/.
* src/cache/ftcglyph.h: Updated.
* src/cache/ftcimage.c (FTC_INode_Free, FTC_INode_New):
s/FT_EXPORT/FT_LOCAL/.
(FTC_INode_Weight): Commented out.
* src/cache/ftcimage.h: Updated.
* src/cache/ftmanag.c (FTC_Manager_Compress,
FTC_Manager_RegisterCache, FTC_Manager_FlushN):
s/FT_EXPORT/FT_LOCAL/.
* src/cache/ftmanag.h: Updated.
* src/cache/ftcsbits.c (FTC_SNode_Free, FTC_SNode_New,
FTC_SNode_Compare): s/FT_EXPORT/FT_LOCAL/.
(FTC_SNode_Weight): Commented out.
* src/cache/ftcsbits.h: Updated.
2006-03-22 16:30:41 +01:00
|
|
|
FT_LOCAL( FT_Error )
|
2006-03-20 12:48:13 +01:00
|
|
|
FTC_GCache_Init( FTC_GCache cache );
|
* src/cache/ftccache.c, (ftc_node_mru_up, FTC_Cache_Lookup)
[!FTC_INLINE]: Compile conditionally.
* src/cache/ftccache.h: Updated.
* src/cache/ftcglyph.c (FTC_GNode_Init, FTC_GNode_UnselectFamily,
FTC_GNode_Done, FTC_GNode_Compare, FTC_Family_Init, FTC_GCache_New):
s/FT_EXPORT/FT_LOCAL/.
(FTC_GCache_Init, FTC_GCache_Done): Commented out.
(FTC_GCache_Lookup) [!FTC_INLINE]: Compile conditionally.
s/FT_EXPORT/FT_LOCAL/.
* src/cache/ftcglyph.h: Updated.
* src/cache/ftcimage.c (FTC_INode_Free, FTC_INode_New):
s/FT_EXPORT/FT_LOCAL/.
(FTC_INode_Weight): Commented out.
* src/cache/ftcimage.h: Updated.
* src/cache/ftmanag.c (FTC_Manager_Compress,
FTC_Manager_RegisterCache, FTC_Manager_FlushN):
s/FT_EXPORT/FT_LOCAL/.
* src/cache/ftmanag.h: Updated.
* src/cache/ftcsbits.c (FTC_SNode_Free, FTC_SNode_New,
FTC_SNode_Compare): s/FT_EXPORT/FT_LOCAL/.
(FTC_SNode_Weight): Commented out.
* src/cache/ftcsbits.h: Updated.
2006-03-22 16:30:41 +01:00
|
|
|
#endif
|
2006-03-20 12:48:13 +01:00
|
|
|
|
|
|
|
|
* src/cache/ftccache.c, (ftc_node_mru_up, FTC_Cache_Lookup)
[!FTC_INLINE]: Compile conditionally.
* src/cache/ftccache.h: Updated.
* src/cache/ftcglyph.c (FTC_GNode_Init, FTC_GNode_UnselectFamily,
FTC_GNode_Done, FTC_GNode_Compare, FTC_Family_Init, FTC_GCache_New):
s/FT_EXPORT/FT_LOCAL/.
(FTC_GCache_Init, FTC_GCache_Done): Commented out.
(FTC_GCache_Lookup) [!FTC_INLINE]: Compile conditionally.
s/FT_EXPORT/FT_LOCAL/.
* src/cache/ftcglyph.h: Updated.
* src/cache/ftcimage.c (FTC_INode_Free, FTC_INode_New):
s/FT_EXPORT/FT_LOCAL/.
(FTC_INode_Weight): Commented out.
* src/cache/ftcimage.h: Updated.
* src/cache/ftmanag.c (FTC_Manager_Compress,
FTC_Manager_RegisterCache, FTC_Manager_FlushN):
s/FT_EXPORT/FT_LOCAL/.
* src/cache/ftmanag.h: Updated.
* src/cache/ftcsbits.c (FTC_SNode_Free, FTC_SNode_New,
FTC_SNode_Compare): s/FT_EXPORT/FT_LOCAL/.
(FTC_SNode_Weight): Commented out.
* src/cache/ftcsbits.h: Updated.
2006-03-22 16:30:41 +01:00
|
|
|
#if 0
|
2006-03-20 12:48:13 +01:00
|
|
|
/* can be used as @FTC_Cache_DoneFunc */
|
* src/cache/ftccache.c, (ftc_node_mru_up, FTC_Cache_Lookup)
[!FTC_INLINE]: Compile conditionally.
* src/cache/ftccache.h: Updated.
* src/cache/ftcglyph.c (FTC_GNode_Init, FTC_GNode_UnselectFamily,
FTC_GNode_Done, FTC_GNode_Compare, FTC_Family_Init, FTC_GCache_New):
s/FT_EXPORT/FT_LOCAL/.
(FTC_GCache_Init, FTC_GCache_Done): Commented out.
(FTC_GCache_Lookup) [!FTC_INLINE]: Compile conditionally.
s/FT_EXPORT/FT_LOCAL/.
* src/cache/ftcglyph.h: Updated.
* src/cache/ftcimage.c (FTC_INode_Free, FTC_INode_New):
s/FT_EXPORT/FT_LOCAL/.
(FTC_INode_Weight): Commented out.
* src/cache/ftcimage.h: Updated.
* src/cache/ftmanag.c (FTC_Manager_Compress,
FTC_Manager_RegisterCache, FTC_Manager_FlushN):
s/FT_EXPORT/FT_LOCAL/.
* src/cache/ftmanag.h: Updated.
* src/cache/ftcsbits.c (FTC_SNode_Free, FTC_SNode_New,
FTC_SNode_Compare): s/FT_EXPORT/FT_LOCAL/.
(FTC_SNode_Weight): Commented out.
* src/cache/ftcsbits.h: Updated.
2006-03-22 16:30:41 +01:00
|
|
|
FT_LOCAL( void )
|
2006-03-20 12:48:13 +01:00
|
|
|
FTC_GCache_Done( FTC_GCache cache );
|
* src/cache/ftccache.c, (ftc_node_mru_up, FTC_Cache_Lookup)
[!FTC_INLINE]: Compile conditionally.
* src/cache/ftccache.h: Updated.
* src/cache/ftcglyph.c (FTC_GNode_Init, FTC_GNode_UnselectFamily,
FTC_GNode_Done, FTC_GNode_Compare, FTC_Family_Init, FTC_GCache_New):
s/FT_EXPORT/FT_LOCAL/.
(FTC_GCache_Init, FTC_GCache_Done): Commented out.
(FTC_GCache_Lookup) [!FTC_INLINE]: Compile conditionally.
s/FT_EXPORT/FT_LOCAL/.
* src/cache/ftcglyph.h: Updated.
* src/cache/ftcimage.c (FTC_INode_Free, FTC_INode_New):
s/FT_EXPORT/FT_LOCAL/.
(FTC_INode_Weight): Commented out.
* src/cache/ftcimage.h: Updated.
* src/cache/ftmanag.c (FTC_Manager_Compress,
FTC_Manager_RegisterCache, FTC_Manager_FlushN):
s/FT_EXPORT/FT_LOCAL/.
* src/cache/ftmanag.h: Updated.
* src/cache/ftcsbits.c (FTC_SNode_Free, FTC_SNode_New,
FTC_SNode_Compare): s/FT_EXPORT/FT_LOCAL/.
(FTC_SNode_Weight): Commented out.
* src/cache/ftcsbits.h: Updated.
2006-03-22 16:30:41 +01:00
|
|
|
#endif
|
2006-03-20 12:48:13 +01:00
|
|
|
|
|
|
|
|
|
|
|
/* the glyph cache class adds fields for the family implementation */
|
|
|
|
typedef struct FTC_GCacheClassRec_
|
|
|
|
{
|
|
|
|
FTC_CacheClassRec clazz;
|
|
|
|
FTC_MruListClass family_class;
|
|
|
|
|
|
|
|
} FTC_GCacheClassRec;
|
|
|
|
|
|
|
|
typedef const FTC_GCacheClassRec* FTC_GCacheClass;
|
|
|
|
|
|
|
|
#define FTC_GCACHE_CLASS( x ) ((FTC_GCacheClass)(x))
|
|
|
|
|
|
|
|
#define FTC_CACHE__GCACHE_CLASS( x ) \
|
|
|
|
FTC_GCACHE_CLASS( FTC_CACHE(x)->org_class )
|
|
|
|
#define FTC_CACHE__FAMILY_CLASS( x ) \
|
|
|
|
( (FTC_MruListClass)FTC_CACHE__GCACHE_CLASS( x )->family_class )
|
|
|
|
|
|
|
|
|
|
|
|
/* convenience function; use it instead of FTC_Manager_Register_Cache */
|
* src/cache/ftccache.c, (ftc_node_mru_up, FTC_Cache_Lookup)
[!FTC_INLINE]: Compile conditionally.
* src/cache/ftccache.h: Updated.
* src/cache/ftcglyph.c (FTC_GNode_Init, FTC_GNode_UnselectFamily,
FTC_GNode_Done, FTC_GNode_Compare, FTC_Family_Init, FTC_GCache_New):
s/FT_EXPORT/FT_LOCAL/.
(FTC_GCache_Init, FTC_GCache_Done): Commented out.
(FTC_GCache_Lookup) [!FTC_INLINE]: Compile conditionally.
s/FT_EXPORT/FT_LOCAL/.
* src/cache/ftcglyph.h: Updated.
* src/cache/ftcimage.c (FTC_INode_Free, FTC_INode_New):
s/FT_EXPORT/FT_LOCAL/.
(FTC_INode_Weight): Commented out.
* src/cache/ftcimage.h: Updated.
* src/cache/ftmanag.c (FTC_Manager_Compress,
FTC_Manager_RegisterCache, FTC_Manager_FlushN):
s/FT_EXPORT/FT_LOCAL/.
* src/cache/ftmanag.h: Updated.
* src/cache/ftcsbits.c (FTC_SNode_Free, FTC_SNode_New,
FTC_SNode_Compare): s/FT_EXPORT/FT_LOCAL/.
(FTC_SNode_Weight): Commented out.
* src/cache/ftcsbits.h: Updated.
2006-03-22 16:30:41 +01:00
|
|
|
FT_LOCAL( FT_Error )
|
2006-03-20 12:48:13 +01:00
|
|
|
FTC_GCache_New( FTC_Manager manager,
|
|
|
|
FTC_GCacheClass clazz,
|
|
|
|
FTC_GCache *acache );
|
|
|
|
|
* src/cache/ftccache.c, (ftc_node_mru_up, FTC_Cache_Lookup)
[!FTC_INLINE]: Compile conditionally.
* src/cache/ftccache.h: Updated.
* src/cache/ftcglyph.c (FTC_GNode_Init, FTC_GNode_UnselectFamily,
FTC_GNode_Done, FTC_GNode_Compare, FTC_Family_Init, FTC_GCache_New):
s/FT_EXPORT/FT_LOCAL/.
(FTC_GCache_Init, FTC_GCache_Done): Commented out.
(FTC_GCache_Lookup) [!FTC_INLINE]: Compile conditionally.
s/FT_EXPORT/FT_LOCAL/.
* src/cache/ftcglyph.h: Updated.
* src/cache/ftcimage.c (FTC_INode_Free, FTC_INode_New):
s/FT_EXPORT/FT_LOCAL/.
(FTC_INode_Weight): Commented out.
* src/cache/ftcimage.h: Updated.
* src/cache/ftmanag.c (FTC_Manager_Compress,
FTC_Manager_RegisterCache, FTC_Manager_FlushN):
s/FT_EXPORT/FT_LOCAL/.
* src/cache/ftmanag.h: Updated.
* src/cache/ftcsbits.c (FTC_SNode_Free, FTC_SNode_New,
FTC_SNode_Compare): s/FT_EXPORT/FT_LOCAL/.
(FTC_SNode_Weight): Commented out.
* src/cache/ftcsbits.h: Updated.
2006-03-22 16:30:41 +01:00
|
|
|
#ifndef FTC_INLINE
|
|
|
|
FT_LOCAL( FT_Error )
|
2006-03-20 12:48:13 +01:00
|
|
|
FTC_GCache_Lookup( FTC_GCache cache,
|
|
|
|
FT_UInt32 hash,
|
|
|
|
FT_UInt gindex,
|
|
|
|
FTC_GQuery query,
|
|
|
|
FTC_Node *anode );
|
* src/cache/ftccache.c, (ftc_node_mru_up, FTC_Cache_Lookup)
[!FTC_INLINE]: Compile conditionally.
* src/cache/ftccache.h: Updated.
* src/cache/ftcglyph.c (FTC_GNode_Init, FTC_GNode_UnselectFamily,
FTC_GNode_Done, FTC_GNode_Compare, FTC_Family_Init, FTC_GCache_New):
s/FT_EXPORT/FT_LOCAL/.
(FTC_GCache_Init, FTC_GCache_Done): Commented out.
(FTC_GCache_Lookup) [!FTC_INLINE]: Compile conditionally.
s/FT_EXPORT/FT_LOCAL/.
* src/cache/ftcglyph.h: Updated.
* src/cache/ftcimage.c (FTC_INode_Free, FTC_INode_New):
s/FT_EXPORT/FT_LOCAL/.
(FTC_INode_Weight): Commented out.
* src/cache/ftcimage.h: Updated.
* src/cache/ftmanag.c (FTC_Manager_Compress,
FTC_Manager_RegisterCache, FTC_Manager_FlushN):
s/FT_EXPORT/FT_LOCAL/.
* src/cache/ftmanag.h: Updated.
* src/cache/ftcsbits.c (FTC_SNode_Free, FTC_SNode_New,
FTC_SNode_Compare): s/FT_EXPORT/FT_LOCAL/.
(FTC_SNode_Weight): Commented out.
* src/cache/ftcsbits.h: Updated.
2006-03-22 16:30:41 +01:00
|
|
|
#endif
|
2006-03-20 12:48:13 +01:00
|
|
|
|
|
|
|
|
|
|
|
/* */
|
|
|
|
|
|
|
|
|
|
|
|
#define FTC_FAMILY_FREE( family, cache ) \
|
|
|
|
FTC_MruList_Remove( &FTC_GCACHE((cache))->families, \
|
|
|
|
(FTC_MruNode)(family) )
|
|
|
|
|
|
|
|
|
|
|
|
#ifdef FTC_INLINE
|
|
|
|
|
|
|
|
#define FTC_GCACHE_LOOKUP_CMP( cache, famcmp, nodecmp, hash, \
|
|
|
|
gindex, query, node, error ) \
|
|
|
|
FT_BEGIN_STMNT \
|
|
|
|
FTC_GCache _gcache = FTC_GCACHE( cache ); \
|
|
|
|
FTC_GQuery _gquery = (FTC_GQuery)( query ); \
|
|
|
|
FTC_MruNode_CompareFunc _fcompare = (FTC_MruNode_CompareFunc)(famcmp); \
|
|
|
|
\
|
|
|
|
\
|
|
|
|
_gquery->gindex = (gindex); \
|
|
|
|
\
|
|
|
|
FTC_MRULIST_LOOKUP_CMP( &_gcache->families, _gquery, _fcompare, \
|
|
|
|
_gquery->family, error ); \
|
|
|
|
if ( !error ) \
|
|
|
|
{ \
|
|
|
|
FTC_Family _gqfamily = _gquery->family; \
|
|
|
|
\
|
|
|
|
\
|
|
|
|
_gqfamily->num_nodes++; \
|
|
|
|
\
|
|
|
|
FTC_CACHE_LOOKUP_CMP( cache, nodecmp, hash, query, node, error ); \
|
|
|
|
\
|
|
|
|
if ( --_gqfamily->num_nodes == 0 ) \
|
|
|
|
FTC_FAMILY_FREE( _gqfamily, _gcache ); \
|
|
|
|
} \
|
|
|
|
FT_END_STMNT
|
|
|
|
/* */
|
|
|
|
|
|
|
|
#else /* !FTC_INLINE */
|
|
|
|
|
2007-05-16 17:19:42 +02:00
|
|
|
#define FTC_GCACHE_LOOKUP_CMP( cache, famcmp, nodecmp, hash, \
|
|
|
|
gindex, query, node, error ) \
|
|
|
|
FT_BEGIN_STMNT \
|
|
|
|
void* _n = &(node); \
|
|
|
|
\
|
|
|
|
\
|
|
|
|
error = FTC_GCache_Lookup( FTC_GCACHE( cache ), hash, gindex, \
|
|
|
|
FTC_GQUERY( query ), (FTC_Node*)_n ); \
|
2006-03-20 12:48:13 +01:00
|
|
|
FT_END_STMNT
|
|
|
|
|
|
|
|
#endif /* !FTC_INLINE */
|
|
|
|
|
|
|
|
|
|
|
|
FT_END_HEADER
|
|
|
|
|
|
|
|
|
|
|
|
#endif /* __FTCGLYPH_H__ */
|
|
|
|
|
|
|
|
|
|
|
|
/* END */
|