swift
callsigndelaycache.cpp
1 // SPDX-FileCopyrightText: Copyright (C) 2019 swift Project Community / Contributors
2 // SPDX-License-Identifier: GPL-3.0-or-later OR LicenseRef-swift-pilot-client-1
3 
5 
6 #include <algorithm>
7 
8 namespace swift::core::afv::audio
9 {
10  void CallsignDelayCache::initialise(const QString &callsign)
11  {
12  if (!m_delayCache.contains(callsign)) { m_delayCache[callsign] = delayDefault; }
13  if (!m_successfulTransmissionsCache.contains(callsign)) { m_successfulTransmissionsCache[callsign] = 0; }
14  }
15 
16  int CallsignDelayCache::get(const QString &callsign) { return m_delayCache[callsign]; }
17 
18  void CallsignDelayCache::underflow(const QString &callsign)
19  {
20  if (!m_successfulTransmissionsCache.contains(callsign)) return;
21 
22  m_successfulTransmissionsCache[callsign] = 0;
23  increaseDelayMs(callsign);
24  }
25 
26  void CallsignDelayCache::success(const QString &callsign)
27  {
28  if (!m_successfulTransmissionsCache.contains(callsign)) return;
29 
30  m_successfulTransmissionsCache[callsign]++;
31  if (m_successfulTransmissionsCache[callsign] > 5)
32  {
33  decreaseDelayMs(callsign);
34  m_successfulTransmissionsCache[callsign] = 0;
35  }
36  }
37 
38  void CallsignDelayCache::increaseDelayMs(const QString &callsign)
39  {
40  if (!m_delayCache.contains(callsign)) return;
41 
42  m_delayCache[callsign] += delayIncrement;
43  m_delayCache[callsign] = std::min(m_delayCache[callsign], delayMax);
44  }
45 
46  void CallsignDelayCache::decreaseDelayMs(const QString &callsign)
47  {
48  if (!m_delayCache.contains(callsign)) return;
49 
50  m_delayCache[callsign] -= delayIncrement;
51  m_delayCache[callsign] = std::max(m_delayCache[callsign], delayMin);
52  }
53 
55  {
56  static CallsignDelayCache cache;
57  return cache;
58  }
59 
60 } // namespace swift::core::afv::audio
void initialise(const QString &callsign)
Initialize.
static CallsignDelayCache & instance()
Singleton.
void decreaseDelayMs(const QString &callsign)
Delay plus/minus.
int get(const QString &callsign)
Callsign index.
void success(const QString &callsign)
Success.
void underflow(const QString &callsign)
Underflow.
void increaseDelayMs(const QString &callsign)
Delay plus/minus.