wi_list_t * wi_list_init_with_callbacks(wi_list_t *list, wi_list_callbacks_t callbacks) { list->callbacks = callbacks; list->node_chunks_offset = _wi_list_nodes_per_page; list->lock = wi_rwlock_init(wi_rwlock_alloc()); return list; }
wi_set_t * wi_set_init_with_capacity_and_callbacks(wi_set_t *set, wi_uinteger_t capacity, wi_set_callbacks_t callbacks) { set->callbacks = callbacks; set->bucket_chunks_offset = _wi_set_buckets_per_page; set->min_count = WI_MAX(wi_exp2m1(wi_log2(capacity) + 1), _WI_SET_MIN_COUNT); set->buckets_count = set->min_count; set->buckets = wi_malloc(set->buckets_count * sizeof(_wi_set_bucket_t *)); set->lock = wi_rwlock_init(wi_rwlock_alloc()); return set; }
wi_array_t * wi_array_init_with_capacity_and_callbacks(wi_array_t *array, wi_uinteger_t capacity, wi_array_callbacks_t callbacks) { array->callbacks = callbacks; array->item_chunks_offset = _wi_array_items_per_page; array->items_count = WI_MAX(wi_exp2m1(wi_log2(capacity) + 1), _WI_ARRAY_MIN_COUNT); array->min_count = array->items_count; array->items = wi_malloc(array->items_count * sizeof(_wi_array_item_t *)); array->lock = wi_rwlock_init(wi_rwlock_alloc()); return array; }
wi_dictionary_t * wi_dictionary_init_with_capacity_and_callbacks(wi_dictionary_t *dictionary, wi_uinteger_t capacity, wi_dictionary_key_callbacks_t key_callbacks, wi_dictionary_value_callbacks_t value_callbacks) { dictionary->key_callbacks = key_callbacks; dictionary->value_callbacks = value_callbacks; dictionary->bucket_chunks_offset = _wi_dictionary_buckets_per_page; dictionary->min_count = WI_MAX(wi_exp2m1(wi_log2(capacity) + 1), _WI_DICTIONARY_MIN_COUNT); dictionary->buckets_count = dictionary->min_count; dictionary->buckets = wi_malloc(dictionary->buckets_count * sizeof(_wi_dictionary_bucket_t *)); dictionary->lock = wi_rwlock_init(wi_rwlock_alloc()); return dictionary; }