2010-03-24 Tatsuhiro Tsujikawa <t-tujikawa@users.sourceforge.net>

Simplified code using lastByteMask
	* src/BitfieldMan.cc
	* src/PieceStatMan.cc
pull/1/head
Tatsuhiro Tsujikawa 2010-03-24 14:25:18 +00:00
parent 6301084ea8
commit 8477e463e9
3 changed files with 28 additions and 35 deletions

View File

@ -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>
Rewritten lastByteMask

View File

@ -368,7 +368,7 @@ size_t BitfieldMan::countFilteredBlockNow() const {
bool BitfieldMan::setBitInternal(unsigned char* bitfield, size_t index, bool on) {
if(blocks <= index) { return false; }
unsigned char mask = 128 >> index%8;
unsigned char mask = 128 >> (index%8);
if(on) {
bitfield[index/8] |= mask;
} else {
@ -421,11 +421,7 @@ static bool testAllBitSet
return false;
}
}
unsigned char b = ~((128 >> (blocks-1)%8)-1);
if(bitfield[length-1] != b) {
return false;
}
return true;
return bitfield[length-1] == bitfield::lastByteMask(blocks);
}
bool BitfieldMan::isAllBitSet() const

View File

@ -37,6 +37,7 @@
#include <algorithm>
#include "SimpleRandomizer.h"
#include "bitfield.h"
namespace aria2 {
@ -106,16 +107,12 @@ public:
void PieceStatMan::addPieceStats(const unsigned char* bitfield,
size_t bitfieldLength)
{
size_t index = 0;
for(size_t bi = 0; bi < bitfieldLength; ++bi) {
for(size_t i = 0; i < 8; ++i, ++index) {
unsigned char mask = 128 >> i;
if(bitfield[bi]&mask) {
_pieceStats[index]->addCount();
}
const size_t nbits = _pieceStats.size();
assert(nbits <= bitfieldLength*8);
for(size_t i = 0; i < nbits; ++i) {
if(bitfield::test(bitfield, nbits, i)) {
_pieceStats[i]->addCount();
}
}
std::sort(_sortedPieceStatIndexes.begin(), _sortedPieceStatIndexes.end(),
PieceStatRarer(_pieceStats));
@ -124,16 +121,12 @@ void PieceStatMan::addPieceStats(const unsigned char* bitfield,
void PieceStatMan::subtractPieceStats(const unsigned char* bitfield,
size_t bitfieldLength)
{
size_t index = 0;
for(size_t bi = 0; bi < bitfieldLength; ++bi) {
for(size_t i = 0; i < 8; ++i, ++index) {
unsigned char mask = 128 >> i;
if(bitfield[bi]&mask) {
_pieceStats[index]->subCount();
}
const size_t nbits = _pieceStats.size();
assert(nbits <= bitfieldLength*8);
for(size_t i = 0; i < nbits; ++i) {
if(bitfield::test(bitfield, nbits, i)) {
_pieceStats[i]->subCount();
}
}
std::sort(_sortedPieceStatIndexes.begin(), _sortedPieceStatIndexes.end(),
PieceStatRarer(_pieceStats));
@ -143,18 +136,16 @@ void PieceStatMan::updatePieceStats(const unsigned char* newBitfield,
size_t newBitfieldLength,
const unsigned char* oldBitfield)
{
size_t index = 0;
for(size_t bi = 0; bi < newBitfieldLength; ++bi) {
for(size_t i = 0; i < 8; ++i, ++index) {
unsigned char mask = 128 >> i;
if((newBitfield[bi]&mask) && !(oldBitfield[bi]&mask)) {
_pieceStats[index]->addCount();
} else if(!(newBitfield[bi]&mask) && (oldBitfield[bi]&mask)) {
_pieceStats[index]->subCount();
}
const size_t nbits = _pieceStats.size();
assert(nbits <= newBitfieldLength*8);
for(size_t i = 0; i < nbits; ++i) {
if(bitfield::test(newBitfield, nbits, i) &&
!bitfield::test(oldBitfield, nbits, i)) {
_pieceStats[i]->addCount();
} else if(!bitfield::test(newBitfield, nbits, i) &&
bitfield::test(oldBitfield, nbits, i)) {
_pieceStats[i]->subCount();
}
}
std::sort(_sortedPieceStatIndexes.begin(), _sortedPieceStatIndexes.end(),
PieceStatRarer(_pieceStats));