memlnaut-nisps/modes/MEMLNautMode.hpp

27 lines
1.1 KiB
C++
Raw Normal View History

2025-11-23 16:48:14 +01:00
#pragma once
#include <concepts>
#include <memory>
#include <span>
#include "WString.h"
#include "../src/memllib/interface/InterfaceBase.hpp"
#include "../src/memllib/interface/MIDIInOut.hpp"
#include "../src/memllib/audio/AudioDriver.hpp"
template<typename T>
concept MEMLNautMode = requires(T proc) {
{proc.getHelpTitle()} -> std::same_as<String>;
{proc.getNParams()} -> std::same_as<size_t>;
{proc.setVoiceSpace(size_t{})} -> std::same_as<void>;
{proc.setupMIDI(std::shared_ptr<MIDIInOut>{})} -> std::same_as<void>;
{proc.addViews()} -> std::same_as<void>;
{proc.Setup(float{}, std::shared_ptr<InterfaceBase>{})} -> std::same_as<void>;
{proc.loop()} -> std::same_as<void>;
{proc.getVoiceSpaceList()} -> std::same_as<std::span<String>>;
{proc.process(stereosample_t{})} -> std::same_as<stereosample_t>;
{proc.analyse(stereosample_t{})} -> std::same_as<void>;
{proc.processAnalysisParams(std::shared_ptr<InterfaceBase>{})} -> std::same_as<void>;
{proc.getNMIDICtrlOutputs()} -> std::same_as<size_t>;
requires std::same_as<decltype(T::kN_InputParams), const size_t>;
};