Example #1
0
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_);
 }