diff --git a/ChangeLog b/ChangeLog index 538d15fb..7f58aad2 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,9 @@ +2009-07-11 Tatsuhiro Tsujikawa + + Eliminated duplicated filterBitfield initialization code. + * src/BitfieldMan.cc + * src/BitfieldMan.h + 2009-07-11 Tatsuhiro Tsujikawa Added assert(!req.isNull()) when DlRetryEx is caught(this is diff --git a/src/BitfieldMan.cc b/src/BitfieldMan.cc index c279a8aa..7506c4e9 100644 --- a/src/BitfieldMan.cc +++ b/src/BitfieldMan.cc @@ -573,11 +573,16 @@ bool BitfieldMan::setFilterBit(size_t index) { return setBitInternal(filterBitfield, index, true); } -void BitfieldMan::addFilter(uint64_t offset, uint64_t length) { +void BitfieldMan::ensureFilterBitfield() +{ if(!filterBitfield) { filterBitfield = new unsigned char[bitfieldLength]; memset(filterBitfield, 0, bitfieldLength); } +} + +void BitfieldMan::addFilter(uint64_t offset, uint64_t length) { + ensureFilterBitfield(); if(length > 0) { size_t startBlock = offset/blockLength; size_t endBlock = (offset+length-1)/blockLength; @@ -589,10 +594,7 @@ void BitfieldMan::addFilter(uint64_t offset, uint64_t length) { } void BitfieldMan::removeFilter(uint64_t offset, uint64_t length) { - if(!filterBitfield) { - filterBitfield = new unsigned char[bitfieldLength]; - memset(filterBitfield, 0, bitfieldLength); - } + ensureFilterBitfield(); if(length > 0) { size_t startBlock = offset/blockLength; size_t endBlock = (offset+length-1)/blockLength; @@ -605,11 +607,7 @@ void BitfieldMan::removeFilter(uint64_t offset, uint64_t length) { void BitfieldMan::addNotFilter(uint64_t offset, uint64_t length) { - // TODO1.5 Create ensureFilterBitfield() to initialize this - if(!filterBitfield) { - filterBitfield = new unsigned char[bitfieldLength]; - memset(filterBitfield, 0, bitfieldLength); - } + ensureFilterBitfield(); if(length > 0 && blocks > 0) { size_t startBlock = offset/blockLength; if(blocks <= startBlock) { @@ -627,10 +625,7 @@ void BitfieldMan::addNotFilter(uint64_t offset, uint64_t length) } void BitfieldMan::enableFilter() { - if(!filterBitfield) { - filterBitfield = new unsigned char[bitfieldLength]; - memset(filterBitfield, 0, bitfieldLength); - } + ensureFilterBitfield(); filterEnabled = true; updateCache(); } diff --git a/src/BitfieldMan.h b/src/BitfieldMan.h index 87d9a026..fc87133b 100644 --- a/src/BitfieldMan.h +++ b/src/BitfieldMan.h @@ -83,6 +83,10 @@ private: size_t getEndIndex(size_t index) const; uint64_t getCompletedLength(bool useFilter) const; + + // If filterBitfield is 0, allocate bitfieldLength bytes to it and + // set 0 to all bytes. + void ensureFilterBitfield(); public: // [startIndex, endIndex) class Range {