فهرست منبع

2009-07-11 Tatsuhiro Tsujikawa <t-tujikawa@users.sourceforge.net>

	Eliminated duplicated filterBitfield initialization code.
	* src/BitfieldMan.cc
	* src/BitfieldMan.h
Tatsuhiro Tsujikawa 16 سال پیش
والد
کامیت
67a23f615a
3فایلهای تغییر یافته به همراه19 افزوده شده و 14 حذف شده
  1. 6 0
      ChangeLog
  2. 9 14
      src/BitfieldMan.cc
  3. 4 0
      src/BitfieldMan.h

+ 6 - 0
ChangeLog

@@ -1,3 +1,9 @@
+2009-07-11  Tatsuhiro Tsujikawa  <t-tujikawa@users.sourceforge.net>
+
+	Eliminated duplicated filterBitfield initialization code.
+	* src/BitfieldMan.cc
+	* src/BitfieldMan.h
+
 2009-07-11  Tatsuhiro Tsujikawa  <t-tujikawa@users.sourceforge.net>
 
 	Added assert(!req.isNull()) when DlRetryEx is caught(this is

+ 9 - 14
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();
 }

+ 4 - 0
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 {