Manifest::Manifest( const Json::Value& json, const arbiter::Endpoint& endpoint) : m_endpoint(endpoint) { if (!json.isObject()) throw std::runtime_error("Invalid manifest JSON"); const Json::Value& fileInfo(json["fileInfo"]); if (fileInfo.isArray() && fileInfo.size()) { m_fileInfo.reserve(fileInfo.size()); for (Json::ArrayIndex i(0); i < fileInfo.size(); ++i) { Json::Value fileJson(fileInfo[i]); if (fileJson.isObject()) fileJson["origin"] = i; m_fileInfo.emplace_back(fileJson); } } m_chunkSize = json["chunkSize"].asUInt64(); if (!m_chunkSize) m_chunkSize = chunkSize; const bool remote(json["remote"].asBool()); m_remote.resize(m_fileInfo.size(), remote); // If we have fileStats and pointStats, then we're dealing with a full // manifest from Manifest::toJson (a previous build). Otherwise, we have // a simplified manifest from Manifest::toInferenceJson. if (json.isMember("fileStats") && json.isMember("pointStats")) { // Full manifest from Manifest::toJson. m_fileStats = FileStats(json["fileStats"]); m_pointStats = PointStats(json["pointStats"]); } }
PointStats operator+(const PointStats& add) const { return PointStats(count_ + add.count_, time_calendar_ + add.time_calendar_, time_thread_cputime_ + add.time_thread_cputime_); }