diff options
author | greg <greg@blackbox> | 2009-06-18 14:09:35 +0200 |
---|---|---|
committer | greg <greg@blackbox> | 2009-06-19 05:17:22 +0200 |
commit | 2f59cd0e21b3f4a953b67525fa56b133d4d6b352 (patch) | |
tree | 14d1c2ebf7cb0aa2f147f13472d4536c3c34c908 /libass/ass_cache.h | |
parent | 3dcfa5a61e58068b38fb97477e8935550ca8c683 (diff) | |
download | libass-2f59cd0e21b3f4a953b67525fa56b133d4d6b352.tar.bz2 libass-2f59cd0e21b3f4a953b67525fa56b133d4d6b352.tar.xz |
Remove cache globals; move cache data into a separate cache_store struct
that is part of ass_renderer.
Diffstat (limited to 'libass/ass_cache.h')
-rw-r--r-- | libass/ass_cache.h | 81 |
1 files changed, 50 insertions, 31 deletions
diff --git a/libass/ass_cache.h b/libass/ass_cache.h index f227303f..55c543e2 100644 --- a/libass/ass_cache.h +++ b/libass/ass_cache.h @@ -27,10 +27,41 @@ #include "ass_font.h" #include "ass_bitmap.h" -void ass_font_cache_init(void); -ass_font_t* ass_font_cache_find(ass_font_desc_t* desc); -void* ass_font_cache_add(ass_font_t* font); -void ass_font_cache_done(void); +typedef void (*hashmap_item_dtor_t)(void* key, size_t key_size, void* value, size_t value_size); +typedef int (*hashmap_key_compare_t)(void* key1, void* key2, size_t key_size); +typedef unsigned (*hashmap_hash_t)(void* key, size_t key_size); + +typedef struct hashmap_item_s { + void* key; + void* value; + struct hashmap_item_s* next; +} hashmap_item_t; +typedef hashmap_item_t* hashmap_item_p; + +typedef struct hashmap_s { + int nbuckets; + size_t key_size, value_size; + hashmap_item_p* root; + hashmap_item_dtor_t item_dtor; // a destructor for hashmap key/value pairs + hashmap_key_compare_t key_compare; + hashmap_hash_t hash; + // stats + int hit_count; + int miss_count; + int count; +} hashmap_t; + +hashmap_t* hashmap_init(size_t key_size, size_t value_size, int nbuckets, + hashmap_item_dtor_t item_dtor, hashmap_key_compare_t key_compare, + hashmap_hash_t hash); +void hashmap_done(hashmap_t* map); +void* hashmap_insert(hashmap_t* map, void* key, void* value); +void* hashmap_find(hashmap_t* map, void* key); + +hashmap_t* ass_font_cache_init(void); +ass_font_t* ass_font_cache_find(hashmap_t*, ass_font_desc_t* desc); +void* ass_font_cache_add(hashmap_t*, ass_font_t* font); +void ass_font_cache_done(hashmap_t*); // Create definitions for bitmap_hash_key and glyph_hash_key #define CREATE_STRUCT_DEFINITIONS @@ -42,11 +73,11 @@ typedef struct bitmap_hash_val_s { bitmap_t* bm_s; } bitmap_hash_val_t; -void ass_bitmap_cache_init(void); -void* cache_add_bitmap(bitmap_hash_key_t* key, bitmap_hash_val_t* val); -bitmap_hash_val_t* cache_find_bitmap(bitmap_hash_key_t* key); -void ass_bitmap_cache_reset(void); -void ass_bitmap_cache_done(void); +hashmap_t* ass_bitmap_cache_init(void); +void* cache_add_bitmap(hashmap_t*, bitmap_hash_key_t* key, bitmap_hash_val_t* val); +bitmap_hash_val_t* cache_find_bitmap(hashmap_t* bitmap_cache, bitmap_hash_key_t* key); +hashmap_t* ass_bitmap_cache_reset(hashmap_t* bitmap_cache); +void ass_bitmap_cache_done(hashmap_t* bitmap_cache); // Cache for composited bitmaps @@ -62,11 +93,11 @@ typedef struct composite_hash_val_s { unsigned char* b; } composite_hash_val_t; -void ass_composite_cache_init(void); -void* cache_add_composite(composite_hash_key_t* key, composite_hash_val_t* val); -composite_hash_val_t* cache_find_composite(composite_hash_key_t* key); -void ass_composite_cache_reset(void); -void ass_composite_cache_done(void); +hashmap_t* ass_composite_cache_init(void); +void* cache_add_composite(hashmap_t*, composite_hash_key_t* key, composite_hash_val_t* val); +composite_hash_val_t* cache_find_composite(hashmap_t* composite_cache, composite_hash_key_t* key); +hashmap_t* ass_composite_cache_reset(hashmap_t* composite_cache); +void ass_composite_cache_done(hashmap_t* composite_cache); typedef struct glyph_hash_val_s { @@ -76,22 +107,10 @@ typedef struct glyph_hash_val_s { FT_Vector advance; // 26.6, advance distance to the next bitmap in line } glyph_hash_val_t; -void ass_glyph_cache_init(void); -void* cache_add_glyph(glyph_hash_key_t* key, glyph_hash_val_t* val); -glyph_hash_val_t* cache_find_glyph(glyph_hash_key_t* key); -void ass_glyph_cache_reset(void); -void ass_glyph_cache_done(void); - -typedef struct hashmap_s hashmap_t; -typedef void (*hashmap_item_dtor_t)(void* key, size_t key_size, void* value, size_t value_size); -typedef int (*hashmap_key_compare_t)(void* key1, void* key2, size_t key_size); -typedef unsigned (*hashmap_hash_t)(void* key, size_t key_size); - -hashmap_t* hashmap_init(size_t key_size, size_t value_size, int nbuckets, - hashmap_item_dtor_t item_dtor, hashmap_key_compare_t key_compare, - hashmap_hash_t hash); -void hashmap_done(hashmap_t* map); -void* hashmap_insert(hashmap_t* map, void* key, void* value); -void* hashmap_find(hashmap_t* map, void* key); +hashmap_t* ass_glyph_cache_init(void); +void* cache_add_glyph(hashmap_t*, glyph_hash_key_t* key, glyph_hash_val_t* val); +glyph_hash_val_t* cache_find_glyph(hashmap_t* glyph_cache, glyph_hash_key_t* key); +hashmap_t* ass_glyph_cache_reset(hashmap_t* glyph_cache); +void ass_glyph_cache_done(hashmap_t* glyph_cache); #endif /* LIBASS_CACHE_H */ |