summaryrefslogtreecommitdiff
path: root/src/BitfieldMan.cc
diff options
context:
space:
mode:
authorTatsuhiro Tsujikawa <tatsuhiro.t@gmail.com>2010-02-11 07:24:06 +0000
committerTatsuhiro Tsujikawa <tatsuhiro.t@gmail.com>2010-02-11 07:24:06 +0000
commite3e3f0438dc80b696a926dc87b82ed288ef0313b (patch)
treea2e2ae2d3be48e2bf052394fe0c0f8818675713a /src/BitfieldMan.cc
parentaa1139bb6792fbc8150ebb22bc3eba8157b9e039 (diff)
2010-02-11 Tatsuhiro Tsujikawa <t-tujikawa@users.sourceforge.net>
Moved getFirstNMissingIndex to bitfield.h and made it return the number of appended indexes. * src/BitfieldMan.cc * src/BitfieldMan.h * src/Piece.cc * src/Piece.h * src/bitfield.h * test/BitfieldManTest.cc
Diffstat (limited to 'src/BitfieldMan.cc')
-rw-r--r--src/BitfieldMan.cc37
1 files changed, 5 insertions, 32 deletions
diff --git a/src/BitfieldMan.cc b/src/BitfieldMan.cc
index a11dcee8..2ab00812 100644
--- a/src/BitfieldMan.cc
+++ b/src/BitfieldMan.cc
@@ -268,44 +268,17 @@ bool BitfieldMan::getFirstMissingUnusedIndex(size_t& index) const
}
}
-template<typename Array, typename OutputIterator>
-static bool getFirstNMissingIndex
-(OutputIterator out, size_t n,
- const Array& bitfield, size_t bitfieldLength, size_t blocks)
-{
- if(n == 0) {
- return false;
- }
- const size_t origN = n;
- 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) {
- *out++ = tindex;
- if(--n == 0) {
- return true;
- }
- }
- }
- }
- return origN > n;
-}
-
-bool BitfieldMan::getFirstNMissingUnusedIndex
+size_t BitfieldMan::getFirstNMissingUnusedIndex
(std::vector<size_t>& out, size_t n) const
{
if(filterEnabled) {
- return getFirstNMissingIndex
+ return bitfield::getFirstNMissingIndex
(std::back_inserter(out), n,
- ~array(bitfield)&~array(useBitfield)&array(filterBitfield),
- bitfieldLength, blocks);
+ ~array(bitfield)&~array(useBitfield)&array(filterBitfield), blocks);
} else {
- return getFirstNMissingIndex
+ return bitfield::getFirstNMissingIndex
(std::back_inserter(out), n,
- ~array(bitfield)&~array(useBitfield),
- bitfieldLength, blocks);
+ ~array(bitfield)&~array(useBitfield), blocks);
}
}