/*
 *  Copyright 2016 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.
 */

#include "stats/test/rtc_test_stats.h"

#include "rtc_base/checks.h"

namespace webrtc {

WEBRTC_RTCSTATS_IMPL(RTCTestStats,
                     RTCStats,
                     "test-stats",
                     &m_bool,
                     &m_int32,
                     &m_uint32,
                     &m_int64,
                     &m_uint64,
                     &m_double,
                     &m_string,
                     &m_sequence_bool,
                     &m_sequence_int32,
                     &m_sequence_uint32,
                     &m_sequence_int64,
                     &m_sequence_uint64,
                     &m_sequence_double,
                     &m_sequence_string,
                     &m_map_string_uint64,
                     &m_map_string_double)

RTCTestStats::RTCTestStats(const std::string& id, Timestamp timestamp)
    : RTCStats(id, timestamp),
      m_bool("mBool"),
      m_int32("mInt32"),
      m_uint32("mUint32"),
      m_int64("mInt64"),
      m_uint64("mUint64"),
      m_double("mDouble"),
      m_string("mString"),
      m_sequence_bool("mSequenceBool"),
      m_sequence_int32("mSequenceInt32"),
      m_sequence_uint32("mSequenceUint32"),
      m_sequence_int64("mSequenceInt64"),
      m_sequence_uint64("mSequenceUint64"),
      m_sequence_double("mSequenceDouble"),
      m_sequence_string("mSequenceString"),
      m_map_string_uint64("mMapStringUint64"),
      m_map_string_double("mMapStringDouble") {}

RTCTestStats::RTCTestStats(const RTCTestStats& other)
    : RTCStats(other.id(), other.timestamp()),
      m_bool(other.m_bool),
      m_int32(other.m_int32),
      m_uint32(other.m_uint32),
      m_int64(other.m_int64),
      m_uint64(other.m_uint64),
      m_double(other.m_double),
      m_string(other.m_string),
      m_sequence_bool(other.m_sequence_bool),
      m_sequence_int32(other.m_sequence_int32),
      m_sequence_uint32(other.m_sequence_uint32),
      m_sequence_int64(other.m_sequence_int64),
      m_sequence_uint64(other.m_sequence_uint64),
      m_sequence_double(other.m_sequence_double),
      m_sequence_string(other.m_sequence_string),
      m_map_string_uint64(other.m_map_string_uint64),
      m_map_string_double(other.m_map_string_double) {}

RTCTestStats::~RTCTestStats() {}

}  // namespace webrtc
