/* */ #include "ServerStat.h" #include "array_fun.h" #include #include namespace aria2 { const std::string ServerStat::STATUS_STRING[] = { "OK", "ERROR" }; ServerStat::ServerStat(const std::string& hostname, const std::string& protocol) : _hostname(hostname), _protocol(protocol), _downloadSpeed(0), _status(OK) {} ServerStat::~ServerStat() {} const std::string& ServerStat::getHostname() const { return _hostname; } const std::string& ServerStat::getProtocol() const { return _protocol; } const Time& ServerStat::getLastUpdated() const { return _lastUpdated; } void ServerStat::setLastUpdated(const Time& time) { _lastUpdated = time; } unsigned int ServerStat::getDownloadSpeed() const { return _downloadSpeed; } void ServerStat::setDownloadSpeed(unsigned int downloadSpeed) { _downloadSpeed = downloadSpeed; } void ServerStat::updateDownloadSpeed(unsigned int downloadSpeed) { _downloadSpeed = downloadSpeed; if(downloadSpeed > 0) { _status = OK; } _lastUpdated.reset(); } void ServerStat::setStatus(STATUS status) { _status = status; } void ServerStat::setStatus(const std::string& status) { size_t len = arrayLength(STATUS_STRING); const std::string* p = std::find(&STATUS_STRING[0], &STATUS_STRING[len], status); if(p != &STATUS_STRING[len]) { _status = static_cast(ServerStat::OK+ std::distance(&STATUS_STRING[0], p)); } } void ServerStat::setStatusInternal(STATUS status) { _status = status; _lastUpdated.reset(); } ServerStat::STATUS ServerStat::getStatus() const { return _status; } bool ServerStat::isOK() const { return _status == OK; } void ServerStat::setOK() { setStatusInternal(OK); } bool ServerStat::isError() const { return _status == ERROR; } void ServerStat::setError() { setStatusInternal(ERROR); } bool ServerStat::operator<(const ServerStat& serverStat) const { int c = _hostname.compare(serverStat._hostname); if(c == 0) { return _protocol < serverStat._protocol; } else { return c < 0; } } bool ServerStat::operator==(const ServerStat& serverStat) const { return _hostname == serverStat._hostname && _protocol == serverStat._protocol; } std::ostream& operator<<(std::ostream& o, const ServerStat& serverStat) { o << "host=" << serverStat.getHostname() << ", " << "protocol=" << serverStat.getProtocol() << ", " << "dl_speed=" << serverStat.getDownloadSpeed() << ", " << "last_updated=" << serverStat.getLastUpdated().getTime() << ", " << "status=" << ServerStat::STATUS_STRING[serverStat.getStatus()]; return o; } } // namespace aria2