summaryrefslogtreecommitdiff
path: root/src/BitfieldMan.cc
diff options
context:
space:
mode:
authorTatsuhiro Tsujikawa <tatsuhiro.t@gmail.com>2009-07-13 15:02:32 +0000
committerTatsuhiro Tsujikawa <tatsuhiro.t@gmail.com>2009-07-13 15:02:32 +0000
commit894641dfdbbdf8edd186476245b24f6bba7598ec (patch)
treeab84892379313e94141ae1b3eab1e0494df20710 /src/BitfieldMan.cc
parent19913203b72d5ec1e047053a264d01d74e1e9d39 (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.cc23
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);