Ejemplo n.º 1
0
/*******************************************************************************
 * 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 */
}
Ejemplo n.º 2
0
END_TEST

START_TEST(eject_one) {
    lru_t *lru;
    int ejected = 0;

    lru = lru_create();
    lru_insert(lru, "one", 3, "one", 3, NULL);
    lru_insert(lru, "two", 3, "two", 3, NULL);
    lru_insert(lru, "three", 5, "three", 5, NULL);
    ejected = lru_eject_by_size(lru, 3, NULL, NULL);
    dprintf("ejected %d\n", ejected);
    fail_unless(ejected > 0);
}
Ejemplo n.º 3
0
END_TEST

START_TEST(touch) {
    lru_t *lru;
    lru_item_t * one;

    lru = lru_create();
    one = lru_insert(lru, "one", 3, "one", 3, NULL);
    lru_insert(lru, "two", 3, "two", 3, NULL);
    lru_insert(lru, "three", 5, "three", 5, NULL);
    lru_touch(lru, one);
    fail_unless(one == (lru_item_t*)lru->list->head->data);
    lru_destroy(lru);
}
Ejemplo n.º 4
0
END_TEST

START_TEST(eject_multiple) {
    lru_t *lru;
    int ejected = 0;
    lru_item_t *three;
    mark_point();
    lru = lru_create();
    mark_point();
    lru_insert(lru, "one", 3, "one", 3, NULL);
    lru_insert(lru, "two", 3, "two", 3, NULL);
    three = lru_insert(lru, "three", 5, "three", 5, NULL);
    ejected = lru_eject_by_size(lru, 12, NULL, NULL);
    dprintf("test ejected %d\n", ejected);
    fail_unless((lru_item_t*)lru->list->head->data == three);
    fail_unless(ejected == 12);
    lru_destroy(lru);
}