mirror of https://github.com/aria2/aria2
2009-03-19 Tatsuhiro Tsujikawa <t-tujikawa@users.sourceforge.net>
Typedefed cuid_t as int32_t in Command.h * src/CUIDCounter.h * src/Command.cc * src/Command.h * src/DownloadEngine.cc * src/DownloadEngine.h * src/PeerStat.h * src/SegmentMan.cc * src/SegmentMan.hpull/1/head
parent
e3ed6adf91
commit
9233a6258f
12
ChangeLog
12
ChangeLog
|
@ -1,3 +1,15 @@
|
||||||
|
2009-03-19 Tatsuhiro Tsujikawa <t-tujikawa@users.sourceforge.net>
|
||||||
|
|
||||||
|
Typedefed cuid_t as int32_t in Command.h
|
||||||
|
* src/CUIDCounter.h
|
||||||
|
* src/Command.cc
|
||||||
|
* src/Command.h
|
||||||
|
* src/DownloadEngine.cc
|
||||||
|
* src/DownloadEngine.h
|
||||||
|
* src/PeerStat.h
|
||||||
|
* src/SegmentMan.cc
|
||||||
|
* src/SegmentMan.h
|
||||||
|
|
||||||
2009-03-19 Tatsuhiro Tsujikawa <t-tujikawa@users.sourceforge.net>
|
2009-03-19 Tatsuhiro Tsujikawa <t-tujikawa@users.sourceforge.net>
|
||||||
|
|
||||||
Reduced the number of calls to PeerStorage::calculateStat() and
|
Reduced the number of calls to PeerStorage::calculateStat() and
|
||||||
|
|
|
@ -36,22 +36,25 @@
|
||||||
#define _D_CUID_COUNTER_H_
|
#define _D_CUID_COUNTER_H_
|
||||||
|
|
||||||
#include "common.h"
|
#include "common.h"
|
||||||
|
#include "Command.h"
|
||||||
|
|
||||||
namespace aria2 {
|
namespace aria2 {
|
||||||
|
|
||||||
typedef int32_t CUID;
|
|
||||||
|
|
||||||
class CUIDCounter {
|
class CUIDCounter {
|
||||||
private:
|
private:
|
||||||
int32_t count;
|
cuid_t _count;
|
||||||
public:
|
public:
|
||||||
CUIDCounter():count(0) {}
|
CUIDCounter():_count(0) {}
|
||||||
|
|
||||||
~CUIDCounter() {}
|
~CUIDCounter() {}
|
||||||
|
|
||||||
CUID newID()
|
cuid_t newID()
|
||||||
{
|
{
|
||||||
return ++count;
|
cuid_t id = ++_count;
|
||||||
|
if(id == INT32_MAX) {
|
||||||
|
_count = 0;
|
||||||
|
}
|
||||||
|
return id;
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
|
@ -40,14 +40,14 @@ namespace aria2 {
|
||||||
|
|
||||||
int32_t Command::uuidGen = 0;
|
int32_t Command::uuidGen = 0;
|
||||||
|
|
||||||
Command::Command(int32_t cuid):uuid(uuidGen++),
|
Command::Command(cuid_t cuid):uuid(uuidGen++),
|
||||||
status(STATUS_INACTIVE),
|
status(STATUS_INACTIVE),
|
||||||
cuid(cuid),
|
cuid(cuid),
|
||||||
logger(LogFactory::getInstance()),
|
logger(LogFactory::getInstance()),
|
||||||
_readEvent(false),
|
_readEvent(false),
|
||||||
_writeEvent(false),
|
_writeEvent(false),
|
||||||
_errorEvent(false),
|
_errorEvent(false),
|
||||||
_hupEvent(false) {}
|
_hupEvent(false) {}
|
||||||
|
|
||||||
void Command::transitStatus()
|
void Command::transitStatus()
|
||||||
{
|
{
|
||||||
|
|
|
@ -45,6 +45,8 @@ class Logger;
|
||||||
|
|
||||||
typedef int32_t CommandUuid;
|
typedef int32_t CommandUuid;
|
||||||
|
|
||||||
|
typedef int32_t cuid_t;
|
||||||
|
|
||||||
class Command {
|
class Command {
|
||||||
public:
|
public:
|
||||||
enum STATUS {
|
enum STATUS {
|
||||||
|
@ -67,13 +69,13 @@ protected:
|
||||||
bool _errorEvent;
|
bool _errorEvent;
|
||||||
bool _hupEvent;
|
bool _hupEvent;
|
||||||
public:
|
public:
|
||||||
Command(int32_t cuid);
|
Command(cuid_t cuid);
|
||||||
|
|
||||||
virtual ~Command() {}
|
virtual ~Command() {}
|
||||||
|
|
||||||
virtual bool execute() = 0;
|
virtual bool execute() = 0;
|
||||||
|
|
||||||
int32_t getCuid() const { return cuid; }
|
cuid_t getCuid() const { return cuid; }
|
||||||
|
|
||||||
const CommandUuid& getUuid() const { return uuid; }
|
const CommandUuid& getUuid() const { return uuid; }
|
||||||
|
|
||||||
|
|
|
@ -459,7 +459,7 @@ DownloadEngine::SocketPoolEntry::getOptions() const
|
||||||
return _options;
|
return _options;
|
||||||
}
|
}
|
||||||
|
|
||||||
CUID DownloadEngine::newCUID()
|
cuid_t DownloadEngine::newCUID()
|
||||||
{
|
{
|
||||||
return _cuidCounter.newID();
|
return _cuidCounter.newID();
|
||||||
}
|
}
|
||||||
|
|
|
@ -230,7 +230,7 @@ public:
|
||||||
|
|
||||||
SharedHandle<BtRegistry> getBtRegistry() const;
|
SharedHandle<BtRegistry> getBtRegistry() const;
|
||||||
|
|
||||||
CUID newCUID();
|
cuid_t newCUID();
|
||||||
|
|
||||||
const std::string& findCachedIPAddress(const std::string& hostname) const;
|
const std::string& findCachedIPAddress(const std::string& hostname) const;
|
||||||
|
|
||||||
|
|
|
@ -36,9 +36,12 @@
|
||||||
#define _D_PEER_STAT_H_
|
#define _D_PEER_STAT_H_
|
||||||
|
|
||||||
#include "common.h"
|
#include "common.h"
|
||||||
|
|
||||||
|
#include <string>
|
||||||
|
|
||||||
#include "SpeedCalc.h"
|
#include "SpeedCalc.h"
|
||||||
#include "SharedHandle.h"
|
#include "SharedHandle.h"
|
||||||
#include <string>
|
#include "Command.h"
|
||||||
|
|
||||||
namespace aria2 {
|
namespace aria2 {
|
||||||
|
|
||||||
|
@ -50,7 +53,7 @@ public:
|
||||||
REQUEST_IDLE,
|
REQUEST_IDLE,
|
||||||
};
|
};
|
||||||
private:
|
private:
|
||||||
int32_t cuid;
|
cuid_t cuid;
|
||||||
std::string _hostname;
|
std::string _hostname;
|
||||||
std::string _protocol;
|
std::string _protocol;
|
||||||
SpeedCalc downloadSpeed;
|
SpeedCalc downloadSpeed;
|
||||||
|
@ -63,7 +66,7 @@ private:
|
||||||
uint64_t _sessionUploadLength;
|
uint64_t _sessionUploadLength;
|
||||||
public:
|
public:
|
||||||
|
|
||||||
PeerStat(int32_t cuid, const std::string& hostname,
|
PeerStat(cuid_t cuid, const std::string& hostname,
|
||||||
const::std::string& protocol):
|
const::std::string& protocol):
|
||||||
cuid(cuid),
|
cuid(cuid),
|
||||||
_hostname(hostname),
|
_hostname(hostname),
|
||||||
|
@ -74,11 +77,11 @@ public:
|
||||||
_sessionDownloadLength(0),
|
_sessionDownloadLength(0),
|
||||||
_sessionUploadLength(0) {}
|
_sessionUploadLength(0) {}
|
||||||
|
|
||||||
PeerStat(int32_t cuid = 0):cuid(cuid), status(PeerStat::IDLE),
|
PeerStat(cuid_t cuid = 0):cuid(cuid), status(PeerStat::IDLE),
|
||||||
_avgDownloadSpeed(0),
|
_avgDownloadSpeed(0),
|
||||||
_avgUploadSpeed(0),
|
_avgUploadSpeed(0),
|
||||||
_sessionDownloadLength(0),
|
_sessionDownloadLength(0),
|
||||||
_sessionUploadLength(0) {}
|
_sessionUploadLength(0) {}
|
||||||
|
|
||||||
~PeerStat() {}
|
~PeerStat() {}
|
||||||
|
|
||||||
|
@ -167,7 +170,7 @@ public:
|
||||||
return status;
|
return status;
|
||||||
}
|
}
|
||||||
|
|
||||||
int32_t getCuid() const {
|
cuid_t getCuid() const {
|
||||||
return cuid;
|
return cuid;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -53,7 +53,7 @@
|
||||||
|
|
||||||
namespace aria2 {
|
namespace aria2 {
|
||||||
|
|
||||||
SegmentEntry::SegmentEntry(int32_t cuid, const SegmentHandle& segment):
|
SegmentEntry::SegmentEntry(cuid_t cuid, const SegmentHandle& segment):
|
||||||
cuid(cuid), segment(segment) {}
|
cuid(cuid), segment(segment) {}
|
||||||
|
|
||||||
SegmentEntry::~SegmentEntry() {}
|
SegmentEntry::~SegmentEntry() {}
|
||||||
|
@ -103,7 +103,7 @@ void SegmentMan::setDownloadContext(const DownloadContextHandle& downloadContext
|
||||||
_downloadContext = downloadContext;
|
_downloadContext = downloadContext;
|
||||||
}
|
}
|
||||||
|
|
||||||
SegmentHandle SegmentMan::checkoutSegment(int32_t cuid,
|
SegmentHandle SegmentMan::checkoutSegment(cuid_t cuid,
|
||||||
const PieceHandle& piece)
|
const PieceHandle& piece)
|
||||||
{
|
{
|
||||||
if(piece.isNull()) {
|
if(piece.isNull()) {
|
||||||
|
@ -164,7 +164,7 @@ SegmentEntryHandle SegmentMan::findSlowerSegmentEntry
|
||||||
}
|
}
|
||||||
|
|
||||||
void SegmentMan::getInFlightSegment(std::deque<SharedHandle<Segment> >& segments,
|
void SegmentMan::getInFlightSegment(std::deque<SharedHandle<Segment> >& segments,
|
||||||
int32_t cuid)
|
cuid_t cuid)
|
||||||
{
|
{
|
||||||
for(SegmentEntries::iterator itr = usedSegmentEntries.begin();
|
for(SegmentEntries::iterator itr = usedSegmentEntries.begin();
|
||||||
itr != usedSegmentEntries.end(); ++itr) {
|
itr != usedSegmentEntries.end(); ++itr) {
|
||||||
|
@ -175,7 +175,7 @@ void SegmentMan::getInFlightSegment(std::deque<SharedHandle<Segment> >& segments
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
SegmentHandle SegmentMan::getSegment(int32_t cuid) {
|
SegmentHandle SegmentMan::getSegment(cuid_t cuid) {
|
||||||
PieceHandle piece = _pieceStorage->getMissingPiece();
|
PieceHandle piece = _pieceStorage->getMissingPiece();
|
||||||
if(piece.isNull()) {
|
if(piece.isNull()) {
|
||||||
PeerStatHandle myPeerStat = getPeerStat(cuid);
|
PeerStatHandle myPeerStat = getPeerStat(cuid);
|
||||||
|
@ -205,14 +205,14 @@ SegmentHandle SegmentMan::getSegment(int32_t cuid) {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
SegmentHandle SegmentMan::getSegment(int32_t cuid, size_t index) {
|
SegmentHandle SegmentMan::getSegment(cuid_t cuid, size_t index) {
|
||||||
if(_downloadContext->getNumPieces() <= index) {
|
if(_downloadContext->getNumPieces() <= index) {
|
||||||
return SharedHandle<Segment>();
|
return SharedHandle<Segment>();
|
||||||
}
|
}
|
||||||
return checkoutSegment(cuid, _pieceStorage->getMissingPiece(index));
|
return checkoutSegment(cuid, _pieceStorage->getMissingPiece(index));
|
||||||
}
|
}
|
||||||
|
|
||||||
void SegmentMan::cancelSegment(int32_t cuid) {
|
void SegmentMan::cancelSegment(cuid_t cuid) {
|
||||||
for(SegmentEntries::iterator itr = usedSegmentEntries.begin();
|
for(SegmentEntries::iterator itr = usedSegmentEntries.begin();
|
||||||
itr != usedSegmentEntries.end();) {
|
itr != usedSegmentEntries.end();) {
|
||||||
if((*itr)->cuid == cuid) {
|
if((*itr)->cuid == cuid) {
|
||||||
|
@ -236,7 +236,7 @@ public:
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
bool SegmentMan::completeSegment(int32_t cuid, const SegmentHandle& segment) {
|
bool SegmentMan::completeSegment(cuid_t cuid, const SegmentHandle& segment) {
|
||||||
_pieceStorage->completePiece(segment->getPiece());
|
_pieceStorage->completePiece(segment->getPiece());
|
||||||
_pieceStorage->advertisePiece(cuid, segment->getPiece()->getIndex());
|
_pieceStorage->advertisePiece(cuid, segment->getPiece()->getIndex());
|
||||||
SegmentEntries::iterator itr = std::find_if(usedSegmentEntries.begin(),
|
SegmentEntries::iterator itr = std::find_if(usedSegmentEntries.begin(),
|
||||||
|
@ -264,7 +264,7 @@ uint64_t SegmentMan::getDownloadLength() const {
|
||||||
|
|
||||||
class FindPeerStat {
|
class FindPeerStat {
|
||||||
public:
|
public:
|
||||||
bool operator()(const SharedHandle<PeerStat>& peerStat, int32_t cuid) const
|
bool operator()(const SharedHandle<PeerStat>& peerStat, cuid_t cuid) const
|
||||||
{
|
{
|
||||||
return peerStat->getCuid() < cuid;
|
return peerStat->getCuid() < cuid;
|
||||||
}
|
}
|
||||||
|
@ -283,7 +283,7 @@ bool SegmentMan::registerPeerStat(const SharedHandle<PeerStat>& peerStat)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
PeerStatHandle SegmentMan::getPeerStat(int32_t cuid) const
|
PeerStatHandle SegmentMan::getPeerStat(cuid_t cuid) const
|
||||||
{
|
{
|
||||||
std::deque<SharedHandle<PeerStat> >::const_iterator i =
|
std::deque<SharedHandle<PeerStat> >::const_iterator i =
|
||||||
std::lower_bound(peerStats.begin(), peerStats.end(), cuid, FindPeerStat());
|
std::lower_bound(peerStats.begin(), peerStats.end(), cuid, FindPeerStat());
|
||||||
|
@ -314,7 +314,7 @@ unsigned int SegmentMan::calculateDownloadSpeed()
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
for(std::map<int32_t, unsigned int>::const_iterator i =
|
for(std::map<cuid_t, unsigned int>::const_iterator i =
|
||||||
_peerStatDlspdMap.begin();
|
_peerStatDlspdMap.begin();
|
||||||
i != _peerStatDlspdMap.end(); ++i) {
|
i != _peerStatDlspdMap.end(); ++i) {
|
||||||
speed += (*i).second;
|
speed += (*i).second;
|
||||||
|
|
|
@ -56,10 +56,10 @@ class Piece;
|
||||||
|
|
||||||
class SegmentEntry {
|
class SegmentEntry {
|
||||||
public:
|
public:
|
||||||
int32_t cuid;
|
cuid_t cuid;
|
||||||
SharedHandle<Segment> segment;
|
SharedHandle<Segment> segment;
|
||||||
public:
|
public:
|
||||||
SegmentEntry(int32_t cuid, const SharedHandle<Segment>& segment);
|
SegmentEntry(cuid_t cuid, const SharedHandle<Segment>& segment);
|
||||||
|
|
||||||
~SegmentEntry();
|
~SegmentEntry();
|
||||||
};
|
};
|
||||||
|
@ -85,11 +85,11 @@ private:
|
||||||
std::deque<SharedHandle<PeerStat> > peerStats;
|
std::deque<SharedHandle<PeerStat> > peerStats;
|
||||||
|
|
||||||
// key: PeerStat's cuid, value: its download speed
|
// key: PeerStat's cuid, value: its download speed
|
||||||
std::map<int32_t, unsigned int> _peerStatDlspdMap;
|
std::map<cuid_t, unsigned int> _peerStatDlspdMap;
|
||||||
|
|
||||||
Time _lastPeerStatDlspdMapUpdated;
|
Time _lastPeerStatDlspdMapUpdated;
|
||||||
|
|
||||||
SharedHandle<Segment> checkoutSegment(int32_t cuid,
|
SharedHandle<Segment> checkoutSegment(cuid_t cuid,
|
||||||
const SharedHandle<Piece>& piece);
|
const SharedHandle<Piece>& piece);
|
||||||
|
|
||||||
SharedHandle<SegmentEntry> findSlowerSegmentEntry
|
SharedHandle<SegmentEntry> findSlowerSegmentEntry
|
||||||
|
@ -125,9 +125,9 @@ public:
|
||||||
* This function doesn't clear passed segments.
|
* This function doesn't clear passed segments.
|
||||||
*/
|
*/
|
||||||
void getInFlightSegment(std::deque<SharedHandle<Segment> >& segments,
|
void getInFlightSegment(std::deque<SharedHandle<Segment> >& segments,
|
||||||
int32_t cuid);
|
cuid_t cuid);
|
||||||
|
|
||||||
SharedHandle<Segment> getSegment(int32_t cuid);
|
SharedHandle<Segment> getSegment(cuid_t cuid);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Returns a segment whose index is index.
|
* Returns a segment whose index is index.
|
||||||
|
@ -135,7 +135,7 @@ public:
|
||||||
* to another cuid or has been downloaded, then returns a segment instance
|
* to another cuid or has been downloaded, then returns a segment instance
|
||||||
* whose isNull call is true.
|
* whose isNull call is true.
|
||||||
*/
|
*/
|
||||||
SharedHandle<Segment> getSegment(int32_t cuid, size_t index);
|
SharedHandle<Segment> getSegment(cuid_t cuid, size_t index);
|
||||||
/**
|
/**
|
||||||
* Updates download status.
|
* Updates download status.
|
||||||
*/
|
*/
|
||||||
|
@ -144,11 +144,11 @@ public:
|
||||||
* Cancels all the segment which the command having given cuid
|
* Cancels all the segment which the command having given cuid
|
||||||
* uses.
|
* uses.
|
||||||
*/
|
*/
|
||||||
void cancelSegment(int32_t cuid);
|
void cancelSegment(cuid_t cuid);
|
||||||
/**
|
/**
|
||||||
* Tells SegmentMan that the segment has been downloaded successfully.
|
* Tells SegmentMan that the segment has been downloaded successfully.
|
||||||
*/
|
*/
|
||||||
bool completeSegment(int32_t cuid, const SharedHandle<Segment>& segment);
|
bool completeSegment(cuid_t cuid, const SharedHandle<Segment>& segment);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Injects PieceStorage.
|
* Injects PieceStorage.
|
||||||
|
@ -179,7 +179,7 @@ public:
|
||||||
* Returns peerStat whose cuid is given cuid. If it is not found, returns
|
* Returns peerStat whose cuid is given cuid. If it is not found, returns
|
||||||
* 0.
|
* 0.
|
||||||
*/
|
*/
|
||||||
SharedHandle<PeerStat> getPeerStat(int32_t cuid) const;
|
SharedHandle<PeerStat> getPeerStat(cuid_t cuid) const;
|
||||||
|
|
||||||
|
|
||||||
const std::deque<SharedHandle<PeerStat> >& getPeerStats() const;
|
const std::deque<SharedHandle<PeerStat> >& getPeerStats() const;
|
||||||
|
|
Loading…
Reference in New Issue