| OLD | NEW |
| (Empty) |
| 1 /* | |
| 2 ********************************************************************** | |
| 3 * Copyright (C) 2003-2013, International Business Machines | |
| 4 * Corporation and others. All Rights Reserved. | |
| 5 ********************************************************************** | |
| 6 */ | |
| 7 | |
| 8 #include "layout/LETypes.h" | |
| 9 | |
| 10 //#include "letest.h" | |
| 11 #include "FontTableCache.h" | |
| 12 | |
| 13 #define TABLE_CACHE_INIT 5 | |
| 14 #define TABLE_CACHE_GROW 5 | |
| 15 | |
| 16 struct FontTableCacheEntry | |
| 17 { | |
| 18 LETag tag; | |
| 19 const void *table; | |
| 20 size_t length; | |
| 21 }; | |
| 22 | |
| 23 FontTableCache::FontTableCache() | |
| 24 : fTableCacheCurr(0), fTableCacheSize(TABLE_CACHE_INIT) | |
| 25 { | |
| 26 fTableCache = LE_NEW_ARRAY(FontTableCacheEntry, fTableCacheSize); | |
| 27 | |
| 28 if (fTableCache == NULL) { | |
| 29 fTableCacheSize = 0; | |
| 30 return; | |
| 31 } | |
| 32 | |
| 33 for (int i = 0; i < fTableCacheSize; i += 1) { | |
| 34 fTableCache[i].tag = 0; | |
| 35 fTableCache[i].table = NULL; | |
| 36 fTableCache[i].length = 0; | |
| 37 } | |
| 38 } | |
| 39 | |
| 40 FontTableCache::~FontTableCache() | |
| 41 { | |
| 42 for (int i = fTableCacheCurr - 1; i >= 0; i -= 1) { | |
| 43 LE_DELETE_ARRAY(fTableCache[i].table); | |
| 44 | |
| 45 fTableCache[i].tag = 0; | |
| 46 fTableCache[i].table = NULL; | |
| 47 fTableCache[i].length = 0; | |
| 48 } | |
| 49 | |
| 50 fTableCacheCurr = 0; | |
| 51 | |
| 52 LE_DELETE_ARRAY(fTableCache); | |
| 53 } | |
| 54 | |
| 55 void FontTableCache::freeFontTable(const void *table) const | |
| 56 { | |
| 57 LE_DELETE_ARRAY(table); | |
| 58 } | |
| 59 | |
| 60 const void *FontTableCache::find(LETag tableTag, size_t &length) const | |
| 61 { | |
| 62 for (int i = 0; i < fTableCacheCurr; i += 1) { | |
| 63 if (fTableCache[i].tag == tableTag) { | |
| 64 length = fTableCache[i].length; | |
| 65 return fTableCache[i].table; | |
| 66 } | |
| 67 } | |
| 68 | |
| 69 const void *table = readFontTable(tableTag, length); | |
| 70 | |
| 71 ((FontTableCache *) this)->add(tableTag, table, length); | |
| 72 | |
| 73 return table; | |
| 74 } | |
| 75 | |
| 76 void FontTableCache::add(LETag tableTag, const void *table, size_t length) | |
| 77 { | |
| 78 if (fTableCacheCurr >= fTableCacheSize) { | |
| 79 le_int32 newSize = fTableCacheSize + TABLE_CACHE_GROW; | |
| 80 | |
| 81 fTableCache = (FontTableCacheEntry *) LE_GROW_ARRAY(fTableCache, newSize
); | |
| 82 | |
| 83 for (le_int32 i = fTableCacheSize; i < newSize; i += 1) { | |
| 84 fTableCache[i].tag = 0; | |
| 85 fTableCache[i].table = NULL; | |
| 86 fTableCache[i].length = 0; | |
| 87 } | |
| 88 | |
| 89 fTableCacheSize = newSize; | |
| 90 } | |
| 91 | |
| 92 fTableCache[fTableCacheCurr].tag = tableTag; | |
| 93 fTableCache[fTableCacheCurr].table = table; | |
| 94 fTableCache[fTableCacheCurr].length = length; | |
| 95 | |
| 96 fTableCacheCurr += 1; | |
| 97 } | |
| OLD | NEW |