2008-12-14 Tatsuhiro Tsujikawa <t-tujikawa@users.sourceforge.net>

Use BDE instead of Dictionary/List/Data.
	* src/AnnounceList.cc
	* src/AnnounceList.h
	* test/AnnounceListTest.cc
pull/1/head
Tatsuhiro Tsujikawa 2008-12-14 10:07:40 +00:00
parent 9202fe23c8
commit 9614ee2fef
4 changed files with 48 additions and 47 deletions

View File

@ -1,3 +1,10 @@
2008-12-14 Tatsuhiro Tsujikawa <t-tujikawa@users.sourceforge.net>
Use BDE instead of Dictionary/List/Data.
* src/AnnounceList.cc
* src/AnnounceList.h
* test/AnnounceListTest.cc
2008-12-14 Tatsuhiro Tsujikawa <t-tujikawa@users.sourceforge.net>
Use BDE instead of Dictionary/List/Data.

View File

@ -36,10 +36,9 @@
#include <algorithm>
#include "List.h"
#include "Data.h"
#include "A2STR.h"
#include "SimpleRandomizer.h"
#include "bencode.h"
namespace aria2 {
@ -49,9 +48,9 @@ const std::string AnnounceList::STOPPED("stopped");
const std::string AnnounceList::COMPLETED("completed");
AnnounceList::AnnounceList(const MetaEntry* announceListEntry):
AnnounceList::AnnounceList(const bencode::BDE& announceList):
currentTrackerInitialized(false) {
reconfigure(announceListEntry);
reconfigure(announceList);
}
AnnounceList::AnnounceList(const AnnounceTiers& announceTiers):
@ -59,24 +58,24 @@ AnnounceList::AnnounceList(const AnnounceTiers& announceTiers):
resetIterator();
}
void AnnounceList::reconfigure(const MetaEntry* announceListEntry) {
const List* l = dynamic_cast<const List*>(announceListEntry);
if(l) {
for(std::deque<MetaEntry*>::const_iterator itr = l->getList().begin();
itr != l->getList().end(); itr++) {
const List* elem = dynamic_cast<const List*>(*itr);
if(!elem) {
void AnnounceList::reconfigure(const bencode::BDE& announceList)
{
if(announceList.isList()) {
for(bencode::BDE::List::const_iterator itr = announceList.listBegin();
itr != announceList.listEnd(); ++itr) {
const bencode::BDE& elemList = *itr;
if(!elemList.isList()) {
continue;
}
std::deque<std::string> urls;
for(std::deque<MetaEntry*>::const_iterator elemItr = elem->getList().begin();
elemItr != elem->getList().end(); elemItr++) {
const Data* data = dynamic_cast<const Data*>(*elemItr);
if(data) {
urls.push_back(data->toString());
for(bencode::BDE::List::const_iterator elemItr = elemList.listBegin();
elemItr != elemList.listEnd(); ++elemItr) {
const bencode::BDE& data = *elemItr;
if(data.isString()) {
urls.push_back(data.s());
}
}
if(urls.size()) {
if(!urls.empty()) {
AnnounceTierHandle tier(new AnnounceTier(urls));
tiers.push_back(tier);
}

View File

@ -41,7 +41,9 @@
namespace aria2 {
class MetaEntry;
namespace bencode {
class BDE;
} // namespace bencode
class AnnounceList {
public:
@ -55,10 +57,10 @@ private:
void setCurrentTier(const std::deque<SharedHandle<AnnounceTier> >::iterator& itr);
public:
AnnounceList():currentTrackerInitialized(false) {}
AnnounceList(const MetaEntry* announceListEntry);
AnnounceList(const bencode::BDE& announceList);
AnnounceList(const std::deque<SharedHandle<AnnounceTier> >& tiers);
void reconfigure(const MetaEntry* announceListEntry);
void reconfigure(const bencode::BDE& announceList);
void reconfigure(const std::string& url);
size_t countTier() const {

View File

@ -1,9 +1,10 @@
#include "AnnounceList.h"
#include "MetaFileUtil.h"
#include "Exception.h"
#include "List.h"
#include <cppunit/extensions/HelperMacros.h>
#include "Exception.h"
#include "bencode.h"
namespace aria2 {
class AnnounceListTest:public CppUnit::TestFixture {
@ -43,12 +44,11 @@ CPPUNIT_TEST_SUITE_REGISTRATION( AnnounceListTest );
void AnnounceListTest::testSingleElementList() {
std::string peersString = "ll8:tracker1el8:tracker2el8:tracker3ee";
SharedHandle<List> announces
(dynamic_cast<List*>(MetaFileUtil::bdecoding(peersString)));
const bencode::BDE announcesList = bencode::decode(peersString);
// ANNOUNCE_LIST
// [ [ tracker1 ], [ tracker2 ], [ tracker3 ] ]
AnnounceList announceList(announces.get());
AnnounceList announceList(announcesList);
CPPUNIT_ASSERT(!announceList.allTiersFailed());
std::string url = announceList.getAnnounce();
@ -90,12 +90,11 @@ void AnnounceListTest::testSingleElementList() {
void AnnounceListTest::testMultiElementList() {
std::string peersString = "ll8:tracker18:tracker28:tracker3ee";
SharedHandle<List> announces
(dynamic_cast<List*>(MetaFileUtil::bdecoding(peersString)));
const bencode::BDE announcesList = bencode::decode(peersString);
// ANNOUNCE_LIST
// [ [ tracker1, tracker2, tracker3 ] ]
AnnounceList announceList(announces.get());
AnnounceList announceList(announcesList);
CPPUNIT_ASSERT(!announceList.allTiersFailed());
std::string url = announceList.getAnnounce();
@ -124,12 +123,11 @@ void AnnounceListTest::testMultiElementList() {
void AnnounceListTest::testSingleAndMulti() {
std::string peersString = "ll8:tracker18:tracker2el8:tracker3ee";
SharedHandle<List> announces
(dynamic_cast<List*>(MetaFileUtil::bdecoding(peersString)));
const bencode::BDE announcesList = bencode::decode(peersString);
// ANNOUNCE_LIST
// [ [ tracker1, tracker2 ], [ tracker3 ] ]
AnnounceList announceList(announces.get());
AnnounceList announceList(announcesList);
std::string url = announceList.getAnnounce();
CPPUNIT_ASSERT_EQUAL(std::string("tracker1"), url);
@ -151,22 +149,20 @@ void AnnounceListTest::testSingleAndMulti() {
void AnnounceListTest::testNoGroup() {
std::string peersString = "llee";
SharedHandle<List> announces
(dynamic_cast<List*>(MetaFileUtil::bdecoding(peersString)));
const bencode::BDE announcesList = bencode::decode(peersString);
AnnounceList announceList(announces.get());
AnnounceList announceList(announcesList);
CPPUNIT_ASSERT(announceList.countTier() == 0);
}
void AnnounceListTest::testNextEventIfAfterStarted() {
std::string peersString = "ll8:tracker1ee";
SharedHandle<List> announces
(dynamic_cast<List*>(MetaFileUtil::bdecoding(peersString)));
const bencode::BDE announcesList = bencode::decode(peersString);
// ANNOUNCE_LIST
// [ [ tracker1 ] ]
AnnounceList announceList(announces.get());
AnnounceList announceList(announcesList);
announceList.setEvent(AnnounceTier::STOPPED);
announceList.announceFailure();
announceList.resetTier();
@ -182,12 +178,11 @@ void AnnounceListTest::testNextEventIfAfterStarted() {
void AnnounceListTest::testEvent() {
std::string peersString = "ll8:tracker1el8:tracker2el8:tracker3ee";
SharedHandle<List> announces
(dynamic_cast<List*>(MetaFileUtil::bdecoding(peersString)));
const bencode::BDE announcesList = bencode::decode(peersString);
// ANNOUNCE_LIST
// [ [ tracker1 ], [ tracker2 ], [ tracker3 ] ]
AnnounceList announceList(announces.get());
AnnounceList announceList(announcesList);
announceList.setEvent(AnnounceTier::STOPPED);
announceList.announceSuccess();
@ -207,12 +202,11 @@ void AnnounceListTest::testEvent() {
void AnnounceListTest::testCountStoppedAllowedTier() {
std::string peersString = "ll8:tracker1el8:tracker2el8:tracker3ee";
SharedHandle<List> announces
(dynamic_cast<List*>(MetaFileUtil::bdecoding(peersString)));
const bencode::BDE announcesList = bencode::decode(peersString);
// ANNOUNCE_LIST
// [ [ tracker1 ], [ tracker2 ], [ tracker3 ] ]
AnnounceList announceList(announces.get());
AnnounceList announceList(announcesList);
CPPUNIT_ASSERT_EQUAL((size_t)0, announceList.countStoppedAllowedTier());
announceList.setEvent(AnnounceTier::STARTED);
@ -235,12 +229,11 @@ void AnnounceListTest::testCountStoppedAllowedTier() {
void AnnounceListTest::testCountCompletedAllowedTier() {
std::string peersString = "ll8:tracker1el8:tracker2el8:tracker3ee";
SharedHandle<List> announces
(dynamic_cast<List*>(MetaFileUtil::bdecoding(peersString)));
const bencode::BDE announcesList = bencode::decode(peersString);
// ANNOUNCE_LIST
// [ [ tracker1 ], [ tracker2 ], [ tracker3 ] ]
AnnounceList announceList(announces.get());
AnnounceList announceList(announcesList);
CPPUNIT_ASSERT_EQUAL((size_t)0, announceList.countCompletedAllowedTier());
announceList.setEvent(AnnounceTier::STARTED);