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
pull/1/head
Tatsuhiro Tsujikawa 2010-03-25 14:22:43 +00:00
parent f15d22b619
commit 886f8ee58e
12 changed files with 41 additions and 31 deletions

View File

@ -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> 2010-03-25 Tatsuhiro Tsujikawa <t-tujikawa@users.sourceforge.net>
Added vbegin() and vend() for fixed sized array. Added vbegin() and vend() for fixed sized array.

View File

@ -41,21 +41,15 @@
namespace aria2 { namespace aria2 {
// calculate length of array // calculate length of array
template<typename T, size_t N> template<typename T, size_t N>
char (&char_array_ref(T (&)[N]))[N]; char (&char_array_ref_fun(T (&)[N]))[N];
template<typename T, size_t N>
size_t arrayLength(T (&a)[N])
{
return sizeof(char_array_ref(a));
}
// For 0 length array
template<typename T> template<typename T>
size_t arrayLength(T (&a)[0u]) char (&char_array_ref_fun(T (&)[0u]))[0u];
{
return 0; // 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> template<typename T, size_t N>
T* vbegin(T (&a)[N]) T* vbegin(T (&a)[N])
@ -66,7 +60,7 @@ T* vbegin(T (&a)[N])
template<typename T, size_t N> template<typename T, size_t N>
T* vend(T (&a)[N]) T* vend(T (&a)[N])
{ {
return a+arrayLength(a); return a+N;
} }
template<typename T> template<typename T>

View File

@ -210,7 +210,7 @@ void BitfieldManTest::testFilter()
std::vector<size_t> out; std::vector<size_t> out;
CPPUNIT_ASSERT_EQUAL((size_t)6, btman.getFirstNMissingUnusedIndex(out, 32)); CPPUNIT_ASSERT_EQUAL((size_t)6, btman.getFirstNMissingUnusedIndex(out, 32));
const size_t ans[] = { 2, 3, 4, 5, 6, 7 }; 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(ans[i], out[i]);
} }
CPPUNIT_ASSERT_EQUAL((uint64_t)12ULL, btman.getFilteredTotalLength()); CPPUNIT_ASSERT_EQUAL((uint64_t)12ULL, btman.getFilteredTotalLength());

View File

@ -107,14 +107,14 @@ void BtPortMessageTest::testDoReceivedAction()
// 9 nodes to create at least 2 buckets. // 9 nodes to create at least 2 buckets.
SharedHandle<DHTNode> nodes[9]; 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); memset(nodeID, 0, DHT_ID_LENGTH);
nodeID[DHT_ID_LENGTH-1] = i+1; nodeID[DHT_ID_LENGTH-1] = i+1;
nodes[i].reset(new DHTNode(nodeID)); nodes[i].reset(new DHTNode(nodeID));
} }
DHTRoutingTable routingTable(localNode); 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]); routingTable.addNode(nodes[i]);
} }

View File

@ -37,7 +37,7 @@ void DHTRoutingTableDeserializerTest::testDeserialize()
SharedHandle<DHTNode> localNode(new DHTNode()); SharedHandle<DHTNode> localNode(new DHTNode());
SharedHandle<DHTNode> nodesSrc[3]; 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].reset(new DHTNode());
nodesSrc[i]->setIPAddress("192.168.0."+util::uitos(i+1)); nodesSrc[i]->setIPAddress("192.168.0."+util::uitos(i+1));
nodesSrc[i]->setPort(6881+i); nodesSrc[i]->setPort(6881+i);

View File

@ -37,7 +37,7 @@ void DHTRoutingTableSerializerTest::testSerialize()
SharedHandle<DHTNode> localNode(new DHTNode()); SharedHandle<DHTNode> localNode(new DHTNode());
SharedHandle<DHTNode> nodesSrc[3]; 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].reset(new DHTNode());
nodesSrc[i]->setIPAddress("192.168.0."+util::uitos(i+1)); nodesSrc[i]->setIPAddress("192.168.0."+util::uitos(i+1));
nodesSrc[i]->setPort(6881+i); nodesSrc[i]->setPort(6881+i);

View File

@ -83,7 +83,7 @@ void DownloadHelperTest::testCreateRequestGroupForUri()
std::vector<std::string> uris; std::vector<std::string> uris;
group->getDownloadContext()->getFirstFileEntry()->getUris(uris); group->getDownloadContext()->getFirstFileEntry()->getUris(uris);
CPPUNIT_ASSERT_EQUAL((size_t)3, uris.size()); 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(array[i], uris[i]);
} }
CPPUNIT_ASSERT_EQUAL((unsigned int)3, group->getNumConcurrentCommand()); CPPUNIT_ASSERT_EQUAL((unsigned int)3, group->getNumConcurrentCommand());
@ -102,11 +102,11 @@ void DownloadHelperTest::testCreateRequestGroupForUri()
std::vector<std::string> uris; std::vector<std::string> uris;
group->getDownloadContext()->getFirstFileEntry()->getUris(uris); group->getDownloadContext()->getFirstFileEntry()->getUris(uris);
CPPUNIT_ASSERT_EQUAL((size_t)5, uris.size()); 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]); CPPUNIT_ASSERT_EQUAL(array[i], uris[i]);
} }
for(size_t i = 0; i < 5-arrayLength(array); ++i) { for(size_t i = 0; i < 5-A2_ARRAY_LEN(array); ++i) {
CPPUNIT_ASSERT_EQUAL(array[i], uris[i+arrayLength(array)]); CPPUNIT_ASSERT_EQUAL(array[i], uris[i+A2_ARRAY_LEN(array)]);
} }
CPPUNIT_ASSERT_EQUAL((unsigned int)5, group->getNumConcurrentCommand()); CPPUNIT_ASSERT_EQUAL((unsigned int)5, group->getNumConcurrentCommand());
} }
@ -121,7 +121,7 @@ void DownloadHelperTest::testCreateRequestGroupForUri()
std::vector<std::string> uris; std::vector<std::string> uris;
group->getDownloadContext()->getFirstFileEntry()->getUris(uris); group->getDownloadContext()->getFirstFileEntry()->getUris(uris);
CPPUNIT_ASSERT_EQUAL((size_t)3, uris.size()); 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(array[i], uris[i]);
} }
CPPUNIT_ASSERT_EQUAL((unsigned int)2, group->getNumConcurrentCommand()); CPPUNIT_ASSERT_EQUAL((unsigned int)2, group->getNumConcurrentCommand());
@ -346,7 +346,7 @@ void DownloadHelperTest::testCreateRequestGroupForBitTorrent()
group->getDownloadContext()->getFirstFileEntry()->getUris(uris); group->getDownloadContext()->getFirstFileEntry()->getUris(uris);
// See -s option is ignored // See -s option is ignored
CPPUNIT_ASSERT_EQUAL((size_t)3, uris.size()); 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(array[i]+"/aria2-test/aria2/src/aria2c", uris[i]);
} }
CPPUNIT_ASSERT_EQUAL((unsigned int)5, group->getNumConcurrentCommand()); CPPUNIT_ASSERT_EQUAL((unsigned int)5, group->getNumConcurrentCommand());

View File

@ -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 }; size_t A[] = { 1,2,3,4,7,10,11,12,13,14,15,100,112,113,114 };
BitfieldMan bf(1024, 1024*256); 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]); bf.setBit(A[i]);
} }

View File

@ -371,7 +371,7 @@ void MultiDiskAdaptorTest::testCutTrailingGarbage()
SharedHandle<FileEntry>(new FileEntry(dir+"/"+prefix+"1", 256, 0)), SharedHandle<FileEntry>(new FileEntry(dir+"/"+prefix+"1", 256, 0)),
SharedHandle<FileEntry>(new FileEntry(dir+"/"+prefix+"2", 512, 256)) 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); createFile(entries[i]->getPath(), entries[i]->getLength()+100);
} }
std::vector<SharedHandle<FileEntry> > fileEntries 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+"1", 1, 0)),
SharedHandle<FileEntry>(new FileEntry(dir+"/"+prefix+"2", 1, 1)) 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()); createFile(entries[i]->getPath(), entries[i]->getLength());
} }
std::vector<SharedHandle<FileEntry> > fileEntries std::vector<SharedHandle<FileEntry> > fileEntries

View File

@ -164,7 +164,7 @@ void OptionParserTest::testParseArg()
char* const argv[] = { prog, optionAlpha, argAlpha, optionBravo, argBravo, char* const argv[] = { prog, optionAlpha, argAlpha, optionBravo, argBravo,
nonopt1, nonopt2 }; nonopt1, nonopt2 };
int argc = arrayLength(argv); int argc = A2_ARRAY_LEN(argv);
std::stringstream s; std::stringstream s;
std::vector<std::string> nonopts; std::vector<std::string> nonopts;

View File

@ -25,7 +25,7 @@ void PriorityPieceSelectorTest::testSelect()
size_t pieceLength = 1024; size_t pieceLength = 1024;
size_t A[] = { 1,200}; size_t A[] = { 1,200};
BitfieldMan bf(pieceLength, pieceLength*256); 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]); bf.setBit(A[i]);
} }
PriorityPieceSelector selector PriorityPieceSelector selector

View File

@ -67,8 +67,8 @@ void array_funTest::testArrayLength()
int64_t ia[] = { 1, 2, 3, 4, 5 }; int64_t ia[] = { 1, 2, 3, 4, 5 };
int64_t zeroLengthArray[] = {}; int64_t zeroLengthArray[] = {};
CPPUNIT_ASSERT_EQUAL((size_t)5, arrayLength(ia)); CPPUNIT_ASSERT_EQUAL((size_t)5, A2_ARRAY_LEN(ia));
CPPUNIT_ASSERT_EQUAL((size_t)0, arrayLength(zeroLengthArray)); CPPUNIT_ASSERT_EQUAL((size_t)0, A2_ARRAY_LEN(zeroLengthArray));
} }
// Check operator[] in const context. // Check operator[] in const context.