mirror of https://github.com/aria2/aria2
2010-03-24 Tatsuhiro Tsujikawa <t-tujikawa@users.sourceforge.net>
Simplified code using lastByteMask * src/BitfieldMan.cc * src/PieceStatMan.ccpull/1/head
parent
6301084ea8
commit
8477e463e9
|
@ -1,3 +1,9 @@
|
||||||
|
2010-03-24 Tatsuhiro Tsujikawa <t-tujikawa@users.sourceforge.net>
|
||||||
|
|
||||||
|
Simplified code using lastByteMask
|
||||||
|
* src/BitfieldMan.cc
|
||||||
|
* src/PieceStatMan.cc
|
||||||
|
|
||||||
2010-03-24 Tatsuhiro Tsujikawa <t-tujikawa@users.sourceforge.net>
|
2010-03-24 Tatsuhiro Tsujikawa <t-tujikawa@users.sourceforge.net>
|
||||||
|
|
||||||
Rewritten lastByteMask
|
Rewritten lastByteMask
|
||||||
|
|
|
@ -368,7 +368,7 @@ size_t BitfieldMan::countFilteredBlockNow() const {
|
||||||
|
|
||||||
bool BitfieldMan::setBitInternal(unsigned char* bitfield, size_t index, bool on) {
|
bool BitfieldMan::setBitInternal(unsigned char* bitfield, size_t index, bool on) {
|
||||||
if(blocks <= index) { return false; }
|
if(blocks <= index) { return false; }
|
||||||
unsigned char mask = 128 >> index%8;
|
unsigned char mask = 128 >> (index%8);
|
||||||
if(on) {
|
if(on) {
|
||||||
bitfield[index/8] |= mask;
|
bitfield[index/8] |= mask;
|
||||||
} else {
|
} else {
|
||||||
|
@ -421,11 +421,7 @@ static bool testAllBitSet
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
unsigned char b = ~((128 >> (blocks-1)%8)-1);
|
return bitfield[length-1] == bitfield::lastByteMask(blocks);
|
||||||
if(bitfield[length-1] != b) {
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
return true;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
bool BitfieldMan::isAllBitSet() const
|
bool BitfieldMan::isAllBitSet() const
|
||||||
|
|
|
@ -37,6 +37,7 @@
|
||||||
#include <algorithm>
|
#include <algorithm>
|
||||||
|
|
||||||
#include "SimpleRandomizer.h"
|
#include "SimpleRandomizer.h"
|
||||||
|
#include "bitfield.h"
|
||||||
|
|
||||||
namespace aria2 {
|
namespace aria2 {
|
||||||
|
|
||||||
|
@ -106,16 +107,12 @@ public:
|
||||||
void PieceStatMan::addPieceStats(const unsigned char* bitfield,
|
void PieceStatMan::addPieceStats(const unsigned char* bitfield,
|
||||||
size_t bitfieldLength)
|
size_t bitfieldLength)
|
||||||
{
|
{
|
||||||
size_t index = 0;
|
const size_t nbits = _pieceStats.size();
|
||||||
for(size_t bi = 0; bi < bitfieldLength; ++bi) {
|
assert(nbits <= bitfieldLength*8);
|
||||||
|
for(size_t i = 0; i < nbits; ++i) {
|
||||||
for(size_t i = 0; i < 8; ++i, ++index) {
|
if(bitfield::test(bitfield, nbits, i)) {
|
||||||
unsigned char mask = 128 >> i;
|
_pieceStats[i]->addCount();
|
||||||
if(bitfield[bi]&mask) {
|
|
||||||
_pieceStats[index]->addCount();
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
std::sort(_sortedPieceStatIndexes.begin(), _sortedPieceStatIndexes.end(),
|
std::sort(_sortedPieceStatIndexes.begin(), _sortedPieceStatIndexes.end(),
|
||||||
PieceStatRarer(_pieceStats));
|
PieceStatRarer(_pieceStats));
|
||||||
|
@ -124,16 +121,12 @@ void PieceStatMan::addPieceStats(const unsigned char* bitfield,
|
||||||
void PieceStatMan::subtractPieceStats(const unsigned char* bitfield,
|
void PieceStatMan::subtractPieceStats(const unsigned char* bitfield,
|
||||||
size_t bitfieldLength)
|
size_t bitfieldLength)
|
||||||
{
|
{
|
||||||
size_t index = 0;
|
const size_t nbits = _pieceStats.size();
|
||||||
for(size_t bi = 0; bi < bitfieldLength; ++bi) {
|
assert(nbits <= bitfieldLength*8);
|
||||||
|
for(size_t i = 0; i < nbits; ++i) {
|
||||||
for(size_t i = 0; i < 8; ++i, ++index) {
|
if(bitfield::test(bitfield, nbits, i)) {
|
||||||
unsigned char mask = 128 >> i;
|
_pieceStats[i]->subCount();
|
||||||
if(bitfield[bi]&mask) {
|
|
||||||
_pieceStats[index]->subCount();
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
std::sort(_sortedPieceStatIndexes.begin(), _sortedPieceStatIndexes.end(),
|
std::sort(_sortedPieceStatIndexes.begin(), _sortedPieceStatIndexes.end(),
|
||||||
PieceStatRarer(_pieceStats));
|
PieceStatRarer(_pieceStats));
|
||||||
|
@ -143,18 +136,16 @@ void PieceStatMan::updatePieceStats(const unsigned char* newBitfield,
|
||||||
size_t newBitfieldLength,
|
size_t newBitfieldLength,
|
||||||
const unsigned char* oldBitfield)
|
const unsigned char* oldBitfield)
|
||||||
{
|
{
|
||||||
size_t index = 0;
|
const size_t nbits = _pieceStats.size();
|
||||||
for(size_t bi = 0; bi < newBitfieldLength; ++bi) {
|
assert(nbits <= newBitfieldLength*8);
|
||||||
|
for(size_t i = 0; i < nbits; ++i) {
|
||||||
for(size_t i = 0; i < 8; ++i, ++index) {
|
if(bitfield::test(newBitfield, nbits, i) &&
|
||||||
unsigned char mask = 128 >> i;
|
!bitfield::test(oldBitfield, nbits, i)) {
|
||||||
if((newBitfield[bi]&mask) && !(oldBitfield[bi]&mask)) {
|
_pieceStats[i]->addCount();
|
||||||
_pieceStats[index]->addCount();
|
} else if(!bitfield::test(newBitfield, nbits, i) &&
|
||||||
} else if(!(newBitfield[bi]&mask) && (oldBitfield[bi]&mask)) {
|
bitfield::test(oldBitfield, nbits, i)) {
|
||||||
_pieceStats[index]->subCount();
|
_pieceStats[i]->subCount();
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
std::sort(_sortedPieceStatIndexes.begin(), _sortedPieceStatIndexes.end(),
|
std::sort(_sortedPieceStatIndexes.begin(), _sortedPieceStatIndexes.end(),
|
||||||
PieceStatRarer(_pieceStats));
|
PieceStatRarer(_pieceStats));
|
||||||
|
|
Loading…
Reference in New Issue