diff --git a/src/command_download.cc b/src/command_download.cc index 8de05db0..f7369a68 100644 --- a/src/command_download.cc +++ b/src/command_download.cc @@ -87,7 +87,7 @@ apply_d_change_link(int changeType, core::Download* download, const torrent::Obj if (args.size() != 3) throw torrent::input_error("Wrong argument count."); - torrent::Object::list_type::const_iterator itr = args.begin(); + torrent::Object::list_const_iterator itr = args.begin(); const std::string& type = (itr++)->as_string(); const std::string& prefix = (itr++)->as_string(); @@ -251,7 +251,7 @@ f_multicall(core::Download* download, const torrent::Object& rawArgs) { for (torrent::FileList::const_iterator itr = download->file_list()->begin(), last = download->file_list()->end(); itr != last; itr++) { torrent::Object::list_type& row = result.insert(result.end(), torrent::Object(torrent::Object::TYPE_LIST))->as_list(); - for (torrent::Object::list_type::const_iterator cItr = ++args.begin(), cLast = args.end(); cItr != args.end(); cItr++) { + for (torrent::Object::list_const_iterator cItr = ++args.begin(), cLast = args.end(); cItr != args.end(); cItr++) { const std::string& cmd = cItr->as_string(); row.push_back(rpc::parse_command(rpc::make_target(*itr), cmd.c_str(), cmd.c_str() + cmd.size()).first); } @@ -278,7 +278,7 @@ t_multicall(core::Download* download, const torrent::Object& rawArgs) { for (int itr = 0, last = download->tracker_list()->size(); itr != last; itr++) { torrent::Object::list_type& row = result.insert(result.end(), torrent::Object(torrent::Object::TYPE_LIST))->as_list(); - for (torrent::Object::list_type::const_iterator cItr = ++args.begin(), cLast = args.end(); cItr != args.end(); cItr++) { + for (torrent::Object::list_const_iterator cItr = ++args.begin(), cLast = args.end(); cItr != args.end(); cItr++) { const std::string& cmd = cItr->as_string(); torrent::Tracker t = download->tracker_list()->get(itr); diff --git a/src/command_events.cc b/src/command_events.cc index 550a61cd..30f45c54 100644 --- a/src/command_events.cc +++ b/src/command_events.cc @@ -85,7 +85,7 @@ apply_on_ratio(int action, const torrent::Object& rawArgs) { if (args.empty()) throw torrent::input_error("Too few arguments."); - torrent::Object::list_type::const_iterator argItr = args.begin(); + torrent::Object::list_const_iterator argItr = args.begin(); // first argument: minimum ratio to reach // second argument: minimum upload amount to reach [optional] @@ -119,7 +119,7 @@ apply_on_ratio(int action, const torrent::Object& rawArgs) { rpc::call_command("d.set_ignore_commands", (int64_t)1, rpc::make_target(*itr)); - for (torrent::Object::list_type::const_iterator itr2 = argItr; itr2 != args.end(); itr2++) + for (torrent::Object::list_const_iterator itr2 = argItr; itr2 != args.end(); itr2++) rpc::parse_command_object(rpc::make_target(*itr), *itr2); } @@ -198,7 +198,7 @@ apply_schedule(const torrent::Object& rawArgs) { if (args.size() != 4) throw torrent::input_error("Wrong number of arguments."); - torrent::Object::list_type::const_iterator itr = args.begin(); + torrent::Object::list_const_iterator itr = args.begin(); const std::string& arg1 = (itr++)->as_string(); const std::string& arg2 = (itr++)->as_string(); @@ -213,7 +213,7 @@ apply_schedule(const torrent::Object& rawArgs) { torrent::Object apply_load(int flags, const torrent::Object& rawArgs) { const torrent::Object::list_type& args = rawArgs.as_list(); - torrent::Object::list_type::const_iterator argsItr = args.begin(); + torrent::Object::list_const_iterator argsItr = args.begin(); if (argsItr == args.end()) throw torrent::input_error("Too few arguments."); @@ -260,7 +260,7 @@ apply_close_low_diskspace(int64_t arg) { torrent::Object apply_download_list(const torrent::Object& rawArgs) { const torrent::Object::list_type& args = rawArgs.as_list(); - torrent::Object::list_type::const_iterator argsItr = args.begin(); + torrent::Object::list_const_iterator argsItr = args.begin(); core::ViewManager* viewManager = control->view_manager(); core::ViewManager::iterator viewItr; @@ -322,7 +322,7 @@ d_multicall(const torrent::Object& rawArgs) { for (core::View::const_iterator vItr = (*viewItr)->begin_visible(), vLast = (*viewItr)->end_visible(); vItr != vLast; vItr++) { torrent::Object::list_type& row = result.insert(result.end(), torrent::Object(torrent::Object::TYPE_LIST))->as_list(); - for (torrent::Object::list_type::const_iterator cItr = ++args.begin(), cLast = args.end(); cItr != args.end(); cItr++) { + for (torrent::Object::list_const_iterator cItr = ++args.begin(), cLast = args.end(); cItr != args.end(); cItr++) { const std::string& cmd = cItr->as_string(); row.push_back(rpc::parse_command(rpc::make_target(*vItr), cmd.c_str(), cmd.c_str() + cmd.size()).first); } diff --git a/src/command_network.cc b/src/command_network.cc index 5bf5fc4d..bf74acfb 100644 --- a/src/command_network.cc +++ b/src/command_network.cc @@ -64,7 +64,7 @@ apply_encryption(const torrent::Object& rawArgs) { uint32_t options_mask = torrent::ConnectionManager::encryption_none; - for (torrent::Object::list_type::const_iterator itr = args.begin(), last = args.end(); itr != last; itr++) { + for (torrent::Object::list_const_iterator itr = args.begin(), last = args.end(); itr != last; itr++) { const std::string& opt = itr->as_string(); if (opt == "none") diff --git a/src/command_ui.cc b/src/command_ui.cc index 62e80dab..9f8b8f7b 100644 --- a/src/command_ui.cc +++ b/src/command_ui.cc @@ -66,7 +66,7 @@ apply_view_filter(view_filter_slot viewFilterSlot, const torrent::Object& rawArg core::ViewManager::filter_args filterArgs; - for (torrent::Object::list_type::const_iterator itr = ++args.begin(), last = args.end(); itr != last; itr++) + for (torrent::Object::list_const_iterator itr = ++args.begin(), last = args.end(); itr != last; itr++) filterArgs.push_back(itr->as_string()); (control->view_manager()->*viewFilterSlot)(name, filterArgs); @@ -207,7 +207,7 @@ apply_to_xb(const torrent::Object& rawArgs) { torrent::Object apply_if(rpc::target_type target, const torrent::Object& rawArgs) { const torrent::Object::list_type& args = rawArgs.as_list(); - torrent::Object::list_type::const_iterator itr = args.begin(); + torrent::Object::list_const_iterator itr = args.begin(); while (itr != args.end() && itr != --args.end()) { torrent::Object tmp; diff --git a/src/core/download_factory.cc b/src/core/download_factory.cc index 9b102182..f7c4a172 100644 --- a/src/core/download_factory.cc +++ b/src/core/download_factory.cc @@ -177,10 +177,7 @@ DownloadFactory::receive_success() { root->erase_key("libtorrent"); } - if (!root->has_key_map("rtorrent")) - root->insert_key("rtorrent", torrent::Object(torrent::Object::TYPE_MAP)); - - torrent::Object* rtorrent = &root->get_key("rtorrent"); + torrent::Object* rtorrent = &root->insert_preserve_map("rtorrent").first->second; initialize_rtorrent(download, rtorrent); @@ -232,10 +229,7 @@ DownloadFactory::receive_success() { rpc::call_command("d.set_peer_exchange", rpc::call_command_value("get_peer_exchange"), rpc::make_target(download)); - torrent::Object& resumeObject = root->has_key_map("libtorrent_resume") - ? root->get_key("libtorrent_resume") - : root->insert_key("libtorrent_resume", torrent::Object(torrent::Object::TYPE_MAP)); - + torrent::Object& resumeObject = root->insert_preserve_map("libtorrent_resume").first->second; torrent::resume_load_addresses(*download->download(), resumeObject); torrent::resume_load_file_priorities(*download->download(), resumeObject); torrent::resume_load_tracker_settings(*download->download(), resumeObject); @@ -322,14 +316,9 @@ DownloadFactory::initialize_rtorrent(Download* download, torrent::Object* rtorre rtorrent->insert_key("state_changed", cachedTime.seconds()); } - if (!rtorrent->has_key_value("complete")) - rtorrent->insert_key("complete", (int64_t)0); - - if (!rtorrent->has_key_value("hashing")) - rtorrent->insert_key("hashing", (int64_t)Download::variable_hashing_stopped); - - if (!rtorrent->has_key_string("tied_to_file")) - rtorrent->insert_key("tied_to_file", std::string()); + rtorrent->insert_preserve_value("complete", 0); + rtorrent->insert_preserve_value("hashing", Download::variable_hashing_stopped); + rtorrent->insert_preserve_cstr("tied_to_file", ""); if (rtorrent->has_key_value("priority")) rpc::call_command("d.set_priority", rtorrent->get_key_value("priority") % 4, rpc::make_target(download)); @@ -351,8 +340,7 @@ DownloadFactory::initialize_rtorrent(Download* download, torrent::Object* rtorre download->download()->set_chunks_done(std::min(rtorrent->get_key_value("chunks_done"), download->download()->file_list()->size_chunks())); - if (!rtorrent->has_key_value("ignore_commands")) - rtorrent->insert_key("ignore_commands", (int64_t)0); + rtorrent->insert_preserve_value("ignore_commands", 0); } } diff --git a/src/rpc/exec_file.cc b/src/rpc/exec_file.cc index 00d77f19..4607eaf6 100644 --- a/src/rpc/exec_file.cc +++ b/src/rpc/exec_file.cc @@ -120,7 +120,7 @@ ExecFile::execute_object(const torrent::Object& rawArgs, int flags) { if (args.empty()) throw torrent::input_error("Too few arguments."); - for (torrent::Object::list_type::const_iterator itr = args.begin(), last = args.end(); itr != last; itr++, argsCurrent++) { + for (torrent::Object::list_const_iterator itr = args.begin(), last = args.end(); itr != last; itr++, argsCurrent++) { if (argsCurrent == argsBuffer + max_args - 1) throw torrent::input_error("Too many arguments."); diff --git a/src/rpc/parse.cc b/src/rpc/parse.cc index 8c365a26..7d7855b2 100644 --- a/src/rpc/parse.cc +++ b/src/rpc/parse.cc @@ -235,8 +235,8 @@ convert_list_to_string(const torrent::Object& src) { } std::string -convert_list_to_string(torrent::Object::list_type::const_iterator first, - torrent::Object::list_type::const_iterator last) { +convert_list_to_string(torrent::Object::list_const_iterator first, + torrent::Object::list_const_iterator last) { std::string dest; while (first != last) { @@ -270,8 +270,8 @@ convert_list_to_string(torrent::Object::list_type::const_iterator first, } std::string -convert_list_to_command(torrent::Object::list_type::const_iterator first, - torrent::Object::list_type::const_iterator last) { +convert_list_to_command(torrent::Object::list_const_iterator first, + torrent::Object::list_const_iterator last) { if (first == last) throw torrent::input_error("Too few arguments."); @@ -375,7 +375,7 @@ print_object(char* first, char* last, const torrent::Object* src, int flags) { return std::max(first + snprintf(first, std::distance(first, last), "%lli", src->as_value()), last); case torrent::Object::TYPE_LIST: - for (torrent::Object::list_type::const_iterator itr = src->as_list().begin(), itrEnd = src->as_list().end(); itr != itrEnd; itr++) { + for (torrent::Object::list_const_iterator itr = src->as_list().begin(), itrEnd = src->as_list().end(); itr != itrEnd; itr++) { first = print_object(first, last, &*itr, flags); // Don't expand tilde after the first element in the list. @@ -412,7 +412,7 @@ print_object_std(std::string* dest, const torrent::Object* src, int flags) { return; } case torrent::Object::TYPE_LIST: - for (torrent::Object::list_type::const_iterator itr = src->as_list().begin(), itrEnd = src->as_list().end(); itr != itrEnd; itr++) { + for (torrent::Object::list_const_iterator itr = src->as_list().begin(), itrEnd = src->as_list().end(); itr != itrEnd; itr++) { print_object_std(dest, &*itr, flags); // Don't expand tilde after the first element in the list. diff --git a/src/rpc/parse.h b/src/rpc/parse.h index 2bc33b13..0d173d2f 100644 --- a/src/rpc/parse.h +++ b/src/rpc/parse.h @@ -74,8 +74,8 @@ const char* parse_list(const char* first, const char* last, torrent::Object* des const char* parse_whole_list(const char* first, const char* last, torrent::Object* dest); std::string convert_list_to_string(const torrent::Object& src); -std::string convert_list_to_string(torrent::Object::list_type::const_iterator first, torrent::Object::list_type::const_iterator last); -std::string convert_list_to_command(torrent::Object::list_type::const_iterator first, torrent::Object::list_type::const_iterator last); +std::string convert_list_to_string(torrent::Object::list_const_iterator first, torrent::Object::list_const_iterator last); +std::string convert_list_to_command(torrent::Object::list_const_iterator first, torrent::Object::list_const_iterator last); int64_t convert_to_value(const torrent::Object& src, int base = 0, int unit = 1); bool convert_to_value_nothrow(const torrent::Object& src, int64_t* value, int base = 0, int unit = 1); diff --git a/src/rpc/parse_commands.cc b/src/rpc/parse_commands.cc index 12873a11..1af3dccb 100644 --- a/src/rpc/parse_commands.cc +++ b/src/rpc/parse_commands.cc @@ -86,7 +86,7 @@ parse_command_execute(target_type target, torrent::Object* object) { if (object->is_list()) { // For now, until we can flag the lists we want executed and those // we can't, disable recursion completely. - for (torrent::Object::list_type::iterator itr = object->as_list().begin(), last = object->as_list().end(); itr != last; itr++) { + for (torrent::Object::list_iterator itr = object->as_list().begin(), last = object->as_list().end(); itr != last; itr++) { if (itr->is_list()) continue; diff --git a/src/rpc/parse_commands.h b/src/rpc/parse_commands.h index 062b6519..4e7f5fef 100644 --- a/src/rpc/parse_commands.h +++ b/src/rpc/parse_commands.h @@ -107,7 +107,7 @@ inline void call_command_d_set_string(const char* key, core::Download inline void call_command_d_set_std_string(const std::string& key, core::Download* download, const std::string& arg) { commands.call_command_d(key.c_str(), download, torrent::Object(arg)); } inline torrent::Object -call_command_d_range(const char* key, core::Download* download, torrent::Object::list_type::const_iterator first, torrent::Object::list_type::const_iterator last) { +call_command_d_range(const char* key, core::Download* download, torrent::Object::list_const_iterator first, torrent::Object::list_const_iterator last) { // Change to using range ctor. torrent::Object rawArgs(torrent::Object::TYPE_LIST); torrent::Object::list_type& args = rawArgs.as_list(); diff --git a/src/rpc/xmlrpc.cc b/src/rpc/xmlrpc.cc index 231faac1..57c08761 100644 --- a/src/rpc/xmlrpc.cc +++ b/src/rpc/xmlrpc.cc @@ -350,7 +350,7 @@ object_to_xmlrpc(xmlrpc_env* env, const torrent::Object& object) { { xmlrpc_value* result = xmlrpc_array_new(env); - for (torrent::Object::list_type::const_iterator itr = object.as_list().begin(), last = object.as_list().end(); itr != last; itr++) + for (torrent::Object::list_const_iterator itr = object.as_list().begin(), last = object.as_list().end(); itr != last; itr++) xmlrpc_array_append_item(env, result, object_to_xmlrpc(env, *itr)); return result; @@ -360,7 +360,7 @@ object_to_xmlrpc(xmlrpc_env* env, const torrent::Object& object) { { xmlrpc_value* result = xmlrpc_struct_new(env); - for (torrent::Object::map_type::const_iterator itr = object.as_map().begin(), last = object.as_map().end(); itr != last; itr++) + for (torrent::Object::map_const_iterator itr = object.as_map().begin(), last = object.as_map().end(); itr != last; itr++) xmlrpc_struct_set_value(env, result, itr->first.c_str(), object_to_xmlrpc(env, itr->second)); return result;