ソースを参照

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

	Simplified code using lastByteMask
	* src/BitfieldMan.cc
	* src/PieceStatMan.cc
Tatsuhiro Tsujikawa 15 年 前
コミット
8477e463e9
3 ファイル変更28 行追加35 行削除
  1. 6 0
      ChangeLog
  2. 2 6
      src/BitfieldMan.cc
  3. 20 29
      src/PieceStatMan.cc

+ 6 - 0
ChangeLog

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

+ 2 - 6
src/BitfieldMan.cc

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

+ 20 - 29
src/PieceStatMan.cc

@@ -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));