30 FTC_GNode_Init( FTC_GNode gnode,
34 gnode->family = family;
35 gnode->gindex = gindex;
41 FTC_GNode_UnselectFamily( FTC_GNode gnode,
44 FTC_Family family = gnode->family;
48 if ( family && --family->num_nodes == 0 )
49 FTC_FAMILY_FREE( family, cache );
54 FTC_GNode_Done( FTC_GNode gnode,
60 FTC_GNode_UnselectFamily( gnode, cache );
64 FT_LOCAL_DEF( FT_Bool )
65 ftc_gnode_compare( FTC_Node ftcgnode,
68 FT_Bool* list_changed )
70 FTC_GNode gnode = (FTC_GNode)ftcgnode;
71 FTC_GQuery gquery = (FTC_GQuery)ftcgquery;
76 *list_changed = FALSE;
77 return FT_BOOL( gnode->family == gquery->family &&
78 gnode->gindex == gquery->gindex );
91 FTC_Family_Init( FTC_Family family,
94 FTC_GCacheClass clazz = FTC_CACHE_GCACHE_CLASS( cache );
97 family->clazz = clazz->family_class;
98 family->num_nodes = 0;
99 family->cache = cache;
103 FT_LOCAL_DEF( FT_Error )
104 ftc_gcache_init( FTC_Cache cache )
106 FTC_GCache gcache = (FTC_GCache)cache;
110 error = FTC_Cache_Init( cache );
113 FTC_GCacheClass clazz = (FTC_GCacheClass)cache->org_class;
115 FTC_MruList_Init( &gcache->families,
128 FT_LOCAL_DEF( FT_Error )
129 FTC_GCache_Init( FTC_GCache gcache )
131 return ftc_gcache_init( FTC_CACHE( gcache ) );
138 ftc_gcache_done( FTC_Cache cache )
140 FTC_GCache gcache = (FTC_GCache)cache;
143 FTC_Cache_Done( cache );
144 FTC_MruList_Done( &gcache->families );
151 FTC_GCache_Done( FTC_GCache gcache )
153 ftc_gcache_done( FTC_CACHE( gcache ) );
159 FT_LOCAL_DEF( FT_Error )
160 FTC_GCache_New( FTC_Manager manager,
161 FTC_GCacheClass clazz,
164 return FTC_Manager_RegisterCache( manager, (FTC_CacheClass)clazz,
165 (FTC_Cache*)acache );
171 FT_LOCAL_DEF( FT_Error )
172 FTC_GCache_Lookup( FTC_GCache gcache,
181 query->gindex = gindex;
183 FTC_MRULIST_LOOKUP( &gcache->families, query, query->family, error );
186 FTC_Family family = query->family;
193 error = FTC_Cache_Lookup( FTC_CACHE( gcache ), hash, query, anode );
195 if ( --family->num_nodes == 0 )
196 FTC_FAMILY_FREE( family, FTC_CACHE( gcache ) );