summaryrefslogtreecommitdiff
path: root/src/BitfieldMan.cc
diff options
context:
space:
mode:
authorTatsuhiro Tsujikawa <tatsuhiro.t@gmail.com>2008-05-11 01:22:32 +0000
committerTatsuhiro Tsujikawa <tatsuhiro.t@gmail.com>2008-05-11 01:22:32 +0000
commita702d6066648e95928bf4f23487ea4cd6f931f14 (patch)
tree8458bcc3071af63f44e6ea19d8d86a7651ae9159 /src/BitfieldMan.cc
parentf69625775cf17a47954e58115337ae2b80db4d45 (diff)
2008-05-11 Tatsuhiro Tsujikawa <tujikawa at rednoah dot com>
Implemented rarest piece first piece selection strategy. * src/AbstractBtMessage.cc * src/AbstractBtMessage.h * src/BitfieldMan.cc * src/BitfieldMan.h * src/BtBitfieldMessage.cc * src/BtHaveAllMessage.cc * src/BtHaveMessage.cc * src/DefaultPieceStorage.cc * src/DefaultPieceStorage.h * src/PeerInteractionCommand.cc * src/PieceStorage.h * src/UnknownLengthPieceStorage.h
Diffstat (limited to 'src/BitfieldMan.cc')
-rw-r--r--src/BitfieldMan.cc13
1 files changed, 13 insertions, 0 deletions
diff --git a/src/BitfieldMan.cc b/src/BitfieldMan.cc
index 42cc871e..d89deb29 100644
--- a/src/BitfieldMan.cc
+++ b/src/BitfieldMan.cc
@@ -424,6 +424,19 @@ std::deque<size_t> BitfieldMan::getAllMissingIndexes(const unsigned char* peerBi
return getAllMissingIndexes(bf, bitfieldLength);
}
+std::deque<size_t> BitfieldMan::getAllMissingUnusedIndexes(const unsigned char* peerBitfield, size_t peerBitfieldLength) const {
+ if(bitfieldLength != peerBitfieldLength) {
+ return std::deque<size_t>();
+ }
+ array_fun<unsigned char> bf = array_and(array_and(array_negate(bitfield),
+ array_negate(useBitfield)),
+ peerBitfield);
+ if(filterEnabled) {
+ bf = array_and(bf, filterBitfield);
+ }
+ return getAllMissingIndexes(bf, bitfieldLength);
+}
+
size_t BitfieldMan::countMissingBlock() const {
return cachedNumMissingBlock;
}