#include <piece_picker.hpp>
Public Types | |
| enum | { max_blocks_per_piece = 256 } |
Public Member Functions | |
| piece_picker (int blocks_per_piece, int total_num_blocks) | |
| void | set_sequenced_download_threshold (int sequenced_download_threshold) |
| void | files_checked (const std::vector< bool > &pieces, const std::vector< downloading_piece > &unfinished) |
| void | inc_refcount (int index) |
| void | dec_refcount (int index) |
| void | we_have (int index) |
| void | mark_as_unfiltered (int index) |
| void | mark_as_filtered (int index) |
| bool | is_filtered (int index) const |
| void | filtered_pieces (std::vector< bool > &mask) const |
| void | pick_pieces (const std::vector< bool > &pieces, std::vector< piece_block > &interesting_blocks, int num_pieces, bool prefer_whole_pieces, tcp::endpoint peer) const |
| bool | is_downloading (piece_block block) const |
| bool | is_finished (piece_block block) const |
| void | mark_as_downloading (piece_block block, tcp::endpoint const &peer) |
| void | mark_as_finished (piece_block block, tcp::endpoint const &peer) |
| void | restore_piece (int index) |
| void | abort_download (piece_block block) |
| bool | is_piece_finished (int index) const |
| int | blocks_in_piece (int index) const |
| int | unverified_blocks () const |
| void | get_downloaders (std::vector< tcp::endpoint > &d, int index) const |
| std::vector< downloading_piece > const & | get_download_queue () const |
| boost::optional< tcp::endpoint > | get_downloader (piece_block block) const |
| int | num_filtered () const |
| int | num_have_filtered () const |
| void | check_invariant (const torrent *t=0) const |
| int | blocks_in_last_piece () const |
| float | distributed_copies () const |
Private Member Functions | |
| void | add (int index) |
| void | move (bool downloading, bool filtered, int vec_index, int elem_index) |
| void | remove (bool downloading, bool filtered, int vec_index, int elem_index) |
| std::vector< std::vector< int > > & | pick_piece_info_vector (bool downloading, bool filtered) |
| std::vector< std::vector< int > > const & | pick_piece_info_vector (bool downloading, bool filtered) const |
| int | add_interesting_blocks_free (const std::vector< int > &piece_list, const std::vector< bool > &pieces, std::vector< piece_block > &interesting_blocks, int num_blocks, bool prefer_whole_pieces) const |
| int | add_interesting_blocks_partial (const std::vector< int > &piece_list, const std::vector< bool > &pieces, std::vector< piece_block > &interesting_blocks, std::vector< piece_block > &backup_blocks, int num_blocks, bool prefer_whole_pieces, tcp::endpoint peer) const |
Private Attributes | |
| std::vector< std::vector< int > > | m_piece_info |
| std::vector< std::vector< int > > | m_downloading_piece_info |
| std::vector< piece_pos > | m_piece_map |
| std::vector< downloading_piece > | m_downloads |
| int | m_blocks_per_piece |
| int | m_blocks_in_last_piece |
| int | m_num_filtered |
| int | m_num_have_filtered |
| int | m_sequenced_download_threshold |
| bool | m_files_checked_called |
Classes | |
| struct | block_info |
| struct | downloading_piece |
| struct | has_index |
| struct | piece_pos |
Definition at line 85 of file piece_picker.hpp.
| anonymous enum |
| libtorrent::piece_picker::piece_picker | ( | int | blocks_per_piece, | |
| int | total_num_blocks | |||
| ) |
Definition at line 26 of file piece_picker.cpp.
References m_blocks_in_last_piece, m_blocks_per_piece, m_files_checked_called, m_piece_map, max_blocks_per_piece, and libtorrent::piece_picker::piece_pos::we_have_index.
| void libtorrent::piece_picker::set_sequenced_download_threshold | ( | int | sequenced_download_threshold | ) |
Definition at line 126 of file piece_picker.cpp.
References c, libtorrent::piece_picker::piece_pos::downloading, libtorrent::piece_picker::piece_pos::filtered, libtorrent::piece_picker::piece_pos::index, asio::placeholders::iterator, m_piece_info, m_piece_map, m_sequenced_download_threshold, move(), libtorrent::piece_picker::piece_pos::priority(), TORRENT_PIECE_PICKER_INVARIANT_CHECK, and libtorrent::piece_picker::piece_pos::we_have_index.
Referenced by libtorrent::torrent::set_sequenced_download_threshold().
| void libtorrent::piece_picker::files_checked | ( | const std::vector< bool > & | pieces, | |
| const std::vector< downloading_piece > & | unfinished | |||
| ) |
Definition at line 60 of file piece_picker.cpp.
References count, index, is_piece_finished(), m_blocks_per_piece, m_files_checked_called, m_num_filtered, m_num_have_filtered, m_piece_info, m_piece_map, mark_as_finished(), and libtorrent::piece_picker::piece_pos::we_have_index.
Referenced by test_main().
| void libtorrent::piece_picker::inc_refcount | ( | int | index | ) |
Definition at line 567 of file piece_picker.cpp.
References libtorrent::piece_picker::piece_pos::downloading, libtorrent::piece_picker::piece_pos::filtered, index, m_files_checked_called, m_piece_map, m_sequenced_download_threshold, move(), libtorrent::piece_picker::piece_pos::priority(), TORRENT_PIECE_PICKER_INVARIANT_CHECK, and libtorrent::piece_picker::piece_pos::we_have_index.
Referenced by test_main().
| void libtorrent::piece_picker::dec_refcount | ( | int | index | ) |
Definition at line 596 of file piece_picker.cpp.
References libtorrent::piece_picker::piece_pos::downloading, libtorrent::piece_picker::piece_pos::filtered, index, m_files_checked_called, m_piece_map, m_sequenced_download_threshold, move(), libtorrent::piece_picker::piece_pos::priority(), TORRENT_PIECE_PICKER_INVARIANT_CHECK, and libtorrent::piece_picker::piece_pos::we_have_index.
| void libtorrent::piece_picker::we_have | ( | int | index | ) |
Definition at line 623 of file piece_picker.cpp.
References libtorrent::piece_picker::piece_pos::downloading, libtorrent::piece_picker::piece_pos::filtered, libtorrent::piece_picker::piece_pos::index, m_num_filtered, m_num_have_filtered, m_piece_map, m_sequenced_download_threshold, TORRENT_PIECE_PICKER_INVARIANT_CHECK, and libtorrent::piece_picker::piece_pos::we_have_index.
| void libtorrent::piece_picker::mark_as_unfiltered | ( | int | index | ) |
Definition at line 672 of file piece_picker.cpp.
References m_num_filtered, m_num_have_filtered, m_piece_map, TORRENT_PIECE_PICKER_INVARIANT_CHECK, and libtorrent::piece_picker::piece_pos::we_have_index.
Referenced by test_main().
| void libtorrent::piece_picker::mark_as_filtered | ( | int | index | ) |
Definition at line 646 of file piece_picker.cpp.
References m_num_filtered, m_num_have_filtered, m_piece_map, m_sequenced_download_threshold, TORRENT_PIECE_PICKER_INVARIANT_CHECK, and libtorrent::piece_picker::piece_pos::we_have_index.
Referenced by test_main().
| bool libtorrent::piece_picker::is_filtered | ( | int | index | ) | const |
| void libtorrent::piece_picker::filtered_pieces | ( | std::vector< bool > & | mask | ) | const |
Definition at line 702 of file piece_picker.cpp.
References asio::placeholders::iterator, and m_piece_map.
Referenced by test_main().
| void libtorrent::piece_picker::pick_pieces | ( | const std::vector< bool > & | pieces, | |
| std::vector< piece_block > & | interesting_blocks, | |||
| int | num_pieces, | |||
| bool | prefer_whole_pieces, | |||
| tcp::endpoint | peer | |||
| ) | const |
Definition at line 713 of file piece_picker.cpp.
References add_interesting_blocks_free(), add_interesting_blocks_partial(), free, m_downloading_piece_info, m_files_checked_called, m_piece_info, m_piece_map, and TORRENT_PIECE_PICKER_INVARIANT_CHECK.
Referenced by libtorrent::request_a_block(), and test_main().
| bool libtorrent::piece_picker::is_downloading | ( | piece_block | block | ) | const |
Definition at line 950 of file piece_picker.cpp.
References libtorrent::piece_block::block_index, m_downloads, m_piece_map, max_blocks_per_piece, and libtorrent::piece_block::piece_index.
Referenced by libtorrent::request_a_block(), and test_main().
| bool libtorrent::piece_picker::is_finished | ( | piece_block | block | ) | const |
Definition at line 968 of file piece_picker.cpp.
References libtorrent::piece_block::block_index, m_downloads, m_piece_map, max_blocks_per_piece, libtorrent::piece_block::piece_index, and libtorrent::piece_picker::piece_pos::we_have_index.
Referenced by libtorrent::peer_connection::incoming_piece().
| void libtorrent::piece_picker::mark_as_downloading | ( | piece_block | block, | |
| tcp::endpoint const & | peer | |||
| ) |
Definition at line 983 of file piece_picker.cpp.
References libtorrent::piece_block::block_index, blocks_in_piece(), libtorrent::piece_picker::piece_pos::downloading, libtorrent::piece_picker::piece_pos::filtered, libtorrent::piece_picker::piece_pos::index, asio::placeholders::iterator, m_downloads, m_piece_map, m_sequenced_download_threshold, move(), libtorrent::piece_block::piece_index, libtorrent::piece_picker::piece_pos::priority(), and TORRENT_PIECE_PICKER_INVARIANT_CHECK.
Referenced by test_main().
| void libtorrent::piece_picker::mark_as_finished | ( | piece_block | block, | |
| tcp::endpoint const & | peer | |||
| ) |
Definition at line 1015 of file piece_picker.cpp.
References libtorrent::piece_block::block_index, blocks_in_piece(), libtorrent::piece_picker::piece_pos::downloading, libtorrent::piece_picker::piece_pos::filtered, libtorrent::piece_picker::piece_pos::index, asio::placeholders::iterator, m_downloads, m_piece_map, m_sequenced_download_threshold, move(), libtorrent::piece_block::piece_index, libtorrent::piece_picker::piece_pos::priority(), TORRENT_PIECE_PICKER_INVARIANT_CHECK, and libtorrent::piece_picker::piece_pos::we_have_index.
Referenced by files_checked(), libtorrent::peer_connection::incoming_piece(), and test_main().
| void libtorrent::piece_picker::restore_piece | ( | int | index | ) |
Definition at line 544 of file piece_picker.cpp.
References libtorrent::piece_picker::piece_pos::filtered, libtorrent::piece_picker::piece_pos::index, asio::placeholders::iterator, m_downloads, m_files_checked_called, m_piece_map, m_sequenced_download_threshold, move(), libtorrent::piece_picker::piece_pos::priority(), and TORRENT_PIECE_PICKER_INVARIANT_CHECK.
| void libtorrent::piece_picker::abort_download | ( | piece_block | block | ) |
Definition at line 1084 of file piece_picker.cpp.
References libtorrent::piece_block::block_index, blocks_in_piece(), libtorrent::piece_picker::piece_pos::filtered, libtorrent::piece_picker::piece_pos::index, asio::placeholders::iterator, m_downloads, m_piece_map, m_sequenced_download_threshold, move(), libtorrent::piece_block::piece_index, libtorrent::piece_picker::piece_pos::priority(), and TORRENT_PIECE_PICKER_INVARIANT_CHECK.
Referenced by libtorrent::peer_connection::disconnect(), libtorrent::peer_connection::incoming_choke(), libtorrent::peer_connection::incoming_piece(), and libtorrent::peer_connection::second_tick().
| bool libtorrent::piece_picker::is_piece_finished | ( | int | index | ) | const |
Definition at line 928 of file piece_picker.cpp.
References blocks_in_piece(), m_blocks_per_piece, m_downloads, and m_piece_map.
Referenced by files_checked(), and libtorrent::peer_connection::incoming_piece().
| int libtorrent::piece_picker::blocks_in_piece | ( | int | index | ) | const [inline] |
Definition at line 345 of file piece_picker.hpp.
References m_blocks_in_last_piece, m_blocks_per_piece, and m_piece_map.
Referenced by abort_download(), add_interesting_blocks_free(), add_interesting_blocks_partial(), libtorrent::torrent_handle::get_download_queue(), get_downloaders(), is_piece_finished(), mark_as_downloading(), and mark_as_finished().
| int libtorrent::piece_picker::unverified_blocks | ( | ) | const |
| void libtorrent::piece_picker::get_downloaders | ( | std::vector< tcp::endpoint > & | d, | |
| int | index | |||
| ) | const |
Definition at line 1050 of file piece_picker.cpp.
References blocks_in_piece(), m_downloads, and m_piece_map.
| std::vector<downloading_piece> const& libtorrent::piece_picker::get_download_queue | ( | ) | const [inline] |
Definition at line 202 of file piece_picker.hpp.
Referenced by libtorrent::torrent_handle::get_download_queue(), test_main(), and libtorrent::torrent_handle::write_resume_data().
| boost::optional< tcp::endpoint > libtorrent::piece_picker::get_downloader | ( | piece_block | block | ) | const |
Definition at line 1064 of file piece_picker.cpp.
References libtorrent::piece_block::block_index, m_downloads, max_blocks_per_piece, and libtorrent::piece_block::piece_index.
| int libtorrent::piece_picker::num_filtered | ( | ) | const [inline] |
Definition at line 208 of file piece_picker.hpp.
Referenced by check_invariant(), libtorrent::peer_connection::incoming_piece(), and test_main().
| int libtorrent::piece_picker::num_have_filtered | ( | ) | const [inline] |
| void libtorrent::piece_picker::check_invariant | ( | const torrent * | t = 0 |
) | const |
Definition at line 187 of file piece_picker.cpp.
References libtorrent::torrent::begin(), libtorrent::torrent::end(), libtorrent::torrent::have_piece(), index, m_downloading_piece_info, m_downloads, m_num_filtered, m_num_have_filtered, m_piece_info, m_piece_map, m_sequenced_download_threshold, num_filtered(), num_have_filtered(), libtorrent::torrent_info::num_pieces(), pick_piece_info_vector(), libtorrent::torrent::torrent_file(), and libtorrent::piece_picker::piece_pos::we_have_index.
| int libtorrent::piece_picker::blocks_in_last_piece | ( | ) | const [inline] |
Definition at line 226 of file piece_picker.hpp.
| float libtorrent::piece_picker::distributed_copies | ( | ) | const |
| void libtorrent::piece_picker::add | ( | int | index | ) | [private] |
Definition at line 314 of file piece_picker.cpp.
References asio::placeholders::iterator, m_piece_map, m_sequenced_download_threshold, and pick_piece_info_vector().
| void libtorrent::piece_picker::move | ( | bool | downloading, | |
| bool | filtered, | |||
| int | vec_index, | |||
| int | elem_index | |||
| ) | [private] |
Definition at line 374 of file piece_picker.cpp.
References libtorrent::piece_picker::piece_pos::downloading, libtorrent::piece_picker::piece_pos::filtered, libtorrent::piece_picker::piece_pos::index, index, asio::placeholders::iterator, m_files_checked_called, m_piece_map, m_sequenced_download_threshold, libtorrent::piece_picker::piece_pos::ordered(), pick_piece_info_vector(), libtorrent::piece_picker::piece_pos::priority(), and libtorrent::piece_picker::piece_pos::we_have_index.
Referenced by abort_download(), dec_refcount(), inc_refcount(), mark_as_downloading(), mark_as_finished(), restore_piece(), and set_sequenced_download_threshold().
| void libtorrent::piece_picker::remove | ( | bool | downloading, | |
| bool | filtered, | |||
| int | vec_index, | |||
| int | elem_index | |||
| ) | [private] |
Definition at line 492 of file piece_picker.cpp.
References libtorrent::piece_picker::piece_pos::downloading, index, asio::placeholders::iterator, m_downloads, m_files_checked_called, m_piece_map, m_sequenced_download_threshold, libtorrent::piece_picker::piece_pos::ordered(), and pick_piece_info_vector().
| std::vector< std::vector< int > > & libtorrent::piece_picker::pick_piece_info_vector | ( | bool | downloading, | |
| bool | filtered | |||
| ) | [private] |
Definition at line 300 of file piece_picker.cpp.
References m_downloading_piece_info, and m_piece_info.
Referenced by add(), check_invariant(), move(), and remove().
| std::vector< std::vector< int > > const & libtorrent::piece_picker::pick_piece_info_vector | ( | bool | downloading, | |
| bool | filtered | |||
| ) | const [private] |
Definition at line 307 of file piece_picker.cpp.
References m_downloading_piece_info, and m_piece_info.
| int libtorrent::piece_picker::add_interesting_blocks_free | ( | const std::vector< int > & | piece_list, | |
| const std::vector< bool > & | pieces, | |||
| std::vector< piece_block > & | interesting_blocks, | |||
| int | num_blocks, | |||
| bool | prefer_whole_pieces | |||
| ) | const [private] |
Definition at line 817 of file piece_picker.cpp.
References blocks_in_piece(), and m_piece_map.
Referenced by pick_pieces().
| int libtorrent::piece_picker::add_interesting_blocks_partial | ( | const std::vector< int > & | piece_list, | |
| const std::vector< bool > & | pieces, | |||
| std::vector< piece_block > & | interesting_blocks, | |||
| std::vector< piece_block > & | backup_blocks, | |||
| int | num_blocks, | |||
| bool | prefer_whole_pieces, | |||
| tcp::endpoint | peer | |||
| ) | const [private] |
Definition at line 847 of file piece_picker.cpp.
References blocks_in_piece(), libtorrent::exclusively_requested_from(), m_downloads, and m_piece_map.
Referenced by pick_pieces().
std::vector<std::vector<int> > libtorrent::piece_picker::m_piece_info [private] |
Definition at line 303 of file piece_picker.hpp.
Referenced by check_invariant(), distributed_copies(), files_checked(), pick_piece_info_vector(), pick_pieces(), and set_sequenced_download_threshold().
std::vector<std::vector<int> > libtorrent::piece_picker::m_downloading_piece_info [private] |
Definition at line 309 of file piece_picker.hpp.
Referenced by check_invariant(), pick_piece_info_vector(), and pick_pieces().
std::vector<piece_pos> libtorrent::piece_picker::m_piece_map [private] |
Definition at line 317 of file piece_picker.hpp.
Referenced by abort_download(), add(), add_interesting_blocks_free(), add_interesting_blocks_partial(), blocks_in_piece(), check_invariant(), dec_refcount(), distributed_copies(), files_checked(), filtered_pieces(), get_downloaders(), inc_refcount(), is_downloading(), is_filtered(), is_finished(), is_piece_finished(), mark_as_downloading(), mark_as_filtered(), mark_as_finished(), mark_as_unfiltered(), move(), pick_pieces(), piece_picker(), remove(), restore_piece(), set_sequenced_download_threshold(), and we_have().
std::vector<downloading_piece> libtorrent::piece_picker::m_downloads [private] |
Definition at line 323 of file piece_picker.hpp.
Referenced by abort_download(), add_interesting_blocks_partial(), check_invariant(), get_downloader(), get_downloaders(), is_downloading(), is_finished(), is_piece_finished(), mark_as_downloading(), mark_as_finished(), remove(), restore_piece(), and unverified_blocks().
int libtorrent::piece_picker::m_blocks_per_piece [private] |
Definition at line 325 of file piece_picker.hpp.
Referenced by blocks_in_piece(), files_checked(), is_piece_finished(), and piece_picker().
int libtorrent::piece_picker::m_blocks_in_last_piece [private] |
Definition at line 326 of file piece_picker.hpp.
Referenced by blocks_in_piece(), and piece_picker().
int libtorrent::piece_picker::m_num_filtered [private] |
Definition at line 332 of file piece_picker.hpp.
Referenced by check_invariant(), files_checked(), mark_as_filtered(), mark_as_unfiltered(), and we_have().
int libtorrent::piece_picker::m_num_have_filtered [private] |
Definition at line 335 of file piece_picker.hpp.
Referenced by check_invariant(), files_checked(), mark_as_filtered(), mark_as_unfiltered(), and we_have().
int libtorrent::piece_picker::m_sequenced_download_threshold [private] |
Definition at line 339 of file piece_picker.hpp.
Referenced by abort_download(), add(), check_invariant(), dec_refcount(), inc_refcount(), mark_as_downloading(), mark_as_filtered(), mark_as_finished(), move(), remove(), restore_piece(), set_sequenced_download_threshold(), and we_have().
Definition at line 341 of file piece_picker.hpp.
Referenced by dec_refcount(), files_checked(), inc_refcount(), move(), pick_pieces(), piece_picker(), remove(), and restore_piece().
1.5.6