@@ -116,7 +116,7 @@ struct EaxReverbCommitter {
116116 static void translate (const EAX20LISTENERPROPERTIES & src, EAXREVERBPROPERTIES & dst) noexcept ;
117117};
118118
119- template <typename T >
119+ template <typename P >
120120struct EaxCommitter {
121121 struct Exception ;
122122
@@ -131,46 +131,35 @@ struct EaxCommitter {
131131 property = value;
132132 }
133133
134- [[noreturn]] static void fail (const std::string_view message);
134+ [[noreturn]] static void fail (std::string_view message);
135135 [[noreturn]] static void fail_unknown_property_id ()
136136 { fail (EaxEffectErrorMessages::unknown_property_id ()); }
137137
138- private:
139138 EaxCommitter (EaxEffectProps &eaxprops, EffectProps &alprops)
140139 : mEaxProps {eaxprops}, mAlProps {alprops}
141140 { }
142141
143- friend T;
144- };
142+ [[nodiscard]] auto commit (const P &props) const -> bool;
145143
146- #define DECL_COMMITTER (T, P ) struct T : EaxCommitter<T> { \
147- T (EaxEffectProps &eaxprops, EffectProps &alprops) \
148- : EaxCommitter{eaxprops, alprops} \
149- { } \
150- \
151- [[nodiscard]] auto commit (const P &props) const -> bool; \
152- \
153- static void SetDefaults (EaxEffectProps &props); \
154- static void Get (const EaxCall &call, const P &props); \
155- static void Set (const EaxCall &call, P &props); \
144+ static void SetDefaults (EaxEffectProps &props);
145+ static void Get (const EaxCall &call, const P &props);
146+ static void Set (const EaxCall &call, P &props);
156147};
157- DECL_COMMITTER (EaxAutowahCommitter, EAXAUTOWAHPROPERTIES )
158- DECL_COMMITTER (EaxChorusCommitter, EAXCHORUSPROPERTIES )
159- DECL_COMMITTER (EaxCompressorCommitter, EAXAGCCOMPRESSORPROPERTIES )
160- DECL_COMMITTER (EaxDistortionCommitter, EAXDISTORTIONPROPERTIES )
161- DECL_COMMITTER (EaxEchoCommitter, EAXECHOPROPERTIES )
162- DECL_COMMITTER (EaxEqualizerCommitter, EAXEQUALIZERPROPERTIES )
163- DECL_COMMITTER (EaxFlangerCommitter, EAXFLANGERPROPERTIES )
164- DECL_COMMITTER (EaxFrequencyShifterCommitter, EAXFREQUENCYSHIFTERPROPERTIES )
165- DECL_COMMITTER (EaxModulatorCommitter, EAXRINGMODULATORPROPERTIES )
166- DECL_COMMITTER (EaxPitchShifterCommitter, EAXPITCHSHIFTERPROPERTIES )
167- DECL_COMMITTER (EaxVocalMorpherCommitter, EAXVOCALMORPHERPROPERTIES )
168- DECL_COMMITTER (EaxNullCommitter, std::monostate)
169- #undef DECL_COMMITTER
170-
171- template <typename T>
172- struct CommitterFromProps { };
173148
149+ using EaxAutowahCommitter = EaxCommitter<EAXAUTOWAHPROPERTIES >;
150+ using EaxChorusCommitter = EaxCommitter<EAXCHORUSPROPERTIES >;
151+ using EaxCompressorCommitter = EaxCommitter<EAXAGCCOMPRESSORPROPERTIES >;
152+ using EaxDistortionCommitter = EaxCommitter<EAXDISTORTIONPROPERTIES >;
153+ using EaxEchoCommitter = EaxCommitter<EAXECHOPROPERTIES >;
154+ using EaxEqualizerCommitter = EaxCommitter<EAXEQUALIZERPROPERTIES >;
155+ using EaxFlangerCommitter = EaxCommitter<EAXFLANGERPROPERTIES >;
156+ using EaxFrequencyShifterCommitter = EaxCommitter<EAXFREQUENCYSHIFTERPROPERTIES >;
157+ using EaxModulatorCommitter = EaxCommitter<EAXRINGMODULATORPROPERTIES >;
158+ using EaxPitchShifterCommitter = EaxCommitter<EAXPITCHSHIFTERPROPERTIES >;
159+ using EaxVocalMorpherCommitter = EaxCommitter<EAXVOCALMORPHERPROPERTIES >;
160+ using EaxNullCommitter = EaxCommitter<std::monostate>;
161+
162+ template <typename > struct CommitterFromProps { };
174163template <> struct CommitterFromProps <std::monostate> { using type = EaxNullCommitter; };
175164template <> struct CommitterFromProps <EAXREVERBPROPERTIES > { using type = EaxReverbCommitter; };
176165template <> struct CommitterFromProps <EAXCHORUSPROPERTIES > { using type = EaxChorusCommitter; };
0 commit comments