/*
 *  Copyright (c) 2015 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 WEBRTC_MODULES_RTP_RTCP_SOURCE_PACKET_LOSS_STATS_H_
#define WEBRTC_MODULES_RTP_RTCP_SOURCE_PACKET_LOSS_STATS_H_

#include <stdint.h>
#include <set>

namespace webrtc {

// Keeps track of statistics of packet loss including whether losses are a
// single packet or multiple packets in a row.
class PacketLossStats {
 public:
  PacketLossStats();
  ~PacketLossStats() {}

  // Adds a lost packet to the stats by sequence number.
  void AddLostPacket(uint16_t sequence_number);

  // Queries the number of packets that were lost by themselves, no neighboring
  // packets were lost.
  int GetSingleLossCount() const;

  // Queries the number of times that multiple packets with sequential numbers
  // were lost. This is the number of events with more than one packet lost,
  // regardless of the size of the event;
  int GetMultipleLossEventCount() const;

  // Queries the number of packets lost in multiple packet loss events. Combined
  // with the event count, this can be used to determine the average event size.
  int GetMultipleLossPacketCount() const;

 private:
  std::set<uint16_t> lost_packets_buffer_;
  std::set<uint16_t> lost_packets_wrapped_buffer_;
  int single_loss_historic_count_;
  int multiple_loss_historic_event_count_;
  int multiple_loss_historic_packet_count_;

  void ComputeLossCounts(int* out_single_loss_count,
                         int* out_multiple_loss_event_count,
                         int* out_multiple_loss_packet_count) const;
  void PruneBuffer();
};

}  // namespace webrtc

#endif  // WEBRTC_MODULES_RTP_RTCP_SOURCE_PACKET_LOSS_STATS_H_
