struct cso_hash_iter cso_find_state(struct cso_cache *sc, unsigned hash_key, enum cso_cache_type type) { struct cso_hash *hash = _cso_hash_for_type(sc, type); return cso_hash_find(hash, hash_key); }
struct cso_hash_iter cso_insert_state(struct cso_cache *sc, unsigned hash_key, enum cso_cache_type type, void *state) { struct cso_hash *hash = _cso_hash_for_type(sc, type); sanitize_hash(sc, hash, type, sc->max_size); return cso_hash_insert(hash, hash_key, state); }
void cso_for_each_state(struct cso_cache *sc, enum cso_cache_type type, cso_state_callback func, void *user_data) { struct cso_hash *hash = _cso_hash_for_type(sc, type); struct cso_hash_iter iter; iter = cso_hash_first_node(hash); while (!cso_hash_iter_is_null(iter)) { void *state = cso_hash_iter_data(iter); iter = cso_hash_iter_next(iter); if (state) { func(state, user_data); } } }
void * cso_take_state(struct cso_cache *sc, unsigned hash_key, enum cso_cache_type type) { struct cso_hash *hash = _cso_hash_for_type(sc, type); return cso_hash_take(hash, hash_key); }