21 #include FT_FREETYPE_H
24 #include FT_INTERNAL_MEMORY_H
25 #include FT_INTERNAL_OBJECTS_H
26 #include FT_INTERNAL_DEBUG_H
32 #define FT_COMPONENT trace_cache
35 #ifdef FT_CONFIG_OPTION_OLD_INTERNALS
37 typedef enum FTC_OldCMapType_
39 FTC_OLD_CMAP_BY_INDEX = 0,
40 FTC_OLD_CMAP_BY_ENCODING = 1,
41 FTC_OLD_CMAP_BY_ID = 2
46 typedef struct FTC_OldCMapIdRec_
51 } FTC_OldCMapIdRec, *FTC_OldCMapId;
54 typedef struct FTC_OldCMapDescRec_
67 } FTC_OldCMapDescRec, *FTC_OldCMapDesc;
87 #define FTC_CMAP_INDICES_MAX 128
90 #define FTC_CMAP_HASH( faceid, index, charcode ) \
91 ( _FTC_FACE_ID_HASH( faceid ) + 211 * (index) + \
92 ( (charcode) / FTC_CMAP_INDICES_MAX ) )
95 typedef struct FTC_CMapQueryRec_
103 #define FTC_CMAP_QUERY( x ) ((FTC_CMapQuery)(x))
104 #define FTC_CMAP_QUERY_HASH( x ) \
105 FTC_CMAP_HASH( (x)->face_id, (x)->cmap_index, (x)->char_code )
108 typedef struct FTC_CMapNodeRec_
118 #define FTC_CMAP_NODE( x ) ( (FTC_CMapNode)( x ) )
119 #define FTC_CMAP_NODE_HASH( x ) \
120 FTC_CMAP_HASH( (x)->face_id, (x)->cmap_index, (x)->first )
124 #define FTC_CMAP_UNKNOWN ( (FT_UInt16)-1 )
164 node->face_id = query->face_id;
165 node->cmap_index = query->cmap_index;
186 return sizeof ( *cnode );
203 *list_changed =
FALSE;
204 if ( node->face_id == query->face_id &&
205 node->cmap_index == query->cmap_index )
207 FT_UInt32
offset = (FT_UInt32)( query->char_code - node->first );
229 *list_changed =
FALSE;
230 return FT_BOOL( node->face_id == face_id );
265 &ftc_cmap_cache_class,
270 #ifdef FT_CONFIG_OPTION_OLD_INTERNALS
291 FT_UInt32 char_code )
299 FT_Int no_cmap_change = 0;
302 if ( cmap_index < 0 )
315 FT_TRACE0((
"FTC_CMapCache_Lookup: bad arguments, returning 0\n" ));
319 #ifdef FT_CONFIG_OPTION_OLD_INTERNALS
328 FTC_OldCMapDesc desc = (FTC_OldCMapDesc) face_id;
331 char_code = (FT_UInt32)cmap_index;
332 query.face_id = desc->face_id;
335 switch ( desc->type )
337 case FTC_OLD_CMAP_BY_INDEX:
338 query.cmap_index = desc->u.index;
339 query.char_code = (FT_UInt32)cmap_index;
342 case FTC_OLD_CMAP_BY_ENCODING:
366 query.face_id = face_id;
367 query.cmap_index = (
FT_UInt)cmap_index;
368 query.char_code = char_code;
377 error = FTC_Cache_Lookup( cache, hash, &query, &node );
405 #ifdef FT_MAX_CHARMAP_CACHEABLE
419 if ( old != cmap && !no_cmap_change )
424 if ( old != cmap && !no_cmap_change )
FTC_CMapCache_New(FTC_Manager manager, FTC_CMapCache *acache)
GLint GLenum GLsizei GLsizei GLsizei GLint GLenum GLenum type
struct FTC_CMapCacheRec_ * FTC_CMapCache
ftc_cmap_node_new(FTC_Node *ftcanode, FT_Pointer ftcquery, FTC_Cache cache)
ftc_cmap_node_weight(FTC_Node cnode, FTC_Cache cache)
struct FTC_CMapQueryRec_ FTC_CMapQueryRec
FT_CALLBACK_TABLE_DEF const FTC_CacheClassRec ftc_cmap_cache_class
ftc_cmap_node_compare(FTC_Node ftcnode, FT_Pointer ftcquery, FTC_Cache cache, FT_Bool *list_changed)
struct FTC_CMapNodeRec_ * FTC_CMapNode
#define FT_MAX_CHARMAP_CACHEABLE
#define FTC_CMAP_INDICES_MAX
ftc_cmap_node_free(FTC_Node ftcnode, FTC_Cache cache)
FT_BEGIN_HEADER typedef FT_Pointer FTC_FaceID
ftc_cache_init(FTC_Cache cache)
struct FTC_CMapQueryRec_ * FTC_CMapQuery
FT_BEGIN_HEADER typedef unsigned char FT_Bool
#define FT_ASSERT(condition)
FTC_CMapCache_Lookup(FTC_CMapCache cache, FTC_FaceID face_id, FT_Int cmap_index, FT_UInt32 char_code)
FTC_Manager_RegisterCache(FTC_Manager manager, FTC_CacheClass clazz, FTC_Cache *acache)
FT_Get_Char_Index(FT_Face face, FT_ULong charcode)
#define FT_TRACE0(varformat)
FT_Select_Charmap(FT_Face face, FT_Encoding encoding)
#define FTC_CMAP_HASH(faceid, index, charcode)
#define FT_CALLBACK_DEF(x)
enum FT_Encoding_ FT_Encoding
FT_Set_Charmap(FT_Face face, FT_CharMap charmap)
typedefFT_BEGIN_HEADER struct FT_MemoryRec_ * FT_Memory
struct FTC_CacheRec_ FTC_CacheRec
#define FTC_CACHE_LOOKUP_CMP(cache, nodecmp, hash, query, node, error)
struct FTC_CMapNodeRec_ FTC_CMapNodeRec
ftc_cache_done(FTC_Cache cache)
#define FT_CALLBACK_TABLE_DEF
FTC_Manager_LookupFace(FTC_Manager manager, FTC_FaceID face_id, FT_Face *aface)
GLsizei GLenum const GLvoid * indices
ftc_cmap_node_remove_faceid(FTC_Node ftcnode, FT_Pointer ftcface_id, FTC_Cache cache, FT_Bool *list_changed)