void wr_client_apply_settings(wi_set_t *changes) { wi_string_t *command; wi_p7_message_t *message; if(wi_set_contains_data(changes, WI_STR("nick"))) { wi_release(wr_nick); wr_nick = wi_retain(wi_config_string_for_name(wd_config, WI_STR("nick"))); if(!wr_nick) wr_nick = wi_retain(wi_user_name()); if(wr_connected) { message = wi_p7_message_with_name(WI_STR("wired.user.set_nick"), wr_p7_spec); wi_p7_message_set_string_for_name(message, wr_nick, WI_STR("wired.user.nick")); wr_client_send_message(message); } } if(wi_set_contains_data(changes, WI_STR("status"))) { wi_release(wr_status); wr_status = wi_retain(wi_config_string_for_name(wd_config, WI_STR("status"))); if(wr_connected) { message = wi_p7_message_with_name(WI_STR("wired.user.set_status"), wr_p7_spec); wi_p7_message_set_string_for_name(message, wr_status, WI_STR("wired.user.status")); wr_client_send_message(message); } } if(wi_set_contains_data(changes, WI_STR("icon"))) { wr_client_reload_icon(); // wi_fs_path_exists(wr_icon_path, false) { // wi_release(wr_icon); // wr_icon = wi_data_init_with_contents_of_file(wi_data_alloc(), wr_icon_path); // if(!wr_icon) // wr_icon = wi_data_init_with_base64(wi_data_alloc(), wi_string_with_cstring(wr_default_icon)); if(wr_connected) { message = wi_p7_message_with_name(WI_STR("wired.user.set_icon"), wr_p7_spec); wi_p7_message_set_data_for_name(message, wr_icon, WI_STR("wired.user.icon")); wr_client_send_message(message); } //} } }
void wd_user_unsubscribe_paths(wd_user_t *user) { wi_enumerator_t *enumerator; wi_string_t *path; wi_recursive_lock_lock(user->user_lock); enumerator = wi_array_data_enumerator(wi_set_all_data(user->subscribed_paths)); while((path = wi_enumerator_next_data(enumerator))) { wi_retain(path); while(wi_set_contains_data(user->subscribed_paths, path)) { if(wd_files_fsevents) wi_fsevents_remove_path(wd_files_fsevents, path); wi_mutable_set_remove_data(user->subscribed_paths, path); } wi_release(path); } wi_mutable_dictionary_remove_all_data(user->subscribed_virtualpaths); wi_recursive_lock_unlock(user->user_lock); }
void wi_test_set_instances(void) { wi_set_t *set; wi_array_t *array; set = wi_set_with_data(WI_STR("foo"), WI_STR("bar"), NULL); WI_TEST_ASSERT_NOT_NULL(set, ""); WI_TEST_ASSERT_EQUALS(wi_set_count(set), 2U, ""); WI_TEST_ASSERT_TRUE(wi_set_contains_data(set, WI_STR("foo")), ""); WI_TEST_ASSERT_TRUE(wi_set_contains_data(set, WI_STR("bar")), ""); array = wi_set_all_data(set); WI_TEST_ASSERT_EQUALS(wi_array_count(array), 2U, ""); WI_TEST_ASSERT_TRUE(wi_array_contains_data(array, WI_STR("foo")), ""); WI_TEST_ASSERT_TRUE(wi_array_contains_data(array, WI_STR("bar")), ""); }
void wi_test_set_scalars(void) { wi_mutable_set_t *set; wi_array_t *array; set = wi_set_init_with_capacity_and_callbacks(wi_mutable_set_alloc(), 0, false, wi_set_null_callbacks); wi_mutable_set_add_data(set, "foo"); wi_mutable_set_add_data(set, "bar"); WI_TEST_ASSERT_NOT_NULL(set, ""); WI_TEST_ASSERT_EQUALS(wi_set_count(set), 2U, ""); WI_TEST_ASSERT_TRUE(wi_set_contains_data(set, "foo"), ""); WI_TEST_ASSERT_TRUE(wi_set_contains_data(set, "bar"), ""); array = wi_set_all_data(set); WI_TEST_ASSERT_EQUALS(wi_array_count(array), 2U, ""); WI_TEST_ASSERT_TRUE(wi_array_contains_data(array, "foo"), ""); WI_TEST_ASSERT_TRUE(wi_array_contains_data(array, "bar"), ""); }
void wi_test_set_creation(void) { wi_set_t *set; set = wi_set(); WI_TEST_ASSERT_NOT_NULL(set, ""); WI_TEST_ASSERT_EQUALS(wi_set_count(set), 0U, ""); set = wi_set_with_data(WI_STR("foo"), WI_STR("bar"), NULL); WI_TEST_ASSERT_NOT_NULL(set, ""); WI_TEST_ASSERT_EQUALS(wi_set_count(set), 2U, ""); WI_TEST_ASSERT_TRUE(wi_set_contains_data(set, WI_STR("foo")), ""); WI_TEST_ASSERT_TRUE(wi_set_contains_data(set, WI_STR("bar")), ""); set = wi_autorelease(wi_set_init_with_data(wi_set_alloc(), WI_STR("foo"), WI_STR("bar"), NULL)); WI_TEST_ASSERT_NOT_NULL(set, ""); WI_TEST_ASSERT_EQUALS(wi_set_count(set), 2U, ""); WI_TEST_ASSERT_TRUE(wi_set_contains_data(set, WI_STR("foo")), ""); WI_TEST_ASSERT_TRUE(wi_set_contains_data(set, WI_STR("bar")), ""); set = wi_autorelease(wi_set_init_with_array(wi_set_alloc(), wi_array_with_data(WI_STR("foo"), WI_STR("bar"), NULL))); WI_TEST_ASSERT_NOT_NULL(set, ""); WI_TEST_ASSERT_EQUALS(wi_set_count(set), 2U, ""); WI_TEST_ASSERT_TRUE(wi_set_contains_data(set, WI_STR("foo")), ""); WI_TEST_ASSERT_TRUE(wi_set_contains_data(set, WI_STR("bar")), ""); }
static wi_boolean_t _wi_set_is_equal(wi_runtime_instance_t *instance1, wi_runtime_instance_t *instance2) { wi_set_t *set1 = instance1; wi_set_t *set2 = instance2; _wi_set_bucket_t *bucket; wi_uinteger_t i; if(set1->data_count != set2->data_count) return false; for(i = 0; i < set1->buckets_count; i++) { for(bucket = set1->buckets[i]; bucket; bucket = bucket->next) { if(!wi_set_contains_data(set2, bucket->data)) return false; } } return true; }
void wi_test_set(void) { wi_set_t *set; set = wi_set_init(wi_set_alloc()); WI_TEST_ASSERT_NOT_NULL(set, ""); wi_set_add_data(set, WI_STR("foo")); WI_TEST_ASSERT_TRUE(wi_set_contains_data(set, WI_STR("foo")), ""); WI_TEST_ASSERT_FALSE(wi_set_contains_data(set, WI_STR("bar")), ""); WI_TEST_ASSERT_EQUALS(wi_set_count_for_data(set, WI_STR("foo")), 1U, ""); wi_release(set); set = wi_set_init_with_capacity(wi_set_alloc(), 0, true); WI_TEST_ASSERT_NOT_NULL(set, ""); wi_set_add_data(set, WI_STR("foo")); wi_set_add_data(set, WI_STR("foo")); WI_TEST_ASSERT_TRUE(wi_set_contains_data(set, WI_STR("foo")), ""); WI_TEST_ASSERT_FALSE(wi_set_contains_data(set, WI_STR("bar")), ""); WI_TEST_ASSERT_EQUALS(wi_set_count_for_data(set, WI_STR("foo")), 2U, ""); wi_set_remove_data(set, WI_STR("foo")); WI_TEST_ASSERT_TRUE(wi_set_contains_data(set, WI_STR("foo")), ""); WI_TEST_ASSERT_EQUALS(wi_set_count_for_data(set, WI_STR("foo")), 1U, ""); wi_set_remove_data(set, WI_STR("foo")); WI_TEST_ASSERT_FALSE(wi_set_contains_data(set, WI_STR("foo")), ""); WI_TEST_ASSERT_EQUALS(wi_set_count_for_data(set, WI_STR("foo")), 0U, ""); wi_release(set); }
wi_boolean_t wi_config_write_file(wi_config_t *config) { wi_enumerator_t *enumerator; wi_file_t *file, *tmpfile; wi_string_t *string, *name, *value; wi_mutable_set_t *keys; wi_boolean_t write; file = wi_file_for_updating(config->path); if(!file) { wi_log_err(WI_STR("Could not open %@: %m"), config->path); return false; } tmpfile = wi_file_temporary_file(); wi_lock_lock(config->lock); keys = wi_autorelease(wi_mutable_copy(config->changes)); while((string = wi_file_read_line(file))) { if(wi_string_length(string) == 0) { wi_file_write_format(tmpfile, WI_STR("\n")); } else if(wi_string_has_prefix(string, WI_STR("#"))) { write = true; string = wi_string_substring_from_index(string, 1); if(_wi_config_parse_string(config, string, &name, &value)) { if(wi_set_contains_data(keys, name)) { if(_wi_config_write_setting_to_file(config, name, tmpfile)) { write = false; wi_mutable_set_remove_data(keys, name); } } } if(write) wi_file_write_format(tmpfile, WI_STR("#%@\n"), string); } else { write = true; if(_wi_config_parse_string(config, string, &name, &value)) { if(wi_set_contains_data(keys, name)) { if(_wi_config_write_setting_to_file(config, name, tmpfile)) { write = false; wi_mutable_set_remove_data(keys, name); } } } if(write) wi_file_write_format(tmpfile, WI_STR("%@\n"), string); } } enumerator = wi_set_data_enumerator(keys); while((name = wi_enumerator_next_data(enumerator))) _wi_config_write_setting_to_file(config, name, tmpfile); wi_mutable_set_remove_all_data(config->changes); wi_lock_unlock(config->lock); wi_file_truncate(file, 0); wi_file_seek(tmpfile, 0); while((string = wi_file_read_line(tmpfile))) wi_file_write_format(file, WI_STR("%@\n"), string); return true; }