added custom resize methods to aux::vector (#1514)

added custom resize methods to aux::vector, code refactor
This commit is contained in:
Alden Torres 2017-01-12 18:40:59 -05:00 committed by Arvid Norberg
parent 3d06371f31
commit 7ac2805c2c
2 changed files with 37 additions and 5 deletions

View File

@ -34,6 +34,7 @@ POSSIBILITY OF SUCH DAMAGE.
#define TORRENT_VECTOR_HPP
#include <vector>
#include <type_traits>
#include "libtorrent/units.hpp"
#include "libtorrent/assert.hpp"
@ -70,7 +71,38 @@ namespace libtorrent { namespace aux {
}
IndexType end_index() const
{ return IndexType(static_cast<underlying_index>(this->size())); }
{
TORRENT_ASSERT(this->size() <= std::size_t(std::numeric_limits<underlying_index>::max()));
return IndexType(static_cast<underlying_index>(this->size()));
}
template <typename U = underlying_index, typename Cond
= typename std::enable_if<std::is_signed<U>::value>::type>
void resize(underlying_index s)
{
TORRENT_ASSERT(s >= 0);
this->base::resize(std::size_t(s));
}
template <typename U = underlying_index, typename Cond
= typename std::enable_if<std::is_signed<U>::value>::type>
void resize(underlying_index s, T const& v)
{
TORRENT_ASSERT(s >= 0);
this->base::resize(std::size_t(s), v);
}
void resize(std::size_t s)
{
TORRENT_ASSERT(s <= std::size_t(std::numeric_limits<underlying_index>::max()));
this->base::resize(s);
}
void resize(std::size_t s, T const& v)
{
TORRENT_ASSERT(s <= std::size_t(std::numeric_limits<underlying_index>::max()));
this->base::resize(s, v);
}
};
template <typename Iter>

View File

@ -363,7 +363,7 @@ namespace libtorrent
m_files.set_num_pieces(static_cast<int>(
(m_files.total_size() + m_files.piece_length() - 1) / m_files.piece_length()));
m_piece_hash.resize(std::size_t(m_files.num_pieces()));
m_piece_hash.resize(m_files.num_pieces());
}
create_torrent::create_torrent(torrent_info const& ti)
@ -399,7 +399,7 @@ namespace libtorrent
add_http_seed(s.url);
}
m_piece_hash.resize(std::size_t(m_files.num_pieces()));
m_piece_hash.resize(m_files.num_pieces());
for (piece_index_t i(0); i != m_files.end_piece(); ++i)
set_hash(i, ti.hash_for_piece(i));
@ -614,7 +614,7 @@ namespace libtorrent
int const num_leafs = merkle_num_leafs(m_files.num_pieces());
int const num_nodes = merkle_num_nodes(num_leafs);
int const first_leaf = num_nodes - num_leafs;
m_merkle_tree.resize(std::size_t(num_nodes));
m_merkle_tree.resize(num_nodes);
int const num_pieces = int(m_piece_hash.size());
for (int i = 0; i < num_pieces; ++i)
m_merkle_tree[first_leaf + i] = m_piece_hash[piece_index_t(i)];
@ -695,7 +695,7 @@ namespace libtorrent
{
TORRENT_ASSERT(index >= file_index_t(0));
TORRENT_ASSERT(index < m_files.end_file());
if (m_filehashes.empty()) m_filehashes.resize(std::size_t(m_files.num_files()));
if (m_filehashes.empty()) m_filehashes.resize(m_files.num_files());
m_filehashes[index] = h;
}