diff options
| author | Tatsuhiro Tsujikawa <tatsuhiro.t@gmail.com> | 2009-07-13 15:02:32 +0000 |
|---|---|---|
| committer | Tatsuhiro Tsujikawa <tatsuhiro.t@gmail.com> | 2009-07-13 15:02:32 +0000 |
| commit | 894641dfdbbdf8edd186476245b24f6bba7598ec (patch) | |
| tree | ab84892379313e94141ae1b3eab1e0494df20710 /src/BitfieldMan.cc | |
| parent | 19913203b72d5ec1e047053a264d01d74e1e9d39 (diff) | |
2009-07-13 Tatsuhiro Tsujikawa <t-tujikawa@users.sourceforge.net>
Don't call prepareForRetry(1) if all segments are ignored in
SegmentMan.
* src/AbstractCommand.cc
* src/BitfieldMan.cc
* src/BitfieldMan.h
* src/SegmentMan.cc
* src/SegmentMan.h
Diffstat (limited to 'src/BitfieldMan.cc')
| -rw-r--r-- | src/BitfieldMan.cc | 23 |
1 files changed, 19 insertions, 4 deletions
diff --git a/src/BitfieldMan.cc b/src/BitfieldMan.cc index 7506c4e9..57110ef3 100644 --- a/src/BitfieldMan.cc +++ b/src/BitfieldMan.cc @@ -511,22 +511,37 @@ bool BitfieldMan::isFilteredAllBitSet() const { } } -bool BitfieldMan::isAllBitSet() const { - if(bitfieldLength == 0) { +static bool testAllBitSet +(const unsigned char* bitfield, size_t length, size_t blocks) +{ + if(length == 0) { return true; } - for(size_t i = 0; i < bitfieldLength-1; ++i) { + for(size_t i = 0; i < length-1; ++i) { if(bitfield[i] != 0xff) { return false; } } unsigned char b = ~((128 >> (blocks-1)%8)-1); - if(bitfield[bitfieldLength-1] != b) { + if(bitfield[length-1] != b) { return false; } return true; } +bool BitfieldMan::isAllBitSet() const +{ + return testAllBitSet(bitfield, bitfieldLength, blocks); +} + +bool BitfieldMan::isAllFilterBitSet() const +{ + if(!filterBitfield) { + return false; + } + return testAllBitSet(filterBitfield, bitfieldLength, blocks); +} + bool BitfieldMan::isBitSet(size_t index) const { return bitfield::test(bitfield, blocks, index); |
