mirror of https://github.com/aria2/aria2
2007-09-01 Tatsuhiro Tsujikawa <tujikawa at rednoah dot com>
Reduced the fragmentation of bitfield in http/ftp download. * src/BitfieldMan.cc (getSparseMissingUnusedIndex) * test/BitfieldManTest.ccpull/1/head
parent
d1e7a68d68
commit
2bea8759c4
|
@ -1,3 +1,9 @@
|
||||||
|
2007-09-01 Tatsuhiro Tsujikawa <tujikawa at rednoah dot com>
|
||||||
|
|
||||||
|
Reduced the fragmentation of bitfield in http/ftp download.
|
||||||
|
* src/BitfieldMan.cc (getSparseMissingUnusedIndex)
|
||||||
|
* test/BitfieldManTest.cc
|
||||||
|
|
||||||
2007-08-30 Tatsuhiro Tsujikawa <tujikawa at rednoah dot com>
|
2007-08-30 Tatsuhiro Tsujikawa <tujikawa at rednoah dot com>
|
||||||
|
|
||||||
Added the ability to disable segmented download in .metalink.
|
Added the ability to disable segmented download in .metalink.
|
||||||
|
|
|
@ -336,8 +336,10 @@ int32_t BitfieldMan::getSparseMissingUnusedIndex() const {
|
||||||
if(maxRange.getSize()) {
|
if(maxRange.getSize()) {
|
||||||
if(maxRange.startIndex == 0) {
|
if(maxRange.startIndex == 0) {
|
||||||
return 0;
|
return 0;
|
||||||
|
} else if(isUseBitSet(maxRange.startIndex-1)) {
|
||||||
|
return maxRange.getMidIndex();
|
||||||
} else {
|
} else {
|
||||||
return maxRange.getMidIndex();
|
return maxRange.startIndex;
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
return -1;
|
return -1;
|
||||||
|
|
|
@ -15,6 +15,7 @@ class BitfieldManTest:public CppUnit::TestFixture {
|
||||||
CPPUNIT_TEST(testFilter);
|
CPPUNIT_TEST(testFilter);
|
||||||
CPPUNIT_TEST(testGetMissingIndex);
|
CPPUNIT_TEST(testGetMissingIndex);
|
||||||
CPPUNIT_TEST(testGetSparceMissingUnusedIndex);
|
CPPUNIT_TEST(testGetSparceMissingUnusedIndex);
|
||||||
|
CPPUNIT_TEST(testGetSparceMissingUnusedIndex_setBit);
|
||||||
CPPUNIT_TEST(testIsBitSetOffsetRange);
|
CPPUNIT_TEST(testIsBitSetOffsetRange);
|
||||||
CPPUNIT_TEST(testGetMissingUnusedLength);
|
CPPUNIT_TEST(testGetMissingUnusedLength);
|
||||||
CPPUNIT_TEST(testSetBitRange);
|
CPPUNIT_TEST(testSetBitRange);
|
||||||
|
@ -38,6 +39,7 @@ public:
|
||||||
void testFilter();
|
void testFilter();
|
||||||
void testGetMissingIndex();
|
void testGetMissingIndex();
|
||||||
void testGetSparceMissingUnusedIndex();
|
void testGetSparceMissingUnusedIndex();
|
||||||
|
void testGetSparceMissingUnusedIndex_setBit();
|
||||||
void testIsBitSetOffsetRange();
|
void testIsBitSetOffsetRange();
|
||||||
void testGetMissingUnusedLength();
|
void testGetMissingUnusedLength();
|
||||||
void testSetBitRange();
|
void testSetBitRange();
|
||||||
|
@ -221,23 +223,49 @@ void BitfieldManTest::testGetSparceMissingUnusedIndex() {
|
||||||
BitfieldMan bitfield(1024*1024, 10*1024*1024);
|
BitfieldMan bitfield(1024*1024, 10*1024*1024);
|
||||||
|
|
||||||
CPPUNIT_ASSERT_EQUAL((int32_t)0, bitfield.getSparseMissingUnusedIndex());
|
CPPUNIT_ASSERT_EQUAL((int32_t)0, bitfield.getSparseMissingUnusedIndex());
|
||||||
bitfield.setBit(0);
|
bitfield.setUseBit(0);
|
||||||
CPPUNIT_ASSERT_EQUAL((int32_t)5, bitfield.getSparseMissingUnusedIndex());
|
CPPUNIT_ASSERT_EQUAL((int32_t)5, bitfield.getSparseMissingUnusedIndex());
|
||||||
bitfield.setUseBit(5);
|
bitfield.setUseBit(5);
|
||||||
CPPUNIT_ASSERT_EQUAL((int32_t)3, bitfield.getSparseMissingUnusedIndex());
|
CPPUNIT_ASSERT_EQUAL((int32_t)3, bitfield.getSparseMissingUnusedIndex());
|
||||||
bitfield.setBit(3);
|
bitfield.setUseBit(3);
|
||||||
CPPUNIT_ASSERT_EQUAL((int32_t)8, bitfield.getSparseMissingUnusedIndex());
|
CPPUNIT_ASSERT_EQUAL((int32_t)8, bitfield.getSparseMissingUnusedIndex());
|
||||||
bitfield.setBit(8);
|
bitfield.setUseBit(8);
|
||||||
CPPUNIT_ASSERT_EQUAL((int32_t)2, bitfield.getSparseMissingUnusedIndex());
|
CPPUNIT_ASSERT_EQUAL((int32_t)2, bitfield.getSparseMissingUnusedIndex());
|
||||||
bitfield.setBit(2);
|
bitfield.setUseBit(2);
|
||||||
CPPUNIT_ASSERT_EQUAL((int32_t)7, bitfield.getSparseMissingUnusedIndex());
|
CPPUNIT_ASSERT_EQUAL((int32_t)7, bitfield.getSparseMissingUnusedIndex());
|
||||||
bitfield.setBit(7);
|
bitfield.setUseBit(7);
|
||||||
|
CPPUNIT_ASSERT_EQUAL((int32_t)1, bitfield.getSparseMissingUnusedIndex());
|
||||||
|
bitfield.setUseBit(1);
|
||||||
|
CPPUNIT_ASSERT_EQUAL((int32_t)4, bitfield.getSparseMissingUnusedIndex());
|
||||||
|
bitfield.setUseBit(4);
|
||||||
|
CPPUNIT_ASSERT_EQUAL((int32_t)6, bitfield.getSparseMissingUnusedIndex());
|
||||||
|
bitfield.setUseBit(6);
|
||||||
|
CPPUNIT_ASSERT_EQUAL((int32_t)9, bitfield.getSparseMissingUnusedIndex());
|
||||||
|
bitfield.setUseBit(9);
|
||||||
|
CPPUNIT_ASSERT_EQUAL((int32_t)-1, bitfield.getSparseMissingUnusedIndex());
|
||||||
|
}
|
||||||
|
|
||||||
|
void BitfieldManTest::testGetSparceMissingUnusedIndex_setBit() {
|
||||||
|
BitfieldMan bitfield(1024*1024, 10*1024*1024);
|
||||||
|
|
||||||
|
CPPUNIT_ASSERT_EQUAL((int32_t)0, bitfield.getSparseMissingUnusedIndex());
|
||||||
|
bitfield.setBit(0);
|
||||||
CPPUNIT_ASSERT_EQUAL((int32_t)1, bitfield.getSparseMissingUnusedIndex());
|
CPPUNIT_ASSERT_EQUAL((int32_t)1, bitfield.getSparseMissingUnusedIndex());
|
||||||
bitfield.setBit(1);
|
bitfield.setBit(1);
|
||||||
|
CPPUNIT_ASSERT_EQUAL((int32_t)2, bitfield.getSparseMissingUnusedIndex());
|
||||||
|
bitfield.setBit(2);
|
||||||
|
CPPUNIT_ASSERT_EQUAL((int32_t)3, bitfield.getSparseMissingUnusedIndex());
|
||||||
|
bitfield.setBit(3);
|
||||||
CPPUNIT_ASSERT_EQUAL((int32_t)4, bitfield.getSparseMissingUnusedIndex());
|
CPPUNIT_ASSERT_EQUAL((int32_t)4, bitfield.getSparseMissingUnusedIndex());
|
||||||
bitfield.setBit(4);
|
bitfield.setBit(4);
|
||||||
|
CPPUNIT_ASSERT_EQUAL((int32_t)5, bitfield.getSparseMissingUnusedIndex());
|
||||||
|
bitfield.setBit(5);
|
||||||
CPPUNIT_ASSERT_EQUAL((int32_t)6, bitfield.getSparseMissingUnusedIndex());
|
CPPUNIT_ASSERT_EQUAL((int32_t)6, bitfield.getSparseMissingUnusedIndex());
|
||||||
bitfield.setBit(6);
|
bitfield.setBit(6);
|
||||||
|
CPPUNIT_ASSERT_EQUAL((int32_t)7, bitfield.getSparseMissingUnusedIndex());
|
||||||
|
bitfield.setBit(7);
|
||||||
|
CPPUNIT_ASSERT_EQUAL((int32_t)8, bitfield.getSparseMissingUnusedIndex());
|
||||||
|
bitfield.setBit(8);
|
||||||
CPPUNIT_ASSERT_EQUAL((int32_t)9, bitfield.getSparseMissingUnusedIndex());
|
CPPUNIT_ASSERT_EQUAL((int32_t)9, bitfield.getSparseMissingUnusedIndex());
|
||||||
bitfield.setBit(9);
|
bitfield.setBit(9);
|
||||||
CPPUNIT_ASSERT_EQUAL((int32_t)-1, bitfield.getSparseMissingUnusedIndex());
|
CPPUNIT_ASSERT_EQUAL((int32_t)-1, bitfield.getSparseMissingUnusedIndex());
|
||||||
|
|
Loading…
Reference in New Issue