本文整理汇总了C++中bitfield::resize方法的典型用法代码示例。如果您正苦于以下问题:C++ bitfield::resize方法的具体用法?C++ bitfield::resize怎么用?C++ bitfield::resize使用的例子?那么恭喜您, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类bitfield
的用法示例。
在下文中一共展示了bitfield::resize方法的1个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的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);
}
}
}