2010-02-28 Tatsuhiro Tsujikawa <t-tujikawa@users.sourceforge.net>

Use vector instead of deque for MetalinkEntry and MetalinkResource
	objects.
	* src/Metalink2RequestGroup.cc
	* src/Metalink2RequestGroup.h
	* src/MetalinkEntry.cc
	* src/MetalinkEntry.h
	* src/MetalinkHelper.cc
	* src/MetalinkHelper.h
	* src/Metalinker.cc
	* src/Metalinker.h
	* src/main.cc
	* test/MetalinkEntryTest.cc
	* test/MetalinkHelperTest.cc
	* test/MetalinkProcessorTest.cc
	* test/MetalinkerTest.cc
pull/1/head
Tatsuhiro Tsujikawa 2010-02-27 15:14:40 +00:00
parent 0c62e90730
commit 88656eb14e
14 changed files with 72 additions and 45 deletions

View File

@ -1,3 +1,21 @@
2010-02-28 Tatsuhiro Tsujikawa <t-tujikawa@users.sourceforge.net>
Use vector instead of deque for MetalinkEntry and MetalinkResource
objects.
* src/Metalink2RequestGroup.cc
* src/Metalink2RequestGroup.h
* src/MetalinkEntry.cc
* src/MetalinkEntry.h
* src/MetalinkHelper.cc
* src/MetalinkHelper.h
* src/Metalinker.cc
* src/Metalinker.h
* src/main.cc
* test/MetalinkEntryTest.cc
* test/MetalinkHelperTest.cc
* test/MetalinkProcessorTest.cc
* test/MetalinkerTest.cc
2010-02-28 Tatsuhiro Tsujikawa <t-tujikawa@users.sourceforge.net>
Fixed the bug that grouped FileEntry objects are not used but

View File

@ -107,7 +107,7 @@ Metalink2RequestGroup::generate(std::deque<SharedHandle<RequestGroup> >& groups,
const std::string& metalinkFile,
const SharedHandle<Option>& option)
{
std::deque<SharedHandle<MetalinkEntry> > entries;
std::vector<SharedHandle<MetalinkEntry> > entries;
MetalinkHelper::parseAndQuery(entries, metalinkFile, option.get());
createRequestGroup(groups, entries, option);
}
@ -117,7 +117,7 @@ Metalink2RequestGroup::generate(std::deque<SharedHandle<RequestGroup> >& groups,
const SharedHandle<BinaryStream>& binaryStream,
const SharedHandle<Option>& option)
{
std::deque<SharedHandle<MetalinkEntry> > entries;
std::vector<SharedHandle<MetalinkEntry> > entries;
MetalinkHelper::parseAndQuery(entries, binaryStream, option.get());
createRequestGroup(groups, entries, option);
}
@ -136,7 +136,7 @@ void removeMetalinkContentTypes(const SharedHandle<RequestGroup>& group)
void
Metalink2RequestGroup::createRequestGroup
(std::deque<SharedHandle<RequestGroup> >& groups,
const std::deque<SharedHandle<MetalinkEntry> >& entries,
const std::vector<SharedHandle<MetalinkEntry> >& entries,
const SharedHandle<Option>& option)
{
if(entries.empty()) {
@ -149,7 +149,7 @@ Metalink2RequestGroup::createRequestGroup
std::vector<SharedHandle<MetalinkEntry> > selectedEntries;
selectedEntries.reserve(entries.size());
std::deque<std::string> locations;
std::vector<std::string> locations;
if(option->defined(PREF_METALINK_LOCATION)) {
util::split(option->get(PREF_METALINK_LOCATION),
std::back_inserter(locations), ",", true);
@ -162,7 +162,7 @@ Metalink2RequestGroup::createRequestGroup
}
{
int32_t count = 1;
for(std::deque<SharedHandle<MetalinkEntry> >::const_iterator i =
for(std::vector<SharedHandle<MetalinkEntry> >::const_iterator i =
entries.begin(); i != entries.end(); ++i, ++count) {
(*i)->dropUnsupportedResource();
if((*i)->resources.empty() && (*i)->metaurls.empty()) {

View File

@ -39,6 +39,7 @@
#include "SharedHandle.h"
#include <string>
#include <deque>
#include <vector>
namespace aria2 {
@ -54,7 +55,7 @@ private:
void
createRequestGroup(std::deque<SharedHandle<RequestGroup> >& groups,
const std::deque<SharedHandle<MetalinkEntry> >& entries,
const std::vector<SharedHandle<MetalinkEntry> >& entries,
const SharedHandle<Option>& option);
public:
Metalink2RequestGroup();

View File

@ -59,11 +59,11 @@ MetalinkEntry::~MetalinkEntry() {}
class AddLocationPriority {
private:
std::deque<std::string> _locations;
std::vector<std::string> _locations;
int _priorityToAdd;
public:
AddLocationPriority
(const std::deque<std::string>& locations, int priorityToAdd):
(const std::vector<std::string>& locations, int priorityToAdd):
_locations(locations), _priorityToAdd(priorityToAdd)
{
std::sort(_locations.begin(), _locations.end());
@ -105,7 +105,7 @@ uint64_t MetalinkEntry::getLength() const
}
void MetalinkEntry::setLocationPriority
(const std::deque<std::string>& locations, int priorityToAdd)
(const std::vector<std::string>& locations, int priorityToAdd)
{
std::for_each(resources.begin(), resources.end(),
AddLocationPriority(locations, priorityToAdd));
@ -183,8 +183,8 @@ void MetalinkEntry::dropUnsupportedResource() {
}
void MetalinkEntry::toFileEntry
(std::deque<SharedHandle<FileEntry> >& fileEntries,
const std::deque<SharedHandle<MetalinkEntry> >& metalinkEntries)
(std::vector<SharedHandle<FileEntry> >& fileEntries,
const std::vector<SharedHandle<MetalinkEntry> >& metalinkEntries)
{
std::transform(metalinkEntries.begin(), metalinkEntries.end(),
std::back_inserter(fileEntries),

View File

@ -38,7 +38,6 @@
#include "common.h"
#include <string>
#include <deque>
#include <vector>
#include <algorithm>
@ -63,7 +62,7 @@ public:
std::vector<std::string> oses;
// True if size is specified in Metalink document.
bool sizeKnown;
std::deque<SharedHandle<MetalinkResource> > resources;
std::vector<SharedHandle<MetalinkResource> > resources;
std::vector<SharedHandle<MetalinkMetaurl> > metaurls;
int maxConnections; // Metalink3Spec
#ifdef ENABLE_MESSAGE_DIGEST
@ -106,13 +105,13 @@ public:
}
void setLocationPriority
(const std::deque<std::string>& locations, int priorityToAdd);
(const std::vector<std::string>& locations, int priorityToAdd);
void setProtocolPriority(const std::string& protocol, int priorityToAdd);
static void toFileEntry
(std::deque<SharedHandle<FileEntry> >& fileEntries,
const std::deque<SharedHandle<MetalinkEntry> >& metalinkEntries);
(std::vector<SharedHandle<FileEntry> >& fileEntries,
const std::vector<SharedHandle<MetalinkEntry> >& metalinkEntries);
void setSignature(const SharedHandle<Signature>& signature);

View File

@ -50,7 +50,7 @@ MetalinkHelper::MetalinkHelper() {}
MetalinkHelper::~MetalinkHelper() {}
void MetalinkHelper::parseAndQuery
(std::deque<SharedHandle<MetalinkEntry> >& result,
(std::vector<SharedHandle<MetalinkEntry> >& result,
const std::string& filename, const Option* option)
{
MetalinkProcessor proc;
@ -59,7 +59,7 @@ void MetalinkHelper::parseAndQuery
}
void MetalinkHelper::parseAndQuery
(std::deque<SharedHandle<MetalinkEntry> >& result,
(std::vector<SharedHandle<MetalinkEntry> >& result,
const SharedHandle<BinaryStream>& binaryStream, const Option* option)
{
MetalinkProcessor proc;
@ -68,7 +68,7 @@ void MetalinkHelper::parseAndQuery
}
void MetalinkHelper::query
(std::deque<SharedHandle<MetalinkEntry> >& result,
(std::vector<SharedHandle<MetalinkEntry> >& result,
const SharedHandle<Metalinker>& metalinker, const Option* option)
{
if(metalinker->entries.empty()) {

View File

@ -38,7 +38,6 @@
#include "common.h"
#include <string>
#include <deque>
#include <vector>
#include "SharedHandle.h"
@ -57,16 +56,16 @@ private:
~MetalinkHelper();
static void query
(std::deque<SharedHandle<MetalinkEntry> >& result,
(std::vector<SharedHandle<MetalinkEntry> >& result,
const SharedHandle<Metalinker>& metalinker, const Option* option);
public:
static void parseAndQuery
(std::deque<SharedHandle<MetalinkEntry> >& result,
(std::vector<SharedHandle<MetalinkEntry> >& result,
const std::string& filename, const Option* option);
static void parseAndQuery
(std::deque<SharedHandle<MetalinkEntry> >& result,
(std::vector<SharedHandle<MetalinkEntry> >& result,
const SharedHandle<BinaryStream>& binaryStream, const Option* option);
static void groupEntryByMetaurlName

View File

@ -76,7 +76,7 @@ public:
};
void Metalinker::queryEntry
(std::deque<SharedHandle<MetalinkEntry> >& queryResult,
(std::vector<SharedHandle<MetalinkEntry> >& queryResult,
const std::string& version,
const std::string& language,
const std::string& os) const

View File

@ -36,9 +36,11 @@
#define _D_METALINKER_H_
#include "common.h"
#include "SharedHandle.h"
#include <string>
#include <deque>
#include <vector>
#include "SharedHandle.h"
namespace aria2 {
@ -46,7 +48,7 @@ class MetalinkEntry;
class Metalinker {
public:
std::deque<SharedHandle<MetalinkEntry> > entries;
std::vector<SharedHandle<MetalinkEntry> > entries;
public:
Metalinker();
~Metalinker();
@ -59,7 +61,7 @@ public:
}
void queryEntry
(std::deque<SharedHandle<MetalinkEntry> >& queryResult,
(std::vector<SharedHandle<MetalinkEntry> >& queryResult,
const std::string& version,
const std::string& language,
const std::string& os) const;

View File

@ -121,9 +121,9 @@ static void showTorrentFile(const std::string& uri)
static void showMetalinkFile
(const std::string& uri, const SharedHandle<Option>& op)
{
std::deque<SharedHandle<MetalinkEntry> > metalinkEntries;
std::vector<SharedHandle<MetalinkEntry> > metalinkEntries;
MetalinkHelper::parseAndQuery(metalinkEntries, uri, op.get());
std::deque<SharedHandle<FileEntry> > fileEntries;
std::vector<SharedHandle<FileEntry> > fileEntries;
MetalinkEntry::toFileEntry(fileEntries, metalinkEntries);
util::toStream(fileEntries.begin(), fileEntries.end(), std::cout);
std::cout << std::endl;

View File

@ -79,7 +79,7 @@ void MetalinkEntryTest::testDropUnsupportedResource() {
CPPUNIT_ASSERT_EQUAL((size_t)2, entry->resources.size());
#endif // ENABLE_MESSAGE_DIGEST
std::deque<SharedHandle<MetalinkResource> >::const_iterator itr =
std::vector<SharedHandle<MetalinkResource> >::const_iterator itr =
entry->resources.begin();
CPPUNIT_ASSERT_EQUAL(MetalinkResource::TYPE_FTP,
(*itr++)->type);
@ -113,7 +113,7 @@ void MetalinkEntryTest::testSetLocationPriority()
const char* locationsSrc[] = { "jp", "al", "ro" };
std::deque<std::string> locations(&locationsSrc[0], &locationsSrc[3]);
std::vector<std::string> locations(&locationsSrc[0], &locationsSrc[3]);
entry->setLocationPriority(locations, -100);

View File

@ -30,7 +30,7 @@ CPPUNIT_TEST_SUITE_REGISTRATION( MetalinkHelperTest );
void MetalinkHelperTest::testParseAndQuery()
{
Option option;
std::deque<SharedHandle<MetalinkEntry> > result;
std::vector<SharedHandle<MetalinkEntry> > result;
MetalinkHelper::parseAndQuery(result, "test.xml", &option);
CPPUNIT_ASSERT_EQUAL((size_t)5, result.size());
}
@ -39,7 +39,7 @@ void MetalinkHelperTest::testParseAndQuery_version()
{
Option option;
option.put(PREF_METALINK_VERSION, "0.5.1");
std::deque<SharedHandle<MetalinkEntry> > result;
std::vector<SharedHandle<MetalinkEntry> > result;
MetalinkHelper::parseAndQuery(result, "test.xml", &option);
CPPUNIT_ASSERT_EQUAL((size_t)1, result.size());
SharedHandle<MetalinkEntry> entry = result.front();

View File

@ -147,7 +147,7 @@ void MetalinkProcessorTest::testParseFileV4_attrs()
MetalinkProcessor proc;
SharedHandle<Metalinker> m = proc.parseFile("metalink4-attrs.xml");
CPPUNIT_ASSERT_EQUAL((size_t)1, m->entries.size());
std::deque<SharedHandle<MetalinkResource> > resources =
std::vector<SharedHandle<MetalinkResource> > resources =
m->entries[0]->resources;
CPPUNIT_ASSERT_EQUAL((size_t)3, resources.size());
CPPUNIT_ASSERT_EQUAL(999999, resources[0]->priority);
@ -172,7 +172,8 @@ void MetalinkProcessorTest::testParseFile()
try {
SharedHandle<Metalinker> metalinker = proc.parseFile("test.xml");
std::deque<SharedHandle<MetalinkEntry> >::iterator entryItr = metalinker->entries.begin();
std::vector<SharedHandle<MetalinkEntry> >::iterator entryItr =
metalinker->entries.begin();
SharedHandle<MetalinkEntry> entry1 = *entryItr;
CPPUNIT_ASSERT_EQUAL(std::string("aria2-0.5.2.tar.bz2"), entry1->getPath());
@ -202,7 +203,8 @@ void MetalinkProcessorTest::testParseFile()
"-----END PGP SIGNATURE-----"),
entry1->getSignature()->getBody());
std::deque<SharedHandle<MetalinkResource> >::iterator resourceItr1 = entry1->resources.begin();
std::vector<SharedHandle<MetalinkResource> >::iterator resourceItr1 =
entry1->resources.begin();
SharedHandle<MetalinkResource> resource1 = *resourceItr1;
CPPUNIT_ASSERT_EQUAL(MetalinkResource::TYPE_FTP, resource1->type);
CPPUNIT_ASSERT_EQUAL(std::string("jp"), resource1->location);
@ -294,7 +296,8 @@ void MetalinkProcessorTest::testParseFromBinaryStream()
try {
SharedHandle<Metalinker> m = proc.parseFromBinaryStream(dw);
std::deque<SharedHandle<MetalinkEntry> >::iterator entryItr = m->entries.begin();
std::vector<SharedHandle<MetalinkEntry> >::iterator entryItr =
m->entries.begin();
SharedHandle<MetalinkEntry> entry1 = *entryItr;
CPPUNIT_ASSERT_EQUAL(std::string("aria2-0.5.2.tar.bz2"), entry1->getPath());
} catch(Exception& e) {
@ -348,7 +351,8 @@ void MetalinkProcessorTest::testBadSize()
try {
SharedHandle<Metalinker> m = proc.parseFromBinaryStream(dw);
std::deque<SharedHandle<MetalinkEntry> >::iterator entryItr = m->entries.begin();
std::vector<SharedHandle<MetalinkEntry> >::iterator entryItr =
m->entries.begin();
SharedHandle<MetalinkEntry> e = *entryItr;
CPPUNIT_ASSERT_EQUAL(std::string("aria2-0.5.2.tar.bz2"), e->getPath());
CPPUNIT_ASSERT_EQUAL((uint64_t)0ULL, e->getLength());
@ -380,7 +384,8 @@ void MetalinkProcessorTest::testBadMaxConn()
try {
SharedHandle<Metalinker> m = proc.parseFromBinaryStream(dw);
std::deque<SharedHandle<MetalinkEntry> >::iterator entryItr = m->entries.begin();
std::vector<SharedHandle<MetalinkEntry> >::iterator entryItr =
m->entries.begin();
SharedHandle<MetalinkEntry> e = *entryItr;
CPPUNIT_ASSERT_EQUAL((uint64_t)43743838ULL, e->getLength());
} catch(Exception& e) {
@ -412,7 +417,8 @@ void MetalinkProcessorTest::testNoName()
try {
SharedHandle<Metalinker> m = proc.parseFromBinaryStream(dw);
CPPUNIT_ASSERT_EQUAL((size_t)1, m->entries.size());
std::deque<SharedHandle<MetalinkEntry> >::iterator entryItr = m->entries.begin();
std::vector<SharedHandle<MetalinkEntry> >::iterator entryItr =
m->entries.begin();
SharedHandle<MetalinkEntry> e = *entryItr;
CPPUNIT_ASSERT_EQUAL(std::string("aria2-0.5.2.tar.bz2"), e->getPath());
} catch(Exception& e) {

View File

@ -1,7 +1,9 @@
#include "Metalinker.h"
#include "MetalinkEntry.h"
#include <cppunit/extensions/HelperMacros.h>
#include "MetalinkEntry.h"
namespace aria2 {
class MetalinkerTest:public CppUnit::TestFixture {
@ -44,7 +46,7 @@ void MetalinkerTest::testQueryEntry() {
language = "ja-JP";
os = "Linux-m68k";
{
std::deque<SharedHandle<MetalinkEntry> > result;
std::vector<SharedHandle<MetalinkEntry> > result;
metalinker->queryEntry(result, version, language, os);
CPPUNIT_ASSERT_EQUAL((size_t)1, result.size());
CPPUNIT_ASSERT_EQUAL(std::string("0.5.1"), result.at(0)->version);
@ -55,7 +57,7 @@ void MetalinkerTest::testQueryEntry() {
language = "";
os = "";
{
std::deque<SharedHandle<MetalinkEntry> > result;
std::vector<SharedHandle<MetalinkEntry> > result;
metalinker->queryEntry(result, version, language, os);
CPPUNIT_ASSERT_EQUAL((size_t)0, result.size());
}
@ -64,7 +66,7 @@ void MetalinkerTest::testQueryEntry() {
language = "";
os = "";
{
std::deque<SharedHandle<MetalinkEntry> > result;
std::vector<SharedHandle<MetalinkEntry> > result;
metalinker->queryEntry(result, version, language, os);
CPPUNIT_ASSERT_EQUAL((size_t)1, result.size());
CPPUNIT_ASSERT_EQUAL(std::string("0.5.2"), result.at(0)->version);