/******************************************************************************* * font_cache_create ******************************************************************************/ void font_cache_create( struct font_cache* fcache, void *buf, int buf_size, int bitmap_bytes_size) { int font_cache_entry_size = sizeof(struct font_cache_entry) + bitmap_bytes_size; /* make sure font cache entries are a multiple of 16 bits */ if (font_cache_entry_size % 2 != 0) font_cache_entry_size++; int cache_size = buf_size / (font_cache_entry_size + LRU_SLOT_OVERHEAD + sizeof(short)); fcache->_size = 1; fcache->_capacity = cache_size; fcache->_prev_result = 0; fcache->_prev_char_code = 0; /* set up index */ fcache->_index = buf; /* set up lru list */ unsigned char* lru_buf = buf; lru_buf += sizeof(short) * cache_size; lru_create(&fcache->_lru, lru_buf, cache_size, font_cache_entry_size); /* initialise cache */ lru_traverse(&fcache->_lru, font_cache_lru_init); short i; for (i = 0; i < cache_size; i++) fcache->_index[i] = i; /* small cheat here */ }
int item_test() { int maxi = 0; //test set. for(int i = 0; i < 10; i++) { char key[1024]; memset(key, 0, 1024); sprintf(key, "charlie_%d", i); const size_t nkey = strlen(key) + 1; const int flags = 0; const time_t exptime = 0; const int nbytes = 1024; uint32_t cur_hv = jenkins_hash((void *)key, nkey); item *it = do_item_alloc((const char *)key, nkey, flags, exptime, nbytes, cur_hv); if(it == NULL) { fprintf(stderr, "\033[31malloc fail\033[0m"); maxi = i; break; } char val[1024]; sprintf(val, "%d", i); memcpy(ITEM_data(it), (void *)&val, strlen(val)+1); } //test get. for(int i = 0; i < 10; ++i) { char key[1024]; memset(key, 0, 1024); sprintf(key, "charlie_%d", i); const size_t nkey = strlen(key) + 1; uint32_t cur_hv = jenkins_hash((void *)key, nkey); item *it = assoc_find(key, nkey, cur_hv); if(it == NULL) { fprintf(stderr, "\033[31mget fail\033[0m"); return -1; } int val = 0; memcpy((void *)&val, ITEM_data(it), sizeof(val)); if(i&0x1) { fprintf(stdout, "del key:%s value:%d\n", ITEM_key(it), val); do_item_unlink(it, cur_hv); lru_traverse(NULL); } } return 0; }