wi_mutable_dictionary_t * wi_mutable_dictionary_with_data_and_keys(void *data0, void *key0, ...) {
    wi_dictionary_t     *dictionary;
    void                *data, *key;
    va_list             ap;

    dictionary = wi_dictionary_init(wi_mutable_dictionary_alloc());

    _wi_dictionary_set_data_for_key(dictionary, data0, key0);

    va_start(ap, key0);
    while((data = va_arg(ap, void *))) {
        key = va_arg(ap, void *);

        _wi_dictionary_set_data_for_key(dictionary, data, key);
    }
    va_end(ap);

    return wi_autorelease(dictionary);
}
void wi_mutable_dictionary_add_entries_from_dictionary(wi_mutable_dictionary_t *dictionary, wi_dictionary_t *otherdictionary) {
    _wi_dictionary_bucket_t     *bucket;
    wi_uinteger_t               i;

    WI_RUNTIME_ASSERT_MUTABLE(dictionary);

    for(i = 0; i < otherdictionary->buckets_count; i++) {
        for(bucket = otherdictionary->buckets[i]; bucket; bucket = bucket->next)
            _wi_dictionary_set_data_for_key(dictionary, bucket->data, bucket->key);
    }
}
static wi_runtime_instance_t * _wi_dictionary_copy(wi_runtime_instance_t *instance) {
    wi_dictionary_t             *dictionary = instance, *dictionary_copy;
    _wi_dictionary_bucket_t     *bucket;
    wi_uinteger_t               i;

    dictionary_copy = wi_dictionary_init_with_capacity_and_callbacks(wi_dictionary_alloc(), dictionary->key_count,
                      dictionary->key_callbacks, dictionary->value_callbacks);

    for(i = 0; i < dictionary->buckets_count; i++) {
        for(bucket = dictionary->buckets[i]; bucket; bucket = bucket->next)
            _wi_dictionary_set_data_for_key(dictionary_copy, bucket->data, bucket->key);
    }

    return dictionary_copy;
}
wi_dictionary_t * wi_dictionary_init_with_data_and_keys(wi_dictionary_t *dictionary, ...) {
    void        *data, *key;
    va_list     ap;

    dictionary = wi_dictionary_init_with_capacity(dictionary, 0);

    va_start(ap, dictionary);
    while((data = va_arg(ap, void *))) {
        key = va_arg(ap, void *);

        _wi_dictionary_set_data_for_key(dictionary, data, key);
    }
    va_end(ap);

    return dictionary;
}
void wi_mutable_dictionary_set_data_for_key(wi_mutable_dictionary_t *dictionary, void *data, void *key) {
    WI_RUNTIME_ASSERT_MUTABLE(dictionary);

    if(dictionary->value_callbacks.retain == wi_retain) {
        WI_ASSERT(data != NULL,
                  "attempt to insert NULL data in %@",
                  dictionary);
    }

    if(dictionary->key_callbacks.retain == wi_copy) {
        WI_ASSERT(key != NULL,
                  "attempt to insert NULL key in %@",
                  dictionary);
    }

    _wi_dictionary_set_data_for_key(dictionary, data, key);
}
Exemple #6
0
void wi_mutable_dictionary_set_data_for_key(wi_mutable_dictionary_t *dictionary, void *data, void *key) {
	WI_RUNTIME_ASSERT_MUTABLE(dictionary);
	
	_wi_dictionary_set_data_for_key(dictionary, data, key);
}