peer_request file_storage::map_file(int file_index, size_type file_offset , int size) const { TORRENT_ASSERT(file_index < num_files()); TORRENT_ASSERT(file_index >= 0); peer_request ret; if (file_index < 0 || file_index >= num_files()) { ret.piece = m_num_pieces; ret.start = 0; ret.length = 0; return ret; } size_type offset = file_offset + this->file_offset(file_index); if (offset >= total_size()) { ret.piece = m_num_pieces; ret.start = 0; ret.length = 0; } else { ret.piece = int(offset / piece_length()); ret.start = int(offset % piece_length()); ret.length = size; if (offset + size > total_size()) ret.length = total_size() - offset; } return ret; }
peer_request file_storage::map_file(int file_index, size_type file_offset , int size) const { TORRENT_ASSERT(file_index < num_files()); TORRENT_ASSERT(file_index >= 0); size_type offset = file_offset + at(file_index).offset; peer_request ret; ret.piece = int(offset / piece_length()); ret.start = int(offset % piece_length()); ret.length = size; return ret; }
int file_storage::piece_size(int index) const { TORRENT_ASSERT(index >= 0 && index < num_pieces()); if (index == num_pieces()-1) { size_type size_except_last = num_pieces() - 1; size_except_last *= size_type(piece_length()); size_type size = total_size() - size_except_last; TORRENT_ASSERT(size > 0); TORRENT_ASSERT(size <= piece_length()); return int(size); } else return piece_length(); }