summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorTatsuhiro Tsujikawa <tatsuhiro.t@gmail.com>2014-08-29 23:37:31 +0900
committerTatsuhiro Tsujikawa <tatsuhiro.t@gmail.com>2014-08-29 23:37:31 +0900
commitae631513f33da0bba2a2d9a9b0b9207358568cc6 (patch)
tree8164feba6fd9ee9a09aff9d3cf5500b983922bb3
parentb8b291187d45ce985f218688edbd1cffc479c6d5 (diff)
Replace A2_ARRAY_LEN with constexpr arraySize
-rw-r--r--src/array_fun.h13
-rw-r--r--test/BitfieldManTest.cc2
-rw-r--r--test/BtPortMessageTest.cc4
-rw-r--r--test/DHTTaskExecutorTest.cc2
-rw-r--r--test/DefaultPeerStorageTest.cc2
-rw-r--r--test/LongestSequencePieceSelectorTest.cc2
-rw-r--r--test/OptionParserTest.cc2
-rw-r--r--test/array_funTest.cc4
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<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 {
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<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());
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<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]);
}
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<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());
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<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]);
}
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<std::string> 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 {