2010-09-26 Tatsuhiro Tsujikawa <t-tujikawa@users.sourceforge.net>

Rewritten TripletNthType.
	* src/Triplet.h
	* test/TripletTest.cc
pull/1/head
Tatsuhiro Tsujikawa 2010-09-26 06:46:12 +00:00
parent aabd7b75f9
commit e07f7207fa
3 changed files with 25 additions and 19 deletions

View File

@ -1,3 +1,9 @@
2010-09-26 Tatsuhiro Tsujikawa <t-tujikawa@users.sourceforge.net>
Rewritten TripletNthType.
* src/Triplet.h
* test/TripletTest.cc
2010-09-26 Tatsuhiro Tsujikawa <t-tujikawa@users.sourceforge.net> 2010-09-26 Tatsuhiro Tsujikawa <t-tujikawa@users.sourceforge.net>
Sort usedHosts by least used and faster download speed. Sort usedHosts by least used and faster download speed.

View File

@ -84,22 +84,22 @@ Triplet<T1, T2, T3> makeTriplet(const T1& t1, const T2& t2, const T3& t3)
return Triplet<T1, T2, T3>(t1, t2, t3); return Triplet<T1, T2, T3>(t1, t2, t3);
} }
template<typename T1, typename T2, typename T3, size_t N> template<typename Triplet, size_t N>
struct TripletNthType; struct TripletNthType;
template<typename T1, typename T2, typename T3> template<typename Triplet>
struct TripletNthType<T1, T2, T3, 1> { struct TripletNthType<Triplet, 1> {
typedef T1 type; typedef typename Triplet::first_type type;
}; };
template<typename T1, typename T2, typename T3> template<typename Triplet>
struct TripletNthType<T1, T2, T3, 2> { struct TripletNthType<Triplet, 2> {
typedef T2 type; typedef typename Triplet::second_type type;
}; };
template<typename T1, typename T2, typename T3> template<typename Triplet>
struct TripletNthType<T1, T2, T3, 3> { struct TripletNthType<Triplet, 3> {
typedef T3 type; typedef typename Triplet::third_type type;
}; };
template<size_t N> template<size_t N>
@ -135,13 +135,13 @@ struct TripletGet<3> {
template<size_t N1, size_t N2> template<size_t N1, size_t N2>
class Triplet2Pair { class Triplet2Pair {
public: public:
template<typename T1, typename T2, typename T3> template<typename Triplet>
std::pair<typename TripletNthType<T1, T2, T3, N1>::type, std::pair<typename TripletNthType<Triplet, N1>::type,
typename TripletNthType<T1, T2, T3, N2>::type> typename TripletNthType<Triplet, N2>::type>
operator()(const Triplet<T1, T2, T3>& tri) const operator()(const Triplet& tri) const
{ {
return std::make_pair<typename TripletNthType<T1, T2, T3, N1>::type, return std::make_pair<typename TripletNthType<Triplet, N1>::type,
typename TripletNthType<T1, T2, T3, N2>::type> typename TripletNthType<Triplet, N2>::type>
(TripletGet<N1>::get(tri), TripletGet<N2>::get(tri)); (TripletGet<N1>::get(tri), TripletGet<N2>::get(tri));
} }
}; };

View File

@ -54,11 +54,11 @@ void TripletTest::testTripletGet()
void TripletTest::testTripletNthType() void TripletTest::testTripletNthType()
{ {
TripletNthType<int, double, std::string, 1>::type x = 1; TripletNthType<Triplet<int, double, std::string>, 1>::type x = 1;
CPPUNIT_ASSERT_EQUAL(1, x); CPPUNIT_ASSERT_EQUAL(1, x);
TripletNthType<int, double, std::string, 2>::type y = 3.14; TripletNthType<Triplet<int, double, std::string>, 2>::type y = 3.14;
CPPUNIT_ASSERT_EQUAL((double)3.14, y); CPPUNIT_ASSERT_EQUAL((double)3.14, y);
TripletNthType<int, double, std::string, 3>::type z = "foo"; TripletNthType<Triplet<int, double, std::string>, 3>::type z = "foo";
CPPUNIT_ASSERT_EQUAL(std::string("foo"), z); CPPUNIT_ASSERT_EQUAL(std::string("foo"), z);
} }