31#ifndef SBL_DSP_PM_CONTRACTS_HPP_
32#define SBL_DSP_PM_CONTRACTS_HPP_
54template<
typename T,
typename =
void>
58 std::enable_if_t<returns_float<decltype(std::declval<const T&>().energy())>::value>,
59 decltype(std::declval<T&>().reset())>> : std::true_type {};
65template<
typename T,
typename =
void>
69 std::enable_if_t<detail::returns_float<decltype(std::declval<const T&>().admittance())>::value>,
70 std::enable_if_t<detail::returns_float<decltype(std::declval<const T&>().history())>::value>,
71 std::enable_if_t<detail::returns_float<decltype(std::declval<T&>().commit(0.0f))>::value>,
72 std::enable_if_t<detail::has_energy_reset<T>::value>>> : std::true_type {};
78template<
typename T,
typename =
void>
82 std::enable_if_t<detail::returns_float<decltype(std::declval<T&>().excite(std::declval<const JunctionState&>()))>::value>,
83 decltype(std::declval<T&>().advance(uint16_t{})),
84 std::enable_if_t<detail::has_energy_reset<T>::value>>> : std::true_type {};
90template<
typename T,
typename =
void>
94 std::enable_if_t<detail::returns_float<decltype(std::declval<T&>().reflect(0.0f))>::value>,
95 std::enable_if_t<detail::has_energy_reset<T>::value>>> : std::true_type {};
101template<
typename T,
typename =
void>
105 decltype(std::declval<T&>().set_force_su(0.0f)),
106 std::enable_if_t<detail::returns_float<decltype(std::declval<T&>().process(0.0f))>::value>,
107 std::enable_if_t<std::is_same<decltype(std::declval<const T&>().sticking()), bool>::value>,
108 std::enable_if_t<detail::returns_float<decltype(std::declval<const T&>().limit())>::value>,
109 decltype(std::declval<T&>().reset())>> : std::true_type {};
115template<
typename T,
typename =
void>
119 std::enable_if_t<std::is_same<
120 decltype(std::declval<const T&>().describe(std::declval<diagram::Graph&>(), uint8_t{})),
121 diagram::Ports>::value>>> : std::true_type {};
A model's wiring, as data (AP-037)
std::is_same< std::decay_t< T >, float > returns_float
Physical modeling: laws, bows, junctions, loads, resonators, strings (docs/conventions/physical-model...
constexpr bool is_termination_v
constexpr bool is_described_v
constexpr bool is_exciter_v
constexpr bool is_wave_callable_v
constexpr bool is_friction_law_v
What the guide reports at an excitation point, each sample.
float displacement
the point's displacement, integrated from its velocity (wave units × samples)
float impedance
the guide's wave impedance Z
float velocity
the velocity arriving at the point, before this sample's injection