| 65 | // *********************************************************************** |
| 66 | |
| 67 | cache_t *TwoQ_init(const common_cache_params_t ccache_params, |
| 68 | const char *cache_specific_params) { |
| 69 | cache_t *cache = |
| 70 | cache_struct_init("TwoQ", ccache_params, cache_specific_params); |
| 71 | cache->cache_init = TwoQ_init; |
| 72 | cache->cache_free = TwoQ_free; |
| 73 | cache->get = TwoQ_get; |
| 74 | cache->find = TwoQ_find; |
| 75 | cache->insert = TwoQ_insert; |
| 76 | cache->evict = TwoQ_evict; |
| 77 | cache->remove = TwoQ_remove; |
| 78 | cache->to_evict = TwoQ_to_evict; |
| 79 | cache->get_n_obj = TwoQ_get_n_obj; |
| 80 | cache->get_occupied_byte = TwoQ_get_occupied_byte; |
| 81 | cache->can_insert = TwoQ_can_insert; |
| 82 | |
| 83 | cache->obj_md_size = 0; |
| 84 | |
| 85 | cache->eviction_params = malloc(sizeof(TwoQ_params_t)); |
| 86 | memset(cache->eviction_params, 0, sizeof(TwoQ_params_t)); |
| 87 | TwoQ_params_t *params = (TwoQ_params_t *)cache->eviction_params; |
| 88 | params->req_local = new_request(); |
| 89 | params->hit_on_ghost = false; |
| 90 | |
| 91 | TwoQ_parse_params(cache, DEFAULT_CACHE_PARAMS); |
| 92 | if (cache_specific_params != NULL) { |
| 93 | TwoQ_parse_params(cache, cache_specific_params); |
| 94 | } |
| 95 | |
| 96 | params->Ain_cache_size = ccache_params.cache_size * params->Ain_size_ratio; |
| 97 | params->Aout_cache_size = ccache_params.cache_size * params->Aout_size_ratio; |
| 98 | params->Am_cache_size = ccache_params.cache_size - params->Ain_cache_size; |
| 99 | |
| 100 | common_cache_params_t ccache_params_local = ccache_params; |
| 101 | ccache_params_local.cache_size = params->Ain_cache_size; |
| 102 | params->Ain = FIFO_init(ccache_params_local, NULL); |
| 103 | |
| 104 | ccache_params_local.cache_size = params->Aout_cache_size; |
| 105 | params->Aout = FIFO_init(ccache_params_local, NULL); |
| 106 | |
| 107 | ccache_params_local.cache_size = params->Am_cache_size; |
| 108 | params->Am = LRU_init(ccache_params_local, NULL); |
| 109 | |
| 110 | return cache; |
| 111 | } |
| 112 | |
| 113 | /** |
| 114 | * free resources used by this cache |
no test coverage detected