diff options
| author | Tatsuhiro Tsujikawa <tatsuhiro.t@gmail.com> | 2010-02-11 08:22:37 +0000 |
|---|---|---|
| committer | Tatsuhiro Tsujikawa <tatsuhiro.t@gmail.com> | 2010-02-11 08:22:37 +0000 |
| commit | b89e306599c0af3908a2a33c0165caf1f712f371 (patch) | |
| tree | 8911ae39ee045b88a0ebadf3cd2e01b2f76020c5 /src/BitfieldMan.cc | |
| parent | e3e3f0438dc80b696a926dc87b82ed288ef0313b (diff) | |
2010-02-11 Tatsuhiro Tsujikawa <t-tujikawa@users.sourceforge.net>
Removed unused methods from BitfieldMan class. Moved
getFirstMissingIndex to bitfield.h. Updated doc for BitfieldMan
class.
* src/BitfieldMan.cc
* src/BitfieldMan.h
* src/BitfieldManFactory.cc
* src/BitfieldManFactory.h
* src/bitfield.h
* src/main.cc
* test/BitfieldManTest.cc
* test/DefaultPieceStorageTest.cc
Diffstat (limited to 'src/BitfieldMan.cc')
| -rw-r--r-- | src/BitfieldMan.cc | 138 |
1 files changed, 9 insertions, 129 deletions
diff --git a/src/BitfieldMan.cc b/src/BitfieldMan.cc index 2ab00812..a0555e6a 100644 --- a/src/BitfieldMan.cc +++ b/src/BitfieldMan.cc @@ -37,7 +37,6 @@ #include <cassert> #include <cstring> -#include "Randomizer.h" #include "util.h" #include "array_fun.h" #include "bitfield.h" @@ -81,7 +80,6 @@ BitfieldMan::BitfieldMan(const BitfieldMan& bitfieldMan) bitfield(new unsigned char[bitfieldLength]), useBitfield(new unsigned char[bitfieldLength]), filterBitfield(0), - randomizer(bitfieldMan.randomizer), cachedNumMissingBlock(0), cachedNumFilteredBlock(0), cachedCompletedLength(0), @@ -144,51 +142,9 @@ size_t BitfieldMan::getBlockLength(size_t index) const } } -size_t -BitfieldMan::getNthBitIndex(const unsigned char bitfield, size_t nth) const +bool BitfieldMan::hasMissingPiece +(const unsigned char* peerBitfield, size_t length) const { - size_t index = 0; - for(int bs = 7; bs >= 0; --bs) { - unsigned char mask = 1 << bs; - if(bitfield & mask) { - nth--; - if(nth == 0) { - index = 7-bs; - break; - } - } - } - return index; -} - -template<typename Array> -bool BitfieldMan::getMissingIndexRandomly(size_t& index, - const Array& bitfield, - size_t bitfieldLength) const -{ - size_t byte = randomizer->getRandomNumber(bitfieldLength); - for(size_t i = 0; i < bitfieldLength; ++i) { - unsigned char mask; - if(byte == bitfieldLength-1) { - mask = bitfield::lastByteMask(blocks); - } else { - mask = 0xff; - } - unsigned char bits = bitfield[byte]; - - if(bits&mask) { - index = byte*8+getNthBitIndex(bits, 1); - return true; - } - ++byte; - if(byte == bitfieldLength) { - byte = 0; - } - } - return false; -} - -bool BitfieldMan::hasMissingPiece(const unsigned char* peerBitfield, size_t length) const { if(bitfieldLength != length) { return false; } @@ -206,65 +162,15 @@ bool BitfieldMan::hasMissingPiece(const unsigned char* peerBitfield, size_t leng return retval; } -bool BitfieldMan::getMissingIndex(size_t& index, const unsigned char* peerBitfield, size_t length) const { - if(bitfieldLength != length) { - return false; - } - if(filterEnabled) { - return getMissingIndexRandomly - (index, - ~array(bitfield)&array(peerBitfield)&array(filterBitfield), - bitfieldLength); - } else { - return getMissingIndexRandomly - (index, ~array(bitfield)&array(peerBitfield), bitfieldLength); - } -} - -bool BitfieldMan::getMissingUnusedIndex(size_t& index, const unsigned char* peerBitfield, size_t length) const { - if(bitfieldLength != length) { - return false; - } - if(filterEnabled) { - return getMissingIndexRandomly - (index, - ~array(bitfield)&~array(useBitfield)&array(peerBitfield)&array(filterBitfield), - bitfieldLength); - } else { - return getMissingIndexRandomly - (index, - ~array(bitfield)&~array(useBitfield)&array(peerBitfield), - bitfieldLength); - } -} - -template<typename Array> -bool BitfieldMan::getFirstMissingIndex(size_t& index, const Array& bitfield, size_t bitfieldLength) const -{ - for(size_t i = 0; i < bitfieldLength; ++i) { - unsigned char bits = bitfield[i]; - unsigned char mask = 128; - size_t tindex = i*8; - for(size_t bi = 0; bi < 8 && tindex < blocks; ++bi, mask >>= 1, ++tindex) { - if(bits & mask) { - index = tindex; - return true; - } - } - } - return false; -} - bool BitfieldMan::getFirstMissingUnusedIndex(size_t& index) const { if(filterEnabled) { - return getFirstMissingIndex + return bitfield::getFirstMissingIndex (index, ~array(bitfield)&~array(useBitfield)&array(filterBitfield), - bitfieldLength); + blocks); } else { - return getFirstMissingIndex - (index, ~array(bitfield)&~array(useBitfield), - bitfieldLength); + return bitfield::getFirstMissingIndex + (index, ~array(bitfield)&~array(useBitfield), blocks); } } @@ -285,31 +191,10 @@ size_t BitfieldMan::getFirstNMissingUnusedIndex bool BitfieldMan::getFirstMissingIndex(size_t& index) const { if(filterEnabled) { - return getFirstMissingIndex(index, ~array(bitfield)&array(filterBitfield), - bitfieldLength); + return bitfield::getFirstMissingIndex + (index, ~array(bitfield)&array(filterBitfield), blocks); } else { - return getFirstMissingIndex(index, ~array(bitfield), bitfieldLength); - } -} - -bool BitfieldMan::getMissingIndex(size_t& index) const { - if(filterEnabled) { - return getMissingIndexRandomly - (index, ~array(bitfield)&array(filterBitfield), bitfieldLength); - } else { - return getMissingIndexRandomly(index, ~array(bitfield), bitfieldLength); - } -} - -bool BitfieldMan::getMissingUnusedIndex(size_t& index) const -{ - if(filterEnabled) { - return getMissingIndexRandomly - (index, ~array(bitfield)&~array(useBitfield)&array(filterBitfield), - bitfieldLength); - } else { - return getMissingIndexRandomly - (index, ~array(bitfield)&~array(useBitfield), bitfieldLength); + return bitfield::getFirstMissingIndex(index, ~array(bitfield), blocks); } } @@ -797,9 +682,4 @@ uint64_t BitfieldMan::getMissingUnusedLength(size_t startingIndex) const return length; } -void BitfieldMan::setRandomizer(const SharedHandle<Randomizer>& randomizer) -{ - this->randomizer = randomizer; -} - } // namespace aria2 |
