本文整理汇总了C++中bitfield类的典型用法代码示例。如果您正苦于以下问题:C++ bitfield类的具体用法?C++ bitfield怎么用?C++ bitfield使用的例子?那么恭喜您, 这里精选的类代码示例或许可以为您提供帮助。
在下文中一共展示了bitfield类的9个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于我们的系统推荐出更棒的C++代码示例。
示例1: range_to_bitfield
///按指定大小输出为位图块.
// @param bitfield以int为单位的位图数组, 每个元素表示1个piece, 为0表示空, 为1表示满.
// @param piece_size指定的piece大小.
inline void range_to_bitfield(bitfield& bf, int piece_size)
{
// 先整理连续的空间, 将连续的区间合并为一个区间.
if (m_need_merge)
merge();
#ifndef AVHTTP_DISABLE_THREAD
boost::mutex::scoped_lock lock(*m_mutex);
#endif
// 计算出分片总数.
int piece_num = (m_size / piece_size) + (m_size % piece_size == 0 ? 0 : 1);
// 分配位图空间, 默认为0.
bf.resize(piece_num, 0);
boost::int64_t l = 0;
boost::int64_t r = 0;
range_map::iterator it = m_ranges.begin();
range_map::iterator end = m_ranges.end();
// 从0位置开始, 每次检查piece_size大小的空间是否数据完整, 数据
// 完整则设置到位图为1, 表示有数据.
for (int i = 0; i < piece_num; i++)
{
l = i * piece_size;
r = (i + 1) * piece_size;
r = r > m_size ? m_size : r;
bool is_complete = false;
if (it != end)
{
// 在已经下载的区间中.
if (l >= it->first && r <= it->second)
{
is_complete = true;
}
else
{
// 除非右边界大于等于当前区间的右边界, 否则一直使用当前区间判断.
// 这样就避免了每次从头循环遍历.
if (r >= it->second)
{
if (++it != end)
{
if (l >= it->first && r <= it->second)
{
is_complete = true;
}
}
}
}
}
if (is_complete)
{
bf.set_bit(i);
}
}
}
开发者ID:ACEZLY,项目名称:GreenLeaf,代码行数:63,代码来源:rangefield.hpp
示例2: print_bitfield
void print_bitfield(bitfield const& b)
{
std::string out;
for (int i = 0; i < b.size(); ++i)
{
out += b.get_bit(i) ? "1" : "0";
}
std::printf("%s\n", out.c_str());
}
开发者ID:Athorcis,项目名称:libtorrent,代码行数:9,代码来源:test_bitfield.cpp
示例3: bitfield_to_range
///按指定的分片大小bitfield更新rangefield.
// @param bf为指定的bitfield.
// @param piece_size是指定的分片大小.
inline void bitfield_to_range(const bitfield& bf, int piece_size)
{
#ifndef AVHTTP_DISABLE_THREAD
boost::mutex::scoped_lock lock(*m_mutex);
#endif
m_ranges.clear();
boost::int64_t left = 0;
boost::int64_t right = 0;
bool left_record = false;
int index = 0;
for (bitfield::const_iterator i = bf.begin(); i != bf.end(); i++, index++)
{
BOOST_ASSERT(index * piece_size < m_size);
if (*i && !left_record)
{
left = index * piece_size;
right = left + piece_size;
left_record = true;
continue;
}
if (*i && left_record)
{
right += piece_size;
}
if (left_record && !(*i))
{
// 得到区间.
right = (std::min)(right, m_size);
m_ranges[left] = right;
left_record = false;
}
}
if (left_record)
{
right = (std::min)(right, m_size);
m_ranges[left] = right;
left_record = false;
}
m_need_merge = true;
}
开发者ID:ACEZLY,项目名称:GreenLeaf,代码行数:51,代码来源:rangefield.hpp
示例4: peer_lost
void peer_lost(bitfield const& bits, peer_connection const* peer)
{
if (has_picker())
{
if (bits.all_set() && bits.size() > 0)
m_picker->dec_refcount_all(peer);
else
m_picker->dec_refcount(bits, peer);
}
#ifdef TORRENT_DEBUG
else
{
TORRENT_ASSERT(is_seed());
}
#endif
}
开发者ID:pdpdds,项目名称:avplayer,代码行数:16,代码来源:torrent.hpp
示例5: downloading_pieces
void QTorrentHandle::downloading_pieces(bitfield &bf) const {
std::vector<partial_piece_info> queue;
torrent_handle::get_download_queue(queue);
for (std::vector<partial_piece_info>::const_iterator it=queue.begin(); it!= queue.end(); it++) {
bf.set_bit(it->piece_index);
}
return;
}
开发者ID:,项目名称:,代码行数:8,代码来源:
示例6: print_bitfield
void print_bitfield(bitfield const& b)
{
std::string out;
out.reserve(b.size());
for (bool bit : b)
out += bit ? '1' : '0';
std::printf("%s\n", out.c_str());
}
开发者ID:chrdwhdhxtszpzclljxk,项目名称:libtorrent,代码行数:8,代码来源:test_bitfield.cpp
示例7: peer_lost
void peer_lost(bitfield const& bits)
{
if (has_picker())
{
if (bits.all_set())
m_picker->dec_refcount_all();
else
m_picker->dec_refcount(bits);
}
#ifdef TORRENT_DEBUG
else
{
TORRENT_ASSERT(is_seed());
}
#endif
}
开发者ID:chenhbzl,项目名称:avplayer,代码行数:16,代码来源:torrent.hpp
示例8: test_iterators
void test_iterators(bitfield& test1)
{
test1.set_all();
int num = 0;
std::printf("expecting %d ones\n", test1.size());
for (bitfield::const_iterator i = test1.begin(); i != test1.end(); ++i)
{
std::printf("%d", *i);
TEST_EQUAL(*i, true);
num += *i;
}
std::printf("\n");
TEST_EQUAL(num, test1.size());
TEST_EQUAL(num, test1.count());
}
开发者ID:chrdwhdhxtszpzclljxk,项目名称:libtorrent,代码行数:16,代码来源:test_bitfield.cpp
示例9: bitfield
bitfield(bitfield const& rhs) { assign(rhs.data(), rhs.size()); }
开发者ID:,项目名称:,代码行数:1,代码来源:
注:本文中的bitfield类示例由纯净天空整理自Github/MSDocs等源码及文档管理平台,相关代码片段筛选自各路编程大神贡献的开源项目,源码版权归原作者所有,传播和使用请参考对应项目的License;未经允许,请勿转载。 |
请发表评论