// Copyright (c) 2019, Paul Ferrand // All rights reserved. // Redistribution and use in source and binary forms, with or without // modification, are permitted provided that the following conditions are met: // 1. Redistributions of source code must retain the above copyright notice, this // list of conditions and the following disclaimer. // 2. Redistributions in binary form must reproduce the above copyright notice, // this list of conditions and the following disclaimer in the documentation // and/or other materials provided with the distribution. // THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND // ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED // WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE // DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR // ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES // (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; // LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND // ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT // (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS // SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. #include "Helpers.h" #include "SIMDHelpers.h" template <> void readInterleaved(absl::Span input, absl::Span outputLeft, absl::Span outputRight) noexcept { readInterleaved(input, outputLeft, outputRight); } template <> void writeInterleaved(absl::Span inputLeft, absl::Span inputRight, absl::Span output) noexcept { writeInterleaved(inputLeft, inputRight, output); } template <> void fill(absl::Span output, float value) noexcept { fill(output, value); } template <> void exp(absl::Span input, absl::Span output) noexcept { exp(input, output); } template <> void log(absl::Span input, absl::Span output) noexcept { log(input, output); } template <> void sin(absl::Span input, absl::Span output) noexcept { sin(input, output); } template <> void cos(absl::Span input, absl::Span output) noexcept { cos(input, output); } template <> void applyGain(float gain, absl::Span input, absl::Span output) noexcept { applyGain(gain, input, output); } template <> void applyGain(absl::Span gain, absl::Span input, absl::Span output) noexcept { applyGain(gain, input, output); } template <> float loopingSFZIndex(absl::Span jumps, absl::Span leftCoeff, absl::Span rightCoeff, absl::Span indices, float floatIndex, float loopEnd, float loopStart) noexcept { return loopingSFZIndex(jumps, leftCoeff, rightCoeff, indices, floatIndex, loopEnd, loopStart); } template <> float saturatingSFZIndex(absl::Span jumps, absl::Span leftCoeff, absl::Span rightCoeff, absl::Span indices, float floatIndex, float loopEnd) noexcept { return saturatingSFZIndex(jumps, leftCoeff, rightCoeff, indices, floatIndex, loopEnd); } template <> float linearRamp(absl::Span output, float start, float step) noexcept { return linearRamp(output, start, step); } template <> float multiplicativeRamp(absl::Span output, float start, float step) noexcept { return multiplicativeRamp(output, start, step); } template <> void add(absl::Span input, absl::Span output) noexcept { add(input, output); }