LCOV - code coverage report
Current view: top level - src/MIDI_Interfaces - MIDI_Staller.hpp (source / functions) Coverage Total Hit
Test: 73449d9b107c772cf65493691543348214e5d5eb Lines: 100.0 % 10 10
Test Date: 2026-06-06 17:44:35 Functions: 100.0 % 11 11
Legend: Lines:     hit not hit

            Line data    Source code
       1              : #pragma once
       2              : 
       3              : #include <Settings/SettingsWrapper.hpp>
       4              : #if !DISABLE_PIPES
       5              : 
       6              : #include <AH/STL/utility> // std::forward
       7              : #include <Settings/NamespaceSettings.hpp>
       8              : 
       9              : BEGIN_CS_NAMESPACE
      10              : 
      11              : /// Struct that can cause a MIDI_Pipe to be stalled.
      12              : struct MIDIStaller {
      13          164 :     virtual ~MIDIStaller() = default;
      14              :     /// Get the staller's name for debugging purposes.
      15            2 :     virtual const char *getName() const { return "<?>"; }
      16              :     /// Call back that should finish any MIDI messages that are in progress, and
      17              :     /// un-stall the pipe or MIDI source as quickly as possible.
      18              :     virtual void handleStall() = 0;
      19              : 
      20              :     /// Get the staller's name for debugging purposes. Correctly deals with
      21              :     /// null pointers or eternal stallers.
      22              :     static const char *getNameNull(MIDIStaller *s);
      23              : };
      24              : 
      25              : /// Allocate a MIDIStaller that executes the given callback and deletes itself
      26              : /// when @ref MIDIStaller::handleStall is called.
      27              : /// @note   Don't lose the pointer! If you never call `handleStall`, the memory
      28              : ///         won't be deallocated.
      29              : template <class Callback>
      30            3 : auto makeMIDIStaller(Callback &&callback) -> MIDIStaller * {
      31              : 
      32              :     struct AutoCleanupMIDIStaller : MIDIStaller {
      33            3 :         AutoCleanupMIDIStaller(Callback &&callback)
      34            3 :             : callback(std::forward<Callback>(callback)) {}
      35              : 
      36            3 :         void handleStall() override {
      37            3 :             callback(this);
      38            3 :             delete this;
      39            3 :         }
      40              : 
      41              :         Callback callback;
      42              :     };
      43            3 :     return new AutoCleanupMIDIStaller(std::forward<Callback>(callback));
      44              : }
      45              : 
      46              : END_CS_NAMESPACE
      47              : 
      48              : #else
      49              : 
      50              : BEGIN_CS_NAMESPACE
      51              : 
      52              : struct MIDIStaller {};
      53              : 
      54              : END_CS_NAMESPACE
      55              : 
      56              : #endif
        

Generated by: LCOV version 2.4-beta