swift
digestsignal.h
Go to the documentation of this file.
1 // SPDX-FileCopyrightText: Copyright (C) 2013 swift Project Community / Contributors
2 // SPDX-License-Identifier: GPL-3.0-or-later OR LicenseRef-swift-pilot-client-1
3 
5 
6 #ifndef SWIFT_MISC_DIGESTSIGNAL_H
7 #define SWIFT_MISC_DIGESTSIGNAL_H
8 
9 #include <QObject>
10 #include <QTimer>
11 
12 #include "misc/swiftmiscexport.h"
13 
14 namespace swift::misc
15 {
17  class SWIFT_MISC_EXPORT CDigestSignal : public QObject
18  {
19  Q_OBJECT
20 
21  public:
23  template <class T, class F1, class F2>
24  CDigestSignal(T *sender, F1 inputSignal, F2 digestSignal,
25  std::chrono::milliseconds maxDelay = std::chrono::milliseconds(500), int maxInputsPerDigest = 3)
26  : m_maxInputsPerDigest(maxInputsPerDigest)
27  {
28  QObject::connect(sender, inputSignal, this, &CDigestSignal::inputSignal);
29  QObject::connect(this, &CDigestSignal::digestSignal, sender, digestSignal);
30  init(maxDelay);
31  }
32 
34  template <class T, class F2>
35  CDigestSignal(T *sender, F2 digestSignal, std::chrono::milliseconds maxDelay = std::chrono::milliseconds(500),
36  int maxInputsPerDigest = 3)
37  : m_maxInputsPerDigest(maxInputsPerDigest)
38  {
39  QObject::connect(this, &CDigestSignal::digestSignal, sender, digestSignal);
40  init(maxDelay);
41  }
42 
44  ~CDigestSignal() override = default;
45 
46  signals:
48  void digestSignal();
49 
50  public slots:
52  void inputSignal();
53 
54  private:
56  void timerTimeout();
57 
59  void init(std::chrono::milliseconds maxDelay);
60 
61  QTimer m_timer;
62  const int m_maxInputsPerDigest = 3;
63  int m_inputsCount = 0;
64  };
65 } // namespace swift::misc
66 
67 #endif // SWIFT_MISC_DIGESTSIGNAL_H
Receive 1..n signals, collect them over time, and resend afer n milliseconds.
Definition: digestsignal.h:18
CDigestSignal(T *sender, F1 inputSignal, F2 digestSignal, std::chrono::milliseconds maxDelay=std::chrono::milliseconds(500), int maxInputsPerDigest=3)
Constructor.
Definition: digestsignal.h:24
void digestSignal()
Send digest signal.
~CDigestSignal()=default
Destructor.
void inputSignal()
Received input signal, or manually trigger.
CDigestSignal(T *sender, F2 digestSignal, std::chrono::milliseconds maxDelay=std::chrono::milliseconds(500), int maxInputsPerDigest=3)
Constructor without input signal, can be manually triggered.
Definition: digestsignal.h:35
Free functions in swift::misc.
#define SWIFT_MISC_EXPORT
Export a class or function from the library.