+ Effect *add_effect(EffectId effect) {
+ return add_effect(effect, get_last_added_effect());
+ }
+ Effect *add_effect(EffectId effect, Effect *input) {
+ std::vector<Effect *> inputs;
+ inputs.push_back(input);
+ return add_effect(effect, inputs);
+ }
+ Effect *add_effect(EffectId effect, Effect *input1, Effect *input2) {
+ std::vector<Effect *> inputs;
+ inputs.push_back(input1);
+ inputs.push_back(input2);
+ return add_effect(effect, inputs);
+ }
+ Effect *add_effect(EffectId effect, const std::vector<Effect *> &inputs);
+
+ // Similar to add_effect, but:
+ //
+ // * Does not insert any normalizing effects.
+ // * Does not ask the effect to insert itself, so it won't work
+ // with meta-effects.
+ //
+ // We should really separate out these two “sides” of Effect in the
+ // type system soon.
+ void add_effect_raw(Effect *effect, const std::vector<Effect *> &inputs);