/*
 *  Copyright (c) 2011 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 "modules/rtp_rtcp/source/dtmf_queue.h"

#include <cstddef>

#include "rtc_base/checks.h"
#include "rtc_base/synchronization/mutex.h"

namespace webrtc {

namespace {
constexpr size_t kDtmfOutbandMax = 20;
}  // namespace

DtmfQueue::DtmfQueue() {}

DtmfQueue::~DtmfQueue() {}

bool DtmfQueue::AddDtmf(const Event& event) {
  MutexLock lock(&dtmf_mutex_);
  if (queue_.size() >= kDtmfOutbandMax) {
    return false;
  }
  queue_.push_back(event);
  return true;
}

bool DtmfQueue::NextDtmf(Event* event) {
  RTC_DCHECK(event);
  MutexLock lock(&dtmf_mutex_);
  if (queue_.empty()) {
    return false;
  }

  *event = queue_.front();
  queue_.pop_front();
  return true;
}

bool DtmfQueue::PendingDtmf() const {
  MutexLock lock(&dtmf_mutex_);
  return !queue_.empty();
}
}  // namespace webrtc
