瀏覽代碼

Replace A2_ARRAY_LEN with constexpr arraySize

Tatsuhiro Tsujikawa 11 年之前
父節點
當前提交
ae631513f3

+ 4 - 9
src/array_fun.h

@@ -42,16 +42,11 @@
 
 namespace aria2 {
 
-// calculate length of array
 template<typename T, size_t N>
-char (&char_array_ref_fun(T (&)[N]))[N];
-
-// For 0 length array
-template<typename T>
-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))
+constexpr size_t arraySize(T (&)[N])
+{
+  return N;
+}
 
 template<typename T, size_t N>
 class array_wrapper {

+ 1 - 1
test/BitfieldManTest.cc

@@ -222,7 +222,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 < A2_ARRAY_LEN(ans); ++i) {
+  for(size_t i = 0; i < arraySize(ans); ++i) {
     CPPUNIT_ASSERT_EQUAL(ans[i], out[i]);
   }
   CPPUNIT_ASSERT_EQUAL((int64_t)12ULL, btman.getFilteredTotalLength());

+ 2 - 2
test/BtPortMessageTest.cc

@@ -108,14 +108,14 @@ void BtPortMessageTest::testDoReceivedAction()
 
   // 9 nodes to create at least 2 buckets.
   std::shared_ptr<DHTNode> nodes[9];
-  for(size_t i = 0; i < A2_ARRAY_LEN(nodes); ++i) {
+  for(size_t i = 0; i < arraySize(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 < A2_ARRAY_LEN(nodes); ++i) {
+  for(size_t i = 0; i < arraySize(nodes); ++i) {
     routingTable.addNode(nodes[i]);
   }
 

+ 1 - 1
test/DHTTaskExecutorTest.cc

@@ -29,7 +29,7 @@ void DHTTaskExecutorTest::testUpdate()
     std::shared_ptr<MockDHTTask>(new MockDHTTask(rn))
   };
   tasks[1]->finished_ = true;
-  for(size_t i = 0; i < A2_ARRAY_LEN(tasks); ++i) {
+  for(size_t i = 0; i < arraySize(tasks); ++i) {
     tex.addTask(tasks[i]);
   }
   CPPUNIT_ASSERT_EQUAL((size_t)0, tex.getExecutingTaskSize());

+ 1 - 1
test/DefaultPeerStorageTest.cc

@@ -141,7 +141,7 @@ void DefaultPeerStorageTest::testCheckoutPeer()
     std::shared_ptr<Peer>(new Peer("192.168.0.2", 1000)),
     std::shared_ptr<Peer>(new Peer("192.168.0.3", 1000))
   };
-  int len = A2_ARRAY_LEN(peers);
+  int len = arraySize(peers);
   for(int i = 0; i < len; ++i) {
     ps.addPeer(peers[i]);
   }

+ 1 - 1
test/LongestSequencePieceSelectorTest.cc

@@ -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 < A2_ARRAY_LEN(A); ++i) {
+  for(size_t i = 0; i < arraySize(A); ++i) {
     bf.setBit(A[i]);
   }
 

+ 1 - 1
test/OptionParserTest.cc

@@ -168,7 +168,7 @@ void OptionParserTest::testParseArg()
 
   char* argv[] = { prog, optionTimeout, argTimeout, optionDir, argDir,
                    nonopt1, nonopt2 };
-  int argc = A2_ARRAY_LEN(argv);
+  int argc = arraySize(argv);
 
   std::stringstream s;
   std::vector<std::string> nonopts;

+ 2 - 2
test/array_funTest.cc

@@ -61,11 +61,11 @@ void array_funTest::testArray_and()
 void array_funTest::testArrayLength()
 {
   int64_t ia[] = { 1, 2, 3, 4, 5 };
-  CPPUNIT_ASSERT_EQUAL((size_t)5, A2_ARRAY_LEN(ia));
+  CPPUNIT_ASSERT_EQUAL((size_t)5, arraySize(ia));
   // This causes compile error under clang and gcc v3.4.3 opensolaris
   // 5.11
   // int64_t zeroLengthArray[] = {};
-  // CPPUNIT_ASSERT_EQUAL((size_t)0, A2_ARRAY_LEN(zeroLengthArray));
+  // CPPUNIT_ASSERT_EQUAL((size_t)0, arraySize(zeroLengthArray));
 }
 
 namespace {