From ae631513f33da0bba2a2d9a9b0b9207358568cc6 Mon Sep 17 00:00:00 2001 From: Tatsuhiro Tsujikawa Date: Fri, 29 Aug 2014 23:37:31 +0900 Subject: [PATCH] Replace A2_ARRAY_LEN with constexpr arraySize --- src/array_fun.h | 13 ++++--------- test/BitfieldManTest.cc | 2 +- test/BtPortMessageTest.cc | 4 ++-- test/DHTTaskExecutorTest.cc | 2 +- test/DefaultPeerStorageTest.cc | 2 +- test/LongestSequencePieceSelectorTest.cc | 2 +- test/OptionParserTest.cc | 2 +- test/array_funTest.cc | 4 ++-- 8 files changed, 13 insertions(+), 18 deletions(-) diff --git a/src/array_fun.h b/src/array_fun.h index c59ebc17..80a56046 100644 --- a/src/array_fun.h +++ b/src/array_fun.h @@ -42,16 +42,11 @@ namespace aria2 { -// calculate length of array template -char (&char_array_ref_fun(T (&)[N]))[N]; - -// For 0 length array -template -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 class array_wrapper { diff --git a/test/BitfieldManTest.cc b/test/BitfieldManTest.cc index 709a028a..0e809027 100644 --- a/test/BitfieldManTest.cc +++ b/test/BitfieldManTest.cc @@ -222,7 +222,7 @@ void BitfieldManTest::testFilter() std::vector 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()); diff --git a/test/BtPortMessageTest.cc b/test/BtPortMessageTest.cc index 4a3dda34..73d59561 100644 --- a/test/BtPortMessageTest.cc +++ b/test/BtPortMessageTest.cc @@ -108,14 +108,14 @@ void BtPortMessageTest::testDoReceivedAction() // 9 nodes to create at least 2 buckets. std::shared_ptr 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]); } diff --git a/test/DHTTaskExecutorTest.cc b/test/DHTTaskExecutorTest.cc index 806afdaf..82162c7f 100644 --- a/test/DHTTaskExecutorTest.cc +++ b/test/DHTTaskExecutorTest.cc @@ -29,7 +29,7 @@ void DHTTaskExecutorTest::testUpdate() std::shared_ptr(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()); diff --git a/test/DefaultPeerStorageTest.cc b/test/DefaultPeerStorageTest.cc index 1abe81a3..6d6f15c7 100644 --- a/test/DefaultPeerStorageTest.cc +++ b/test/DefaultPeerStorageTest.cc @@ -141,7 +141,7 @@ void DefaultPeerStorageTest::testCheckoutPeer() std::shared_ptr(new Peer("192.168.0.2", 1000)), std::shared_ptr(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]); } diff --git a/test/LongestSequencePieceSelectorTest.cc b/test/LongestSequencePieceSelectorTest.cc index 58c7dfcb..af7ea0b9 100644 --- a/test/LongestSequencePieceSelectorTest.cc +++ b/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]); } diff --git a/test/OptionParserTest.cc b/test/OptionParserTest.cc index 26d28684..999918eb 100644 --- a/test/OptionParserTest.cc +++ b/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 nonopts; diff --git a/test/array_funTest.cc b/test/array_funTest.cc index ae796c8c..a5a53360 100644 --- a/test/array_funTest.cc +++ b/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 {