2009-05-07 Tatsuhiro Tsujikawa <t-tujikawa@users.sourceforge.net>

Pass reference of Option object instead of pointer.
	* src/download_helper.cc
	* src/download_helper.h
	* src/main.cc
	* test/DownloadHelperTest.cc
pull/1/head
Tatsuhiro Tsujikawa 2009-05-07 08:52:38 +00:00
parent 40d5c1e763
commit ce9c79a2f3
5 changed files with 64 additions and 55 deletions

View File

@ -1,3 +1,11 @@
2009-05-07 Tatsuhiro Tsujikawa <t-tujikawa@users.sourceforge.net>
Pass reference of Option object instead of pointer.
* src/download_helper.cc
* src/download_helper.h
* src/main.cc
* test/DownloadHelperTest.cc
2009-05-07 Tatsuhiro Tsujikawa <t-tujikawa@users.sourceforge.net>
Don't retrieve PREF_MAX_DOWNLOAD_LIMIT and PREF_MAX_UPLOAD_LIMIT

View File

@ -92,13 +92,13 @@ static void splitURI(std::deque<std::string>& result,
}
static SharedHandle<RequestGroup> createRequestGroup
(const Option* op, const std::deque<std::string>& uris,
(const Option& op, const std::deque<std::string>& uris,
const Option& requestOption,
bool useOutOption = false)
{
SharedHandle<RequestGroup> rg(new RequestGroup(op, uris));
SharedHandle<RequestGroup> rg(new RequestGroup(&op, uris));
SharedHandle<SingleFileDownloadContext> dctx
(new SingleFileDownloadContext(op->getAsInt(PREF_SEGMENT_SIZE),
(new SingleFileDownloadContext(op.getAsInt(PREF_SEGMENT_SIZE),
0,
A2STR::NIL,
useOutOption&&!requestOption.blank(PREF_OUT)?
@ -114,16 +114,16 @@ static SharedHandle<RequestGroup> createRequestGroup
static
SharedHandle<RequestGroup>
createBtRequestGroup(const std::string& torrentFilePath,
Option* op,
const Option& op,
const std::deque<std::string>& auxUris,
const Option& requestOption)
{
SharedHandle<RequestGroup> rg(new RequestGroup(op, auxUris));
SharedHandle<RequestGroup> rg(new RequestGroup(&op, auxUris));
SharedHandle<DefaultBtContext> btContext(new DefaultBtContext());
btContext->setDir(requestOption.get(PREF_DIR));
btContext->load(torrentFilePath);// may throw exception
if(op->defined(PREF_PEER_ID_PREFIX)) {
btContext->setPeerIdPrefix(op->get(PREF_PEER_ID_PREFIX));
if(op.defined(PREF_PEER_ID_PREFIX)) {
btContext->setPeerIdPrefix(op.get(PREF_PEER_ID_PREFIX));
}
btContext->setFileFilter
(Util::parseIntRange(requestOption.get(PREF_SELECT_FILE)));
@ -141,21 +141,21 @@ createBtRequestGroup(const std::string& torrentFilePath,
}
void createRequestGroupForBitTorrent
(std::deque<SharedHandle<RequestGroup> >& result, Option* op,
(std::deque<SharedHandle<RequestGroup> >& result, const Option& op,
const std::deque<std::string>& uris)
{
std::deque<std::string> nargs;
if(op->get(PREF_PARAMETERIZED_URI) == V_TRUE) {
if(op.get(PREF_PARAMETERIZED_URI) == V_TRUE) {
unfoldURI(nargs, uris);
} else {
nargs = uris;
}
// we ignore -Z option here
size_t numSplit = op->getAsInt(PREF_SPLIT);
size_t numSplit = op.getAsInt(PREF_SPLIT);
std::deque<std::string> auxUris;
splitURI(auxUris, nargs.begin(), nargs.end(), numSplit);
SharedHandle<RequestGroup> rg =
createBtRequestGroup(op->get(PREF_TORRENT_FILE), op, auxUris, *op);
createBtRequestGroup(op.get(PREF_TORRENT_FILE), op, auxUris, op);
rg->setNumConcurrentCommand(numSplit);
result.push_back(rg);
}
@ -164,9 +164,9 @@ void createRequestGroupForBitTorrent
#ifdef ENABLE_METALINK
void createRequestGroupForMetalink
(std::deque<SharedHandle<RequestGroup> >& result, Option* op)
(std::deque<SharedHandle<RequestGroup> >& result, const Option& op)
{
Metalink2RequestGroup(op).generate(result, op->get(PREF_METALINK_FILE), *op);
Metalink2RequestGroup(&op).generate(result, op.get(PREF_METALINK_FILE), op);
if(result.empty()) {
throw FatalException(MSG_NO_FILES_TO_DOWNLOAD);
}
@ -177,11 +177,11 @@ class AccRequestGroup {
private:
std::deque<SharedHandle<RequestGroup> >& _requestGroups;
ProtocolDetector _detector;
Option* _op;
const Option& _op;
const Option& _requestOption;
public:
AccRequestGroup(std::deque<SharedHandle<RequestGroup> >& requestGroups,
Option* op,
const Option& op,
const Option& requestOption):
_requestGroups(requestGroups), _op(op), _requestOption(requestOption) {}
@ -190,7 +190,7 @@ public:
{
if(_detector.isStreamProtocol(uri)) {
std::deque<std::string> streamURIs;
size_t numSplit = _op->getAsInt(PREF_SPLIT);
size_t numSplit = _op.getAsInt(PREF_SPLIT);
for(size_t i = 0; i < numSplit; ++i) {
streamURIs.push_back(uri);
}
@ -215,7 +215,7 @@ public:
#ifdef ENABLE_METALINK
else if(_detector.guessMetalinkFile(uri)) {
try {
Metalink2RequestGroup(_op).generate(_requestGroups, uri,
Metalink2RequestGroup(&_op).generate(_requestGroups, uri,
_requestOption);
} catch(RecoverableException& e) {
// error occurred while parsing metalink file.
@ -247,16 +247,16 @@ static void copyIfndef(Option& dest, const Option& src, const std::string& name)
}
static void createRequestGroupForUri
(std::deque<SharedHandle<RequestGroup> >& result, Option* op,
(std::deque<SharedHandle<RequestGroup> >& result, const Option& op,
const std::deque<std::string>& uris, const Option& requestOption)
{
std::deque<std::string> nargs;
if(op->get(PREF_PARAMETERIZED_URI) == V_TRUE) {
if(op.get(PREF_PARAMETERIZED_URI) == V_TRUE) {
unfoldURI(nargs, uris);
} else {
nargs = uris;
}
if(op->get(PREF_FORCE_SEQUENTIAL) == V_TRUE) {
if(op.get(PREF_FORCE_SEQUENTIAL) == V_TRUE) {
std::for_each(nargs.begin(), nargs.end(),
AccRequestGroup(result, op, requestOption));
} else {
@ -264,7 +264,7 @@ static void createRequestGroupForUri
std::stable_partition(nargs.begin(), nargs.end(), StreamProtocolFilter());
// let's process http/ftp protocols first.
if(nargs.begin() != strmProtoEnd) {
size_t numSplit = op->getAsInt(PREF_SPLIT);
size_t numSplit = op.getAsInt(PREF_SPLIT);
std::deque<std::string> streamURIs;
splitURI(streamURIs, nargs.begin(), strmProtoEnd,
numSplit);
@ -280,10 +280,10 @@ static void createRequestGroupForUri
}
void createRequestGroupForUri
(std::deque<SharedHandle<RequestGroup> >& result, Option* op,
(std::deque<SharedHandle<RequestGroup> >& result, const Option& op,
const std::deque<std::string>& uris)
{
createRequestGroupForUri(result, op, uris, *op);
createRequestGroupForUri(result, op, uris, op);
}
template<typename InputIterator>
@ -296,7 +296,8 @@ static void foreachCopyIfndef(InputIterator first, InputIterator last,
}
static void createRequestGroupForUriList
(std::deque<SharedHandle<RequestGroup> >& result, Option* op, std::istream& in)
(std::deque<SharedHandle<RequestGroup> >& result, const Option& op,
std::istream& in)
{
UriListParser p(in);
while(p.hasNext()) {
@ -316,24 +317,24 @@ static void createRequestGroupForUriList
};
foreachCopyIfndef(&REQUEST_OPTIONS[0],
&REQUEST_OPTIONS[arrayLength(REQUEST_OPTIONS)],
requestOption, *op);
requestOption, op);
createRequestGroupForUri(result, op, uris, requestOption);
}
}
void createRequestGroupForUriList
(std::deque<SharedHandle<RequestGroup> >& result, Option* op)
(std::deque<SharedHandle<RequestGroup> >& result, const Option& op)
{
if(op->get(PREF_INPUT_FILE) == "-") {
if(op.get(PREF_INPUT_FILE) == "-") {
createRequestGroupForUriList(result, op, std::cin);
} else {
if(!File(op->get(PREF_INPUT_FILE)).isFile()) {
if(!File(op.get(PREF_INPUT_FILE)).isFile()) {
throw FatalException
(StringFormat(EX_FILE_OPEN, op->get(PREF_INPUT_FILE).c_str(),
(StringFormat(EX_FILE_OPEN, op.get(PREF_INPUT_FILE).c_str(),
"No such file").str());
}
std::ifstream f(op->get(PREF_INPUT_FILE).c_str(), std::ios::binary);
std::ifstream f(op.get(PREF_INPUT_FILE).c_str(), std::ios::binary);
createRequestGroupForUriList(result, op, f);
}
}

View File

@ -51,7 +51,7 @@ class Option;
// Create RequestGroup object using torrent file specified by torrent-file
// option. In this function, force-sequential is ignored.
void createRequestGroupForBitTorrent
(std::deque<SharedHandle<RequestGroup> >& result, Option* op,
(std::deque<SharedHandle<RequestGroup> >& result, const Option& op,
const std::deque<std::string>& uris);
#endif // ENABLE_BITTORRENT
@ -59,7 +59,7 @@ void createRequestGroupForBitTorrent
// Create RequestGroup objects using Metalink file specified by metalink-file
// option.
void createRequestGroupForMetalink
(std::deque<SharedHandle<RequestGroup> >& result, Option* op);
(std::deque<SharedHandle<RequestGroup> >& result, const Option& op);
#endif // ENABLE_METALINK
// Create RequestGroup objects from reading file specified by input-file option.
@ -68,11 +68,11 @@ void createRequestGroupForMetalink
// The additional out and dir options can be specified after each line of URIs.
// This optional line must start with white space(s).
void createRequestGroupForUriList
(std::deque<SharedHandle<RequestGroup> >& result, Option* op);
(std::deque<SharedHandle<RequestGroup> >& result, const Option& op);
// Create RequestGroup object using provided uris.
void createRequestGroupForUri
(std::deque<SharedHandle<RequestGroup> >& result, Option* op,
(std::deque<SharedHandle<RequestGroup> >& result, const Option& op,
const std::deque<std::string>& uris);
} // namespace aria2

View File

@ -115,10 +115,10 @@ static void showTorrentFile(const std::string& uri)
#endif // ENABLE_BITTORRENT
#ifdef ENABLE_METALINK
static void showMetalinkFile(const std::string& uri, const Option* op)
static void showMetalinkFile(const std::string& uri, const Option& op)
{
std::deque<SharedHandle<MetalinkEntry> > metalinkEntries;
MetalinkHelper::parseAndQuery(metalinkEntries, uri, op);
MetalinkHelper::parseAndQuery(metalinkEntries, uri, &op);
std::deque<SharedHandle<FileEntry> > fileEntries;
MetalinkEntry::toFileEntry(fileEntries, metalinkEntries);
Util::toStream(std::cout, fileEntries);
@ -127,7 +127,7 @@ static void showMetalinkFile(const std::string& uri, const Option* op)
#endif // ENABLE_METALINK
#if defined ENABLE_BITTORRENT || defined ENABLE_METALINK
static void showFiles(const std::deque<std::string>& uris, const Option* op)
static void showFiles(const std::deque<std::string>& uris, const Option& op)
{
ProtocolDetector dt;
for(std::deque<std::string>::const_iterator i = uris.begin();
@ -210,7 +210,7 @@ DownloadResult::RESULT main(int argc, char* argv[])
showTorrentFile(op.get(PREF_TORRENT_FILE));
return exitStatus;
} else {
createRequestGroupForBitTorrent(requestGroups, &op, args);
createRequestGroupForBitTorrent(requestGroups, op, args);
}
}
else
@ -218,22 +218,22 @@ DownloadResult::RESULT main(int argc, char* argv[])
#ifdef ENABLE_METALINK
if(!op.blank(PREF_METALINK_FILE)) {
if(op.get(PREF_SHOW_FILES) == V_TRUE) {
showMetalinkFile(op.get(PREF_METALINK_FILE), &op);
showMetalinkFile(op.get(PREF_METALINK_FILE), op);
return exitStatus;
} else {
createRequestGroupForMetalink(requestGroups, &op);
createRequestGroupForMetalink(requestGroups, op);
}
}
else
#endif // ENABLE_METALINK
if(!op.blank(PREF_INPUT_FILE)) {
createRequestGroupForUriList(requestGroups, &op);
createRequestGroupForUriList(requestGroups, op);
#if defined ENABLE_BITTORRENT || defined ENABLE_METALINK
} else if(op.get(PREF_SHOW_FILES) == V_TRUE) {
showFiles(args, &op);
showFiles(args, op);
#endif // ENABLE_METALINK || ENABLE_METALINK
} else {
createRequestGroupForUri(requestGroups, &op, args);
createRequestGroupForUri(requestGroups, op, args);
}
if(requestGroups.empty()) {

View File

@ -73,7 +73,7 @@ void DownloadHelperTest::testCreateRequestGroupForUri()
{
std::deque<SharedHandle<RequestGroup> > result;
createRequestGroupForUri(result, &op, uris);
createRequestGroupForUri(result, op, uris);
CPPUNIT_ASSERT_EQUAL((size_t)1, result.size());
SharedHandle<RequestGroup> group = result[0];
@ -93,7 +93,7 @@ void DownloadHelperTest::testCreateRequestGroupForUri()
{
std::deque<SharedHandle<RequestGroup> > result;
createRequestGroupForUri(result, &op, uris);
createRequestGroupForUri(result, op, uris);
CPPUNIT_ASSERT_EQUAL((size_t)1, result.size());
SharedHandle<RequestGroup> group = result[0];
@ -112,7 +112,7 @@ void DownloadHelperTest::testCreateRequestGroupForUri()
{
std::deque<SharedHandle<RequestGroup> > result;
createRequestGroupForUri(result, &op, uris);
createRequestGroupForUri(result, op, uris);
CPPUNIT_ASSERT_EQUAL((size_t)1, result.size());
SharedHandle<RequestGroup> group = result[0];
@ -128,7 +128,7 @@ void DownloadHelperTest::testCreateRequestGroupForUri()
{
std::deque<SharedHandle<RequestGroup> > result;
createRequestGroupForUri(result, &op, uris);
createRequestGroupForUri(result, op, uris);
CPPUNIT_ASSERT_EQUAL((size_t)3, result.size());
@ -164,7 +164,7 @@ void DownloadHelperTest::testCreateRequestGroupForUri_parameterized()
{
std::deque<SharedHandle<RequestGroup> > result;
createRequestGroupForUri(result, &op, uris);
createRequestGroupForUri(result, op, uris);
CPPUNIT_ASSERT_EQUAL((size_t)1, result.size());
SharedHandle<RequestGroup> group = result[0];
@ -201,7 +201,7 @@ void DownloadHelperTest::testCreateRequestGroupForUri_BitTorrent()
{
std::deque<SharedHandle<RequestGroup> > result;
createRequestGroupForUri(result, &op, uris);
createRequestGroupForUri(result, op, uris);
CPPUNIT_ASSERT_EQUAL((size_t)2, result.size());
SharedHandle<RequestGroup> group = result[0];
@ -251,7 +251,7 @@ void DownloadHelperTest::testCreateRequestGroupForUri_Metalink()
{
std::deque<SharedHandle<RequestGroup> > result;
createRequestGroupForUri(result, &op, uris);
createRequestGroupForUri(result, op, uris);
// group1: http://alpha/file, ...
// group2-7: 6 file entry in Metalink and 1 torrent file download
@ -300,7 +300,7 @@ void DownloadHelperTest::testCreateRequestGroupForUriList()
std::deque<SharedHandle<RequestGroup> > result;
createRequestGroupForUriList(result, &op);
createRequestGroupForUriList(result, op);
CPPUNIT_ASSERT_EQUAL((size_t)2, result.size());
@ -341,7 +341,7 @@ void DownloadHelperTest::testCreateRequestGroupForBitTorrent()
{
std::deque<SharedHandle<RequestGroup> > result;
createRequestGroupForBitTorrent(result, &op, auxURIs);
createRequestGroupForBitTorrent(result, op, auxURIs);
CPPUNIT_ASSERT_EQUAL((size_t)1, result.size());
@ -361,7 +361,7 @@ void DownloadHelperTest::testCreateRequestGroupForBitTorrent()
// no URIs are given
std::deque<SharedHandle<RequestGroup> > result;
std::deque<std::string> emptyURIs;
createRequestGroupForBitTorrent(result, &op, emptyURIs);
createRequestGroupForBitTorrent(result, op, emptyURIs);
CPPUNIT_ASSERT_EQUAL((size_t)1, result.size());
SharedHandle<RequestGroup> group = result[0];
@ -373,7 +373,7 @@ void DownloadHelperTest::testCreateRequestGroupForBitTorrent()
{
std::deque<SharedHandle<RequestGroup> > result;
createRequestGroupForBitTorrent(result, &op, auxURIs);
createRequestGroupForBitTorrent(result, op, auxURIs);
// See --force-requencial is ignored
CPPUNIT_ASSERT_EQUAL((size_t)1, result.size());
@ -393,7 +393,7 @@ void DownloadHelperTest::testCreateRequestGroupForMetalink()
{
std::deque<SharedHandle<RequestGroup> > result;
createRequestGroupForMetalink(result, &op);
createRequestGroupForMetalink(result, op);
#ifdef ENABLE_BITTORRENT
CPPUNIT_ASSERT_EQUAL((size_t)6, result.size());