diff --git a/src/Makefile.am b/src/Makefile.am index c89aa097..8dfe3daf 100644 --- a/src/Makefile.am +++ b/src/Makefile.am @@ -197,7 +197,6 @@ SRCS = option_processing.cc\ NullSinkStreamFilter.cc NullSinkStreamFilter.h\ uri.cc uri.h\ uri_split.c uri_split.h\ - Triplet.h\ cookie_helper.cc cookie_helper.h\ json.cc json.h\ JsonParser.cc JsonParser.h\ diff --git a/src/RequestGroupMan.cc b/src/RequestGroupMan.cc index 437cc69b..0d8fb484 100644 --- a/src/RequestGroupMan.cc +++ b/src/RequestGroupMan.cc @@ -70,7 +70,6 @@ #include "Segment.h" #include "DlAbortEx.h" #include "uri.h" -#include "Triplet.h" #include "Signature.h" #include "OutputFile.h" #include "download_helper.h" @@ -920,45 +919,44 @@ bool RequestGroupMan::doesOverallUploadSpeedExceed() void RequestGroupMan::getUsedHosts (std::vector >& usedHosts) { - // vector of triplet which consists of use count, -download speed, + // vector of tuple which consists of use count, -download speed, // hostname. We want to sort by least used and faster download // speed. We use -download speed so that we can sort them using // operator<(). - std::vector > tempHosts; - for(RequestGroupList::const_iterator i = requestGroups_.begin(), - eoi = requestGroups_.end(); i != eoi; ++i) { - const std::shared_ptr& rg = *i; - const FileEntry::InFlightRequestSet& inFlightReqs = + std::vector > tempHosts; + for(const auto& rg : requestGroups_) { + const auto& inFlightReqs = rg->getDownloadContext()->getFirstFileEntry()->getInFlightRequests(); - for(FileEntry::InFlightRequestSet::iterator j = - inFlightReqs.begin(), eoj = inFlightReqs.end(); j != eoj; ++j) { + for(const auto& req : inFlightReqs) { uri_split_result us; - if(uri_split(&us, (*j)->getUri().c_str()) == 0) { - std::vector >::iterator k; - std::vector >::iterator eok = - tempHosts.end(); + if(uri_split(&us, req->getUri().c_str()) == 0) { std::string host = uri::getFieldString(us, USR_HOST, - (*j)->getUri().c_str()); - for(k = tempHosts.begin(); k != eok; ++k) { - if((*k).third == host) { - ++(*k).first; + req->getUri().c_str()); + auto k = tempHosts.begin(); + auto eok = tempHosts.end(); + for(; k != eok; ++k) { + if(std::get<2>(*k) == host) { + ++std::get<0>(*k); break; } } if(k == eok) { std::string protocol = uri::getFieldString(us, USR_SCHEME, - (*j)->getUri().c_str()); - std::shared_ptr ss = findServerStat(host, protocol); + req->getUri().c_str()); + auto ss = findServerStat(host, protocol); int invDlSpeed = (ss && ss->isOK()) ? -(static_cast(ss->getDownloadSpeed())) : 0; - tempHosts.push_back(makeTriplet(1, invDlSpeed, host)); + tempHosts.emplace_back(1, invDlSpeed, host); } } } } std::sort(tempHosts.begin(), tempHosts.end()); std::transform(tempHosts.begin(), tempHosts.end(), - std::back_inserter(usedHosts), Tuple2Pair<1, 3>()); + std::back_inserter(usedHosts), + [](const std::tuple& x) { + return std::make_pair(std::get<0>(x), std::get<2>(x)); + }); } void RequestGroupMan::setUriListParser diff --git a/src/Triplet.h b/src/Triplet.h deleted file mode 100644 index ef6ced6c..00000000 --- a/src/Triplet.h +++ /dev/null @@ -1,150 +0,0 @@ -/* */ -#ifndef D_TRIPLET_H -#define D_TRIPLET_H - -#include -#include - -namespace aria2 { - -template -struct Triplet { - typedef T1 first_type; - typedef T2 second_type; - typedef T3 third_type; - - T1 first; - T2 second; - T3 third; - - Triplet() {} - - Triplet(const T1& t1, const T2& t2, const T3& t3): - first(t1), second(t2), third(t3) {} - - template - Triplet(const Triplet& t): - first(t.first), second(t.second), third(t.third) {} - - Triplet& operator=(const Triplet& tri) - { - if(this != &tri) { - first = tri.first; - second = tri.second; - third = tri.third; - } - return *this; - } -}; - -template -bool operator<(const Triplet& lhs, const Triplet& rhs) -{ - return lhs.first < rhs.first || - (!(rhs.first < lhs.first) && (lhs.second < rhs.second || - (!(rhs.second < lhs.second) && - lhs.third < rhs.third))); -} - -template -Triplet makeTriplet(const T1& t1, const T2& t2, const T3& t3) -{ - return Triplet(t1, t2, t3); -} - -template -struct TupleNthType; - -template -struct TupleNthType { - typedef typename Tuple::first_type type; -}; - -template -struct TupleNthType { - typedef typename Tuple::second_type type; -}; - -template -struct TupleNthType { - typedef typename Tuple::third_type type; -}; - -template -struct TupleGet; - -template<> -struct TupleGet<1> { - template - static typename TupleNthType::type get(const Tuple& tri) - { - return tri.first; - } -}; - -template<> -struct TupleGet<2> { - template - static typename TupleNthType::type get(const Tuple& tri) - { - return tri.second; - } -}; - -template<> -struct TupleGet<3> { - template - static typename TupleNthType::type get(const Tuple& tri) - { - return tri.third; - } -}; - -template -class Tuple2Pair { -public: - template - std::pair::type, - typename TupleNthType::type> - operator()(const Tuple& tri) const - { - return std::make_pair(TupleGet::get(tri), TupleGet::get(tri)); - } -}; - -} // namespace aria2 - -#endif // D_TRIPLET_H diff --git a/test/Makefile.am b/test/Makefile.am index 085bee05..384efe86 100644 --- a/test/Makefile.am +++ b/test/Makefile.am @@ -71,7 +71,6 @@ aria2c_SOURCES = AllTest.cc\ UriTest.cc\ UriSplitTest.cc\ MockSegment.h\ - TripletTest.cc\ CookieHelperTest.cc\ JsonTest.cc\ ValueBaseJsonParserTest.cc\ diff --git a/test/TripletTest.cc b/test/TripletTest.cc deleted file mode 100644 index 10dbee82..00000000 --- a/test/TripletTest.cc +++ /dev/null @@ -1,77 +0,0 @@ -#include "Triplet.h" - -#include - -namespace aria2 { - -class TripletTest:public CppUnit::TestFixture { - - CPPUNIT_TEST_SUITE(TripletTest); - CPPUNIT_TEST(testLess); - CPPUNIT_TEST(testTupleGet); - CPPUNIT_TEST(testTupleNthType); - CPPUNIT_TEST(testTuple2Pair); - CPPUNIT_TEST_SUITE_END(); -public: - void setUp() {} - - void tearDown() {} - - void testLess(); - void testTupleGet(); - void testTupleNthType(); - void testTuple2Pair(); -}; - -CPPUNIT_TEST_SUITE_REGISTRATION(TripletTest); - -void TripletTest::testLess() -{ - Triplet tri1(0, 1, 1); - Triplet tri2(1, 0, 0); - CPPUNIT_ASSERT(!(tri1 < tri1)); - CPPUNIT_ASSERT(tri1 < tri2); - CPPUNIT_ASSERT(!(tri2 < tri1)); - - Triplet tri3(0, 0, 1); - Triplet tri4(0, 1, 0); - CPPUNIT_ASSERT(tri3 < tri4); - CPPUNIT_ASSERT(!(tri4 < tri3)); - - Triplet tri5(0, 0, 0); - Triplet tri6(0, 0, 1); - CPPUNIT_ASSERT(tri5 < tri6); - CPPUNIT_ASSERT(!(tri6 < tri5)); -} - -void TripletTest::testTupleGet() -{ - Triplet x(1, 3.14, "foo"); - CPPUNIT_ASSERT_EQUAL(1, (TupleGet<1>::get(x))); - CPPUNIT_ASSERT_EQUAL((double)3.14, (TupleGet<2>::get(x))); - CPPUNIT_ASSERT_EQUAL(std::string("foo"), (TupleGet<3>::get(x))); -} - -void TripletTest::testTupleNthType() -{ - TupleNthType, 1>::type x = 1; - CPPUNIT_ASSERT_EQUAL(1, x); - TupleNthType, 2>::type y = 3.14; - CPPUNIT_ASSERT_EQUAL((double)3.14, y); - TupleNthType, 3>::type z = "foo"; - CPPUNIT_ASSERT_EQUAL(std::string("foo"), z); -} - -void TripletTest::testTuple2Pair() -{ - Triplet x(1, 3.14, "foo"); - std::pair p1 = Tuple2Pair<1, 2>()(x); - CPPUNIT_ASSERT_EQUAL(1, p1.first); - CPPUNIT_ASSERT_EQUAL((double)3.14, p1.second); - - std::pair p2 = Tuple2Pair<2, 3>()(x); - CPPUNIT_ASSERT_EQUAL((double)3.14, p2.first); - CPPUNIT_ASSERT_EQUAL(std::string("foo"), p2.second); -} - -} // namespace aria2