/*
 *  Copyright 2018 The WebRTC Project Authors. All rights reserved.
 *
 *  Use of this source code is governed by a BSD-style license
 *  that can be found in the LICENSE file in the root of the source
 *  tree. An additional intellectual property rights grant can be found
 *  in the file PATENTS.  All contributing project authors may
 *  be found in the AUTHORS file in the root of the source tree.
 */

#ifndef PC_RTCSTATSTRAVERSAL_H_
#define PC_RTCSTATSTRAVERSAL_H_

#include <string>
#include <vector>

#include "api/stats/rtcstats.h"
#include "api/stats/rtcstatsreport.h"
#include "rtc_base/scoped_ref_ptr.h"

namespace webrtc {

// Traverses the stats graph, taking all stats objects that are directly or
// indirectly accessible from and including the stats objects identified by
// |ids|, returning them as a new stats report.
// This is meant to be used to implement the stats selection algorithm.
// https://w3c.github.io/webrtc-pc/#dfn-stats-selection-algorithm
rtc::scoped_refptr<RTCStatsReport> TakeReferencedStats(
    rtc::scoped_refptr<RTCStatsReport> report,
    const std::vector<std::string>& ids);

// Gets pointers to the string values of any members in |stats| that are used as
// references for looking up other stats objects in the same report by ID. The
// pointers are valid for the lifetime of |stats| assumings its members are not
// modified.
//
// For example, RTCCodecStats contains "transportId"
// (RTCCodecStats::transport_id) referencing an RTCTransportStats.
// https://w3c.github.io/webrtc-stats/#dom-rtccodecstats-transportid
std::vector<const std::string*> GetStatsReferencedIds(const RTCStats& stats);

}  // namespace webrtc

#endif  // PC_RTCSTATSTRAVERSAL_H_
