mirror of https://github.com/aria2/aria2
2009-02-12 Tatsuhiro Tsujikawa <t-tujikawa@users.sourceforge.net>
Added array_wrapper template. * src/array_fun.h * test/array_funTest.ccpull/1/head
parent
a73ef15904
commit
b8b6b5c568
|
@ -1,3 +1,9 @@
|
|||
2009-02-12 Tatsuhiro Tsujikawa <t-tujikawa@users.sourceforge.net>
|
||||
|
||||
Added array_wrapper template.
|
||||
* src/array_fun.h
|
||||
* test/array_funTest.cc
|
||||
|
||||
2009-02-12 Tatsuhiro Tsujikawa <t-tujikawa@users.sourceforge.net>
|
||||
|
||||
Use operator T* of array_ptr.
|
||||
|
|
|
@ -262,6 +262,39 @@ public:
|
|||
}
|
||||
};
|
||||
|
||||
template<typename T, size_t N>
|
||||
class array_wrapper {
|
||||
private:
|
||||
T _array[N];
|
||||
public:
|
||||
array_wrapper() {}
|
||||
|
||||
T& operator[](size_t index)
|
||||
{
|
||||
return _array[index];
|
||||
}
|
||||
|
||||
const T& operator[](size_t index) const
|
||||
{
|
||||
return _array[index];
|
||||
}
|
||||
|
||||
operator T*()
|
||||
{
|
||||
return _array;
|
||||
}
|
||||
|
||||
operator const T*() const
|
||||
{
|
||||
return _array;
|
||||
}
|
||||
|
||||
size_t size() const
|
||||
{
|
||||
return N;
|
||||
}
|
||||
};
|
||||
|
||||
} // namespace aria2
|
||||
|
||||
#endif // _D_ARRAY_FUN_H_
|
||||
|
|
|
@ -12,6 +12,7 @@ class array_funTest:public CppUnit::TestFixture {
|
|||
CPPUNIT_TEST(testArray_and);
|
||||
CPPUNIT_TEST(testArrayLength);
|
||||
CPPUNIT_TEST(testArrayPtr);
|
||||
CPPUNIT_TEST(testArrayWrapper);
|
||||
CPPUNIT_TEST_SUITE_END();
|
||||
|
||||
public:
|
||||
|
@ -21,6 +22,7 @@ public:
|
|||
void testArray_and();
|
||||
void testArrayLength();
|
||||
void testArrayPtr();
|
||||
void testArrayWrapper();
|
||||
|
||||
struct X{
|
||||
int m;
|
||||
|
@ -109,4 +111,25 @@ void array_funTest::testArrayPtr()
|
|||
arrayPtrConstCast(ax);
|
||||
}
|
||||
|
||||
static void arrayWrapperConst(const array_wrapper<int, 10>& array)
|
||||
{
|
||||
CPPUNIT_ASSERT_EQUAL(9, array[9]);
|
||||
}
|
||||
|
||||
void array_funTest::testArrayWrapper()
|
||||
{
|
||||
array_wrapper<int, 10> a1;
|
||||
CPPUNIT_ASSERT_EQUAL((size_t)10, a1.size());
|
||||
for(size_t i = 0; i < a1.size(); ++i) {
|
||||
a1[i] = i;
|
||||
}
|
||||
CPPUNIT_ASSERT_EQUAL(9, a1[9]);
|
||||
array_wrapper<int, 10> a2 = a1;
|
||||
CPPUNIT_ASSERT_EQUAL(9, a2[9]);
|
||||
|
||||
array_wrapper<struct X, 10> x1;
|
||||
arrayPtrCast(x1);
|
||||
arrayPtrConstCast(x1);
|
||||
}
|
||||
|
||||
} // namespace aria2
|
||||
|
|
Loading…
Reference in New Issue