mirror of https://github.com/aria2/aria2
				
				
				
			2010-03-25 Tatsuhiro Tsujikawa <t-tujikawa@users.sourceforge.net>
Removed arrayLength. Defined A2_ARRAY_LEN as macro to calculate size of array at compile time. * src/array_fun.h * test/BitfieldManTest.cc * test/BtPortMessageTest.cc * test/DHTRoutingTableDeserializerTest.cc * test/DHTRoutingTableSerializerTest.cc * test/DownloadHelperTest.cc * test/LongestSequencePieceSelectorTest.cc * test/MultiDiskAdaptorTest.cc * test/OptionParserTest.cc * test/PriorityPieceSelectorTest.cc * test/array_funTest.ccpull/1/head
							parent
							
								
									f15d22b619
								
							
						
					
					
						commit
						886f8ee58e
					
				
							
								
								
									
										16
									
								
								ChangeLog
								
								
								
								
							
							
						
						
									
										16
									
								
								ChangeLog
								
								
								
								
							| 
						 | 
				
			
			@ -1,3 +1,19 @@
 | 
			
		|||
2010-03-25  Tatsuhiro Tsujikawa  <t-tujikawa@users.sourceforge.net>
 | 
			
		||||
 | 
			
		||||
	Removed arrayLength. Defined A2_ARRAY_LEN as macro to calculate
 | 
			
		||||
	size of array at compile time.
 | 
			
		||||
	* src/array_fun.h
 | 
			
		||||
	* test/BitfieldManTest.cc
 | 
			
		||||
	* test/BtPortMessageTest.cc
 | 
			
		||||
	* test/DHTRoutingTableDeserializerTest.cc
 | 
			
		||||
	* test/DHTRoutingTableSerializerTest.cc
 | 
			
		||||
	* test/DownloadHelperTest.cc
 | 
			
		||||
	* test/LongestSequencePieceSelectorTest.cc
 | 
			
		||||
	* test/MultiDiskAdaptorTest.cc
 | 
			
		||||
	* test/OptionParserTest.cc
 | 
			
		||||
	* test/PriorityPieceSelectorTest.cc
 | 
			
		||||
	* test/array_funTest.cc
 | 
			
		||||
 | 
			
		||||
2010-03-25  Tatsuhiro Tsujikawa  <t-tujikawa@users.sourceforge.net>
 | 
			
		||||
 | 
			
		||||
	Added vbegin() and vend() for fixed sized array.
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -41,21 +41,15 @@
 | 
			
		|||
namespace aria2 {
 | 
			
		||||
 | 
			
		||||
// calculate length of array
 | 
			
		||||
 | 
			
		||||
template<typename T, size_t N>
 | 
			
		||||
char (&char_array_ref(T (&)[N]))[N];
 | 
			
		||||
 | 
			
		||||
template<typename T, size_t N>
 | 
			
		||||
size_t arrayLength(T (&a)[N])
 | 
			
		||||
{
 | 
			
		||||
  return sizeof(char_array_ref(a));
 | 
			
		||||
}
 | 
			
		||||
char (&char_array_ref_fun(T (&)[N]))[N];
 | 
			
		||||
 | 
			
		||||
// For 0 length array
 | 
			
		||||
template<typename T>
 | 
			
		||||
size_t arrayLength(T (&a)[0u])
 | 
			
		||||
{
 | 
			
		||||
  return 0;
 | 
			
		||||
}
 | 
			
		||||
char (&char_array_ref_fun(T (&)[0u]))[0u];
 | 
			
		||||
 | 
			
		||||
// To calculate size of array at compile time, we use macro here.
 | 
			
		||||
#define A2_ARRAY_LEN(X) sizeof(char_array_ref_fun(X))
 | 
			
		||||
 | 
			
		||||
template<typename T, size_t N>
 | 
			
		||||
T* vbegin(T (&a)[N])
 | 
			
		||||
| 
						 | 
				
			
			@ -66,7 +60,7 @@ T* vbegin(T (&a)[N])
 | 
			
		|||
template<typename T, size_t N>
 | 
			
		||||
T* vend(T (&a)[N])
 | 
			
		||||
{
 | 
			
		||||
  return a+arrayLength(a);
 | 
			
		||||
  return a+N;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
template<typename T>
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -210,7 +210,7 @@ void BitfieldManTest::testFilter()
 | 
			
		|||
  std::vector<size_t> out;
 | 
			
		||||
  CPPUNIT_ASSERT_EQUAL((size_t)6, btman.getFirstNMissingUnusedIndex(out, 32));
 | 
			
		||||
  const size_t ans[] = { 2, 3, 4, 5, 6, 7 };
 | 
			
		||||
  for(size_t i = 0; i < arrayLength(ans); ++i) {
 | 
			
		||||
  for(size_t i = 0; i < A2_ARRAY_LEN(ans); ++i) {
 | 
			
		||||
    CPPUNIT_ASSERT_EQUAL(ans[i], out[i]);
 | 
			
		||||
  }
 | 
			
		||||
  CPPUNIT_ASSERT_EQUAL((uint64_t)12ULL, btman.getFilteredTotalLength());
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -107,14 +107,14 @@ void BtPortMessageTest::testDoReceivedAction()
 | 
			
		|||
 | 
			
		||||
  // 9 nodes to create at least 2 buckets.
 | 
			
		||||
  SharedHandle<DHTNode> nodes[9];
 | 
			
		||||
  for(size_t i = 0; i < arrayLength(nodes); ++i) {
 | 
			
		||||
  for(size_t i = 0; i < A2_ARRAY_LEN(nodes); ++i) {
 | 
			
		||||
    memset(nodeID, 0, DHT_ID_LENGTH);
 | 
			
		||||
    nodeID[DHT_ID_LENGTH-1] = i+1;
 | 
			
		||||
    nodes[i].reset(new DHTNode(nodeID));
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  DHTRoutingTable routingTable(localNode);
 | 
			
		||||
  for(size_t i = 0; i < arrayLength(nodes); ++i) {
 | 
			
		||||
  for(size_t i = 0; i < A2_ARRAY_LEN(nodes); ++i) {
 | 
			
		||||
    routingTable.addNode(nodes[i]);
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -37,7 +37,7 @@ void DHTRoutingTableDeserializerTest::testDeserialize()
 | 
			
		|||
  SharedHandle<DHTNode> localNode(new DHTNode());
 | 
			
		||||
 | 
			
		||||
  SharedHandle<DHTNode> nodesSrc[3];
 | 
			
		||||
  for(size_t i = 0; i < arrayLength(nodesSrc); ++i) {
 | 
			
		||||
  for(size_t i = 0; i < A2_ARRAY_LEN(nodesSrc); ++i) {
 | 
			
		||||
    nodesSrc[i].reset(new DHTNode());
 | 
			
		||||
    nodesSrc[i]->setIPAddress("192.168.0."+util::uitos(i+1));
 | 
			
		||||
    nodesSrc[i]->setPort(6881+i);
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -37,7 +37,7 @@ void DHTRoutingTableSerializerTest::testSerialize()
 | 
			
		|||
  SharedHandle<DHTNode> localNode(new DHTNode());
 | 
			
		||||
 | 
			
		||||
  SharedHandle<DHTNode> nodesSrc[3];
 | 
			
		||||
  for(size_t i = 0; i < arrayLength(nodesSrc); ++i) {
 | 
			
		||||
  for(size_t i = 0; i < A2_ARRAY_LEN(nodesSrc); ++i) {
 | 
			
		||||
    nodesSrc[i].reset(new DHTNode());
 | 
			
		||||
    nodesSrc[i]->setIPAddress("192.168.0."+util::uitos(i+1));
 | 
			
		||||
    nodesSrc[i]->setPort(6881+i);
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -83,7 +83,7 @@ void DownloadHelperTest::testCreateRequestGroupForUri()
 | 
			
		|||
    std::vector<std::string> uris;
 | 
			
		||||
    group->getDownloadContext()->getFirstFileEntry()->getUris(uris);
 | 
			
		||||
    CPPUNIT_ASSERT_EQUAL((size_t)3, uris.size());
 | 
			
		||||
    for(size_t i = 0; i < arrayLength(array); ++i) {
 | 
			
		||||
    for(size_t i = 0; i < A2_ARRAY_LEN(array); ++i) {
 | 
			
		||||
      CPPUNIT_ASSERT_EQUAL(array[i], uris[i]);
 | 
			
		||||
    }
 | 
			
		||||
    CPPUNIT_ASSERT_EQUAL((unsigned int)3, group->getNumConcurrentCommand());
 | 
			
		||||
| 
						 | 
				
			
			@ -102,11 +102,11 @@ void DownloadHelperTest::testCreateRequestGroupForUri()
 | 
			
		|||
    std::vector<std::string> uris;
 | 
			
		||||
    group->getDownloadContext()->getFirstFileEntry()->getUris(uris);
 | 
			
		||||
    CPPUNIT_ASSERT_EQUAL((size_t)5, uris.size());
 | 
			
		||||
    for(size_t i = 0; i < arrayLength(array); ++i) {
 | 
			
		||||
    for(size_t i = 0; i < A2_ARRAY_LEN(array); ++i) {
 | 
			
		||||
      CPPUNIT_ASSERT_EQUAL(array[i], uris[i]);
 | 
			
		||||
    }
 | 
			
		||||
    for(size_t i = 0; i < 5-arrayLength(array); ++i) {
 | 
			
		||||
      CPPUNIT_ASSERT_EQUAL(array[i], uris[i+arrayLength(array)]);
 | 
			
		||||
    for(size_t i = 0; i < 5-A2_ARRAY_LEN(array); ++i) {
 | 
			
		||||
      CPPUNIT_ASSERT_EQUAL(array[i], uris[i+A2_ARRAY_LEN(array)]);
 | 
			
		||||
    }
 | 
			
		||||
    CPPUNIT_ASSERT_EQUAL((unsigned int)5, group->getNumConcurrentCommand());
 | 
			
		||||
  }
 | 
			
		||||
| 
						 | 
				
			
			@ -121,7 +121,7 @@ void DownloadHelperTest::testCreateRequestGroupForUri()
 | 
			
		|||
    std::vector<std::string> uris;
 | 
			
		||||
    group->getDownloadContext()->getFirstFileEntry()->getUris(uris);
 | 
			
		||||
    CPPUNIT_ASSERT_EQUAL((size_t)3, uris.size());
 | 
			
		||||
    for(size_t i = 0; i < arrayLength(array); ++i) {
 | 
			
		||||
    for(size_t i = 0; i < A2_ARRAY_LEN(array); ++i) {
 | 
			
		||||
      CPPUNIT_ASSERT_EQUAL(array[i], uris[i]);
 | 
			
		||||
    }
 | 
			
		||||
    CPPUNIT_ASSERT_EQUAL((unsigned int)2, group->getNumConcurrentCommand());
 | 
			
		||||
| 
						 | 
				
			
			@ -346,7 +346,7 @@ void DownloadHelperTest::testCreateRequestGroupForBitTorrent()
 | 
			
		|||
    group->getDownloadContext()->getFirstFileEntry()->getUris(uris);
 | 
			
		||||
    // See -s option is ignored
 | 
			
		||||
    CPPUNIT_ASSERT_EQUAL((size_t)3, uris.size());
 | 
			
		||||
    for(size_t i = 0; i < arrayLength(array); ++i) {
 | 
			
		||||
    for(size_t i = 0; i < A2_ARRAY_LEN(array); ++i) {
 | 
			
		||||
      CPPUNIT_ASSERT_EQUAL(array[i]+"/aria2-test/aria2/src/aria2c", uris[i]);
 | 
			
		||||
    }
 | 
			
		||||
    CPPUNIT_ASSERT_EQUAL((unsigned int)5, group->getNumConcurrentCommand());
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -27,7 +27,7 @@ void LongestSequencePieceSelectorTest::testSelect()
 | 
			
		|||
{
 | 
			
		||||
  size_t A[] = { 1,2,3,4,7,10,11,12,13,14,15,100,112,113,114 };
 | 
			
		||||
  BitfieldMan bf(1024, 1024*256);
 | 
			
		||||
  for(size_t i = 0; i < arrayLength(A); ++i) {
 | 
			
		||||
  for(size_t i = 0; i < A2_ARRAY_LEN(A); ++i) {
 | 
			
		||||
    bf.setBit(A[i]);
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -371,7 +371,7 @@ void MultiDiskAdaptorTest::testCutTrailingGarbage()
 | 
			
		|||
    SharedHandle<FileEntry>(new FileEntry(dir+"/"+prefix+"1", 256, 0)),
 | 
			
		||||
    SharedHandle<FileEntry>(new FileEntry(dir+"/"+prefix+"2", 512, 256))
 | 
			
		||||
  };
 | 
			
		||||
  for(size_t i = 0; i < arrayLength(entries); ++i) {
 | 
			
		||||
  for(size_t i = 0; i < A2_ARRAY_LEN(entries); ++i) {
 | 
			
		||||
    createFile(entries[i]->getPath(), entries[i]->getLength()+100);
 | 
			
		||||
  }
 | 
			
		||||
  std::vector<SharedHandle<FileEntry> > fileEntries
 | 
			
		||||
| 
						 | 
				
			
			@ -400,7 +400,7 @@ void MultiDiskAdaptorTest::testSize()
 | 
			
		|||
    SharedHandle<FileEntry>(new FileEntry(dir+"/"+prefix+"1", 1, 0)),
 | 
			
		||||
    SharedHandle<FileEntry>(new FileEntry(dir+"/"+prefix+"2", 1, 1))
 | 
			
		||||
  };
 | 
			
		||||
  for(size_t i = 0; i < arrayLength(entries); ++i) {
 | 
			
		||||
  for(size_t i = 0; i < A2_ARRAY_LEN(entries); ++i) {
 | 
			
		||||
    createFile(entries[i]->getPath(), entries[i]->getLength());
 | 
			
		||||
  }
 | 
			
		||||
  std::vector<SharedHandle<FileEntry> > fileEntries
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -164,7 +164,7 @@ void OptionParserTest::testParseArg()
 | 
			
		|||
 | 
			
		||||
  char* const argv[] = { prog, optionAlpha, argAlpha, optionBravo, argBravo,
 | 
			
		||||
                         nonopt1, nonopt2 };
 | 
			
		||||
  int argc = arrayLength(argv);
 | 
			
		||||
  int argc = A2_ARRAY_LEN(argv);
 | 
			
		||||
 | 
			
		||||
  std::stringstream s;
 | 
			
		||||
  std::vector<std::string> nonopts;
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -25,7 +25,7 @@ void PriorityPieceSelectorTest::testSelect()
 | 
			
		|||
  size_t pieceLength = 1024;
 | 
			
		||||
  size_t A[] = { 1,200};
 | 
			
		||||
  BitfieldMan bf(pieceLength, pieceLength*256);
 | 
			
		||||
  for(size_t i = 0; i < arrayLength(A); ++i) {
 | 
			
		||||
  for(size_t i = 0; i < A2_ARRAY_LEN(A); ++i) {
 | 
			
		||||
    bf.setBit(A[i]);
 | 
			
		||||
  }
 | 
			
		||||
  PriorityPieceSelector selector
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -67,8 +67,8 @@ void array_funTest::testArrayLength()
 | 
			
		|||
  int64_t ia[] = { 1, 2, 3, 4, 5 };
 | 
			
		||||
  int64_t zeroLengthArray[] = {};
 | 
			
		||||
 | 
			
		||||
  CPPUNIT_ASSERT_EQUAL((size_t)5, arrayLength(ia));
 | 
			
		||||
  CPPUNIT_ASSERT_EQUAL((size_t)0, arrayLength(zeroLengthArray));
 | 
			
		||||
  CPPUNIT_ASSERT_EQUAL((size_t)5, A2_ARRAY_LEN(ia));
 | 
			
		||||
  CPPUNIT_ASSERT_EQUAL((size_t)0, A2_ARRAY_LEN(zeroLengthArray));
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// Check operator[] in const context.
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
		Loading…
	
		Reference in New Issue