#ifndef STRINGZILLAS_SIMILARITIES_HPP_
#define STRINGZILLAS_SIMILARITIES_HPP_
#include "stringzillas/similarities/serial.hpp"
#include "stringzillas/similarities/haswell.hpp"
#include "stringzillas/similarities/icelake.hpp"
#include "stringzillas/similarities/neon.hpp"
#include "stringzillas/similarities/rvv.hpp"
namespace ashvardanian {
namespace stringzillas {
} }
#if SZ_DYNAMIC_DISPATCH
namespace ashvardanian {
namespace stringzillas {
extern template status_t levenshtein_distance<char, linear_gap_costs_t, sz_cap_serial_k>::operator()<dummy_executor_t>(
span<char const> const &, span<char const> const &, size_t &, scratch_space_t, dummy_executor_t &,
cpu_specs_t const &) const noexcept;
extern template status_t levenshtein_distance<char, linear_gap_costs_t, sz_cap_serial_k>::operator()<
forkunion_executor_t>(span<char const> const &, span<char const> const &, size_t &, scratch_space_t,
forkunion_executor_t &, cpu_specs_t const &) const noexcept;
extern template status_t levenshtein_distance<char, affine_gap_costs_t, sz_cap_serial_k>::operator()<dummy_executor_t>(
span<char const> const &, span<char const> const &, size_t &, scratch_space_t, dummy_executor_t &,
cpu_specs_t const &) const noexcept;
extern template status_t levenshtein_distance<char, affine_gap_costs_t, sz_cap_serial_k>::operator()<
forkunion_executor_t>(span<char const> const &, span<char const> const &, size_t &, scratch_space_t,
forkunion_executor_t &, cpu_specs_t const &) const noexcept;
extern template status_t levenshtein_distance_utf8<linear_gap_costs_t, sz_cap_serial_k>::operator()<dummy_executor_t>(
span<char const> const &, span<char const> const &, size_t &, scratch_space_t, dummy_executor_t &,
cpu_specs_t const &) const noexcept;
extern template status_t levenshtein_distance_utf8<linear_gap_costs_t, sz_cap_serial_k>::operator()<
forkunion_executor_t>(span<char const> const &, span<char const> const &, size_t &, scratch_space_t,
forkunion_executor_t &, cpu_specs_t const &) const noexcept;
extern template status_t levenshtein_distance_utf8<affine_gap_costs_t, sz_cap_serial_k>::operator()<dummy_executor_t>(
span<char const> const &, span<char const> const &, size_t &, scratch_space_t, dummy_executor_t &,
cpu_specs_t const &) const noexcept;
extern template status_t levenshtein_distance_utf8<affine_gap_costs_t, sz_cap_serial_k>::operator()<
forkunion_executor_t>(span<char const> const &, span<char const> const &, size_t &, scratch_space_t,
forkunion_executor_t &, cpu_specs_t const &) const noexcept;
extern template status_t
needleman_wunsch_score<char, error_costs_32x32_t, linear_gap_costs_t, sz_cap_serial_k>::operator()<dummy_executor_t>(
span<char const> const &, span<char const> const &, ssize_t &, scratch_space_t, dummy_executor_t &,
cpu_specs_t const &) const noexcept;
extern template status_t needleman_wunsch_score<char, error_costs_32x32_t, linear_gap_costs_t, sz_cap_serial_k>::
operator()<forkunion_executor_t>(span<char const> const &, span<char const> const &, ssize_t &, scratch_space_t,
forkunion_executor_t &, cpu_specs_t const &) const noexcept;
extern template status_t
needleman_wunsch_score<char, error_costs_32x32_t, affine_gap_costs_t, sz_cap_serial_k>::operator()<dummy_executor_t>(
span<char const> const &, span<char const> const &, ssize_t &, scratch_space_t, dummy_executor_t &,
cpu_specs_t const &) const noexcept;
extern template status_t needleman_wunsch_score<char, error_costs_32x32_t, affine_gap_costs_t, sz_cap_serial_k>::
operator()<forkunion_executor_t>(span<char const> const &, span<char const> const &, ssize_t &, scratch_space_t,
forkunion_executor_t &, cpu_specs_t const &) const noexcept;
extern template status_t
smith_waterman_score<char, error_costs_32x32_t, linear_gap_costs_t, sz_cap_serial_k>::operator()<dummy_executor_t>(
span<char const> const &, span<char const> const &, ssize_t &, scratch_space_t, dummy_executor_t &,
cpu_specs_t const &) const noexcept;
extern template status_t
smith_waterman_score<char, error_costs_32x32_t, linear_gap_costs_t, sz_cap_serial_k>::operator()<forkunion_executor_t>(
span<char const> const &, span<char const> const &, ssize_t &, scratch_space_t, forkunion_executor_t &,
cpu_specs_t const &) const noexcept;
extern template status_t
smith_waterman_score<char, error_costs_32x32_t, affine_gap_costs_t, sz_cap_serial_k>::operator()<dummy_executor_t>(
span<char const> const &, span<char const> const &, ssize_t &, scratch_space_t, dummy_executor_t &,
cpu_specs_t const &) const noexcept;
extern template status_t
smith_waterman_score<char, error_costs_32x32_t, affine_gap_costs_t, sz_cap_serial_k>::operator()<forkunion_executor_t>(
span<char const> const &, span<char const> const &, ssize_t &, scratch_space_t, forkunion_executor_t &,
cpu_specs_t const &) const noexcept;
#if SZ_USE_ICELAKE
extern template status_t levenshtein_distance<char, linear_gap_costs_t, sz_caps_sil_k>::operator()<dummy_executor_t>(
span<char const> const &, span<char const> const &, size_t &, scratch_space_t, dummy_executor_t &,
cpu_specs_t const &) const noexcept;
extern template status_t levenshtein_distance<char, linear_gap_costs_t, sz_caps_sil_k>::operator()<
forkunion_executor_t>(span<char const> const &, span<char const> const &, size_t &, scratch_space_t,
forkunion_executor_t &, cpu_specs_t const &) const noexcept;
extern template status_t levenshtein_distance<char, affine_gap_costs_t, sz_caps_sil_k>::operator()<dummy_executor_t>(
span<char const> const &, span<char const> const &, size_t &, scratch_space_t, dummy_executor_t &,
cpu_specs_t const &) const noexcept;
extern template status_t levenshtein_distance<char, affine_gap_costs_t, sz_caps_sil_k>::operator()<
forkunion_executor_t>(span<char const> const &, span<char const> const &, size_t &, scratch_space_t,
forkunion_executor_t &, cpu_specs_t const &) const noexcept;
extern template status_t levenshtein_distance_utf8<linear_gap_costs_t, sz_caps_sil_k>::operator()<dummy_executor_t>(
span<char const> const &, span<char const> const &, size_t &, scratch_space_t, dummy_executor_t &,
cpu_specs_t const &) const noexcept;
extern template status_t levenshtein_distance_utf8<linear_gap_costs_t, sz_caps_sil_k>::operator()<forkunion_executor_t>(
span<char const> const &, span<char const> const &, size_t &, scratch_space_t, forkunion_executor_t &,
cpu_specs_t const &) const noexcept;
extern template status_t
needleman_wunsch_score<char, error_costs_32x32_t, linear_gap_costs_t, sz_caps_sil_k>::operator()<dummy_executor_t>(
span<char const> const &, span<char const> const &, ssize_t &, scratch_space_t, dummy_executor_t &,
cpu_specs_t const &) const noexcept;
extern template status_t
needleman_wunsch_score<char, error_costs_32x32_t, linear_gap_costs_t, sz_caps_sil_k>::operator()<forkunion_executor_t>(
span<char const> const &, span<char const> const &, ssize_t &, scratch_space_t, forkunion_executor_t &,
cpu_specs_t const &) const noexcept;
extern template status_t
needleman_wunsch_score<char, error_costs_32x32_t, affine_gap_costs_t, sz_caps_sil_k>::operator()<dummy_executor_t>(
span<char const> const &, span<char const> const &, ssize_t &, scratch_space_t, dummy_executor_t &,
cpu_specs_t const &) const noexcept;
extern template status_t
needleman_wunsch_score<char, error_costs_32x32_t, affine_gap_costs_t, sz_caps_sil_k>::operator()<forkunion_executor_t>(
span<char const> const &, span<char const> const &, ssize_t &, scratch_space_t, forkunion_executor_t &,
cpu_specs_t const &) const noexcept;
extern template status_t smith_waterman_score<char, error_costs_32x32_t, linear_gap_costs_t, sz_caps_sil_k>::operator()<
dummy_executor_t>(span<char const> const &, span<char const> const &, ssize_t &, scratch_space_t,
dummy_executor_t &, cpu_specs_t const &) const noexcept;
extern template status_t smith_waterman_score<char, error_costs_32x32_t, linear_gap_costs_t, sz_caps_sil_k>::operator()<
forkunion_executor_t>(span<char const> const &, span<char const> const &, ssize_t &, scratch_space_t,
forkunion_executor_t &, cpu_specs_t const &) const noexcept;
extern template status_t smith_waterman_score<char, error_costs_32x32_t, affine_gap_costs_t, sz_caps_sil_k>::operator()<
dummy_executor_t>(span<char const> const &, span<char const> const &, ssize_t &, scratch_space_t,
dummy_executor_t &, cpu_specs_t const &) const noexcept;
extern template status_t smith_waterman_score<char, error_costs_32x32_t, affine_gap_costs_t, sz_caps_sil_k>::operator()<
forkunion_executor_t>(span<char const> const &, span<char const> const &, ssize_t &, scratch_space_t,
forkunion_executor_t &, cpu_specs_t const &) const noexcept;
#endif
#if SZ_USE_HASWELL
extern template status_t levenshtein_distance<char, linear_gap_costs_t, sz_caps_sh_k>::operator()<dummy_executor_t>(
span<char const> const &, span<char const> const &, size_t &, scratch_space_t, dummy_executor_t &,
cpu_specs_t const &) const noexcept;
extern template status_t levenshtein_distance<char, linear_gap_costs_t, sz_caps_sh_k>::operator()<forkunion_executor_t>(
span<char const> const &, span<char const> const &, size_t &, scratch_space_t, forkunion_executor_t &,
cpu_specs_t const &) const noexcept;
extern template status_t levenshtein_distance<char, affine_gap_costs_t, sz_caps_sh_k>::operator()<dummy_executor_t>(
span<char const> const &, span<char const> const &, size_t &, scratch_space_t, dummy_executor_t &,
cpu_specs_t const &) const noexcept;
extern template status_t levenshtein_distance<char, affine_gap_costs_t, sz_caps_sh_k>::operator()<forkunion_executor_t>(
span<char const> const &, span<char const> const &, size_t &, scratch_space_t, forkunion_executor_t &,
cpu_specs_t const &) const noexcept;
extern template status_t levenshtein_distance_utf8<linear_gap_costs_t, sz_caps_sh_k>::operator()<dummy_executor_t>(
span<char const> const &, span<char const> const &, size_t &, scratch_space_t, dummy_executor_t &,
cpu_specs_t const &) const noexcept;
extern template status_t levenshtein_distance_utf8<linear_gap_costs_t, sz_caps_sh_k>::operator()<forkunion_executor_t>(
span<char const> const &, span<char const> const &, size_t &, scratch_space_t, forkunion_executor_t &,
cpu_specs_t const &) const noexcept;
extern template status_t
needleman_wunsch_score<char, error_costs_32x32_t, linear_gap_costs_t, sz_caps_sh_k>::operator()<dummy_executor_t>(
span<char const> const &, span<char const> const &, ssize_t &, scratch_space_t, dummy_executor_t &,
cpu_specs_t const &) const noexcept;
extern template status_t
needleman_wunsch_score<char, error_costs_32x32_t, linear_gap_costs_t, sz_caps_sh_k>::operator()<forkunion_executor_t>(
span<char const> const &, span<char const> const &, ssize_t &, scratch_space_t, forkunion_executor_t &,
cpu_specs_t const &) const noexcept;
extern template status_t
needleman_wunsch_score<char, error_costs_32x32_t, affine_gap_costs_t, sz_caps_sh_k>::operator()<dummy_executor_t>(
span<char const> const &, span<char const> const &, ssize_t &, scratch_space_t, dummy_executor_t &,
cpu_specs_t const &) const noexcept;
extern template status_t
needleman_wunsch_score<char, error_costs_32x32_t, affine_gap_costs_t, sz_caps_sh_k>::operator()<forkunion_executor_t>(
span<char const> const &, span<char const> const &, ssize_t &, scratch_space_t, forkunion_executor_t &,
cpu_specs_t const &) const noexcept;
extern template status_t smith_waterman_score<char, error_costs_32x32_t, linear_gap_costs_t, sz_caps_sh_k>::operator()<
dummy_executor_t>(span<char const> const &, span<char const> const &, ssize_t &, scratch_space_t,
dummy_executor_t &, cpu_specs_t const &) const noexcept;
extern template status_t smith_waterman_score<char, error_costs_32x32_t, linear_gap_costs_t, sz_caps_sh_k>::operator()<
forkunion_executor_t>(span<char const> const &, span<char const> const &, ssize_t &, scratch_space_t,
forkunion_executor_t &, cpu_specs_t const &) const noexcept;
extern template status_t smith_waterman_score<char, error_costs_32x32_t, affine_gap_costs_t, sz_caps_sh_k>::operator()<
dummy_executor_t>(span<char const> const &, span<char const> const &, ssize_t &, scratch_space_t,
dummy_executor_t &, cpu_specs_t const &) const noexcept;
extern template status_t smith_waterman_score<char, error_costs_32x32_t, affine_gap_costs_t, sz_caps_sh_k>::operator()<
forkunion_executor_t>(span<char const> const &, span<char const> const &, ssize_t &, scratch_space_t,
forkunion_executor_t &, cpu_specs_t const &) const noexcept;
#endif
#if SZ_USE_NEON
extern template status_t levenshtein_distance<char, linear_gap_costs_t, sz_caps_sn_k>::operator()<dummy_executor_t>(
span<char const> const &, span<char const> const &, size_t &, scratch_space_t, dummy_executor_t &,
cpu_specs_t const &) const noexcept;
extern template status_t levenshtein_distance<char, linear_gap_costs_t, sz_caps_sn_k>::operator()<forkunion_executor_t>(
span<char const> const &, span<char const> const &, size_t &, scratch_space_t, forkunion_executor_t &,
cpu_specs_t const &) const noexcept;
extern template status_t levenshtein_distance<char, affine_gap_costs_t, sz_caps_sn_k>::operator()<dummy_executor_t>(
span<char const> const &, span<char const> const &, size_t &, scratch_space_t, dummy_executor_t &,
cpu_specs_t const &) const noexcept;
extern template status_t levenshtein_distance<char, affine_gap_costs_t, sz_caps_sn_k>::operator()<forkunion_executor_t>(
span<char const> const &, span<char const> const &, size_t &, scratch_space_t, forkunion_executor_t &,
cpu_specs_t const &) const noexcept;
extern template status_t levenshtein_distance_utf8<linear_gap_costs_t, sz_caps_sn_k>::operator()<dummy_executor_t>(
span<char const> const &, span<char const> const &, size_t &, scratch_space_t, dummy_executor_t &,
cpu_specs_t const &) const noexcept;
extern template status_t levenshtein_distance_utf8<linear_gap_costs_t, sz_caps_sn_k>::operator()<forkunion_executor_t>(
span<char const> const &, span<char const> const &, size_t &, scratch_space_t, forkunion_executor_t &,
cpu_specs_t const &) const noexcept;
extern template status_t
needleman_wunsch_score<char, error_costs_32x32_t, linear_gap_costs_t, sz_caps_sn_k>::operator()<dummy_executor_t>(
span<char const> const &, span<char const> const &, ssize_t &, scratch_space_t, dummy_executor_t &,
cpu_specs_t const &) const noexcept;
extern template status_t
needleman_wunsch_score<char, error_costs_32x32_t, linear_gap_costs_t, sz_caps_sn_k>::operator()<forkunion_executor_t>(
span<char const> const &, span<char const> const &, ssize_t &, scratch_space_t, forkunion_executor_t &,
cpu_specs_t const &) const noexcept;
extern template status_t
needleman_wunsch_score<char, error_costs_32x32_t, affine_gap_costs_t, sz_caps_sn_k>::operator()<dummy_executor_t>(
span<char const> const &, span<char const> const &, ssize_t &, scratch_space_t, dummy_executor_t &,
cpu_specs_t const &) const noexcept;
extern template status_t
needleman_wunsch_score<char, error_costs_32x32_t, affine_gap_costs_t, sz_caps_sn_k>::operator()<forkunion_executor_t>(
span<char const> const &, span<char const> const &, ssize_t &, scratch_space_t, forkunion_executor_t &,
cpu_specs_t const &) const noexcept;
extern template status_t smith_waterman_score<char, error_costs_32x32_t, linear_gap_costs_t, sz_caps_sn_k>::operator()<
dummy_executor_t>(span<char const> const &, span<char const> const &, ssize_t &, scratch_space_t,
dummy_executor_t &, cpu_specs_t const &) const noexcept;
extern template status_t smith_waterman_score<char, error_costs_32x32_t, linear_gap_costs_t, sz_caps_sn_k>::operator()<
forkunion_executor_t>(span<char const> const &, span<char const> const &, ssize_t &, scratch_space_t,
forkunion_executor_t &, cpu_specs_t const &) const noexcept;
extern template status_t smith_waterman_score<char, error_costs_32x32_t, affine_gap_costs_t, sz_caps_sn_k>::operator()<
dummy_executor_t>(span<char const> const &, span<char const> const &, ssize_t &, scratch_space_t,
dummy_executor_t &, cpu_specs_t const &) const noexcept;
extern template status_t smith_waterman_score<char, error_costs_32x32_t, affine_gap_costs_t, sz_caps_sn_k>::operator()<
forkunion_executor_t>(span<char const> const &, span<char const> const &, ssize_t &, scratch_space_t,
forkunion_executor_t &, cpu_specs_t const &) const noexcept;
#endif
#if SZ_USE_RVV
extern template status_t levenshtein_distance<char, linear_gap_costs_t, sz_caps_sr_k>::operator()<dummy_executor_t>(
span<char const> const &, span<char const> const &, size_t &, scratch_space_t, dummy_executor_t &,
cpu_specs_t const &) const noexcept;
extern template status_t levenshtein_distance<char, linear_gap_costs_t, sz_caps_sr_k>::operator()<forkunion_executor_t>(
span<char const> const &, span<char const> const &, size_t &, scratch_space_t, forkunion_executor_t &,
cpu_specs_t const &) const noexcept;
extern template status_t levenshtein_distance<char, affine_gap_costs_t, sz_caps_sr_k>::operator()<dummy_executor_t>(
span<char const> const &, span<char const> const &, size_t &, scratch_space_t, dummy_executor_t &,
cpu_specs_t const &) const noexcept;
extern template status_t levenshtein_distance<char, affine_gap_costs_t, sz_caps_sr_k>::operator()<forkunion_executor_t>(
span<char const> const &, span<char const> const &, size_t &, scratch_space_t, forkunion_executor_t &,
cpu_specs_t const &) const noexcept;
extern template status_t levenshtein_distance_utf8<linear_gap_costs_t, sz_caps_sr_k>::operator()<dummy_executor_t>(
span<char const> const &, span<char const> const &, size_t &, scratch_space_t, dummy_executor_t &,
cpu_specs_t const &) const noexcept;
extern template status_t levenshtein_distance_utf8<linear_gap_costs_t, sz_caps_sr_k>::operator()<forkunion_executor_t>(
span<char const> const &, span<char const> const &, size_t &, scratch_space_t, forkunion_executor_t &,
cpu_specs_t const &) const noexcept;
extern template status_t
needleman_wunsch_score<char, error_costs_32x32_t, linear_gap_costs_t, sz_caps_sr_k>::operator()<dummy_executor_t>(
span<char const> const &, span<char const> const &, ssize_t &, scratch_space_t, dummy_executor_t &,
cpu_specs_t const &) const noexcept;
extern template status_t
needleman_wunsch_score<char, error_costs_32x32_t, linear_gap_costs_t, sz_caps_sr_k>::operator()<forkunion_executor_t>(
span<char const> const &, span<char const> const &, ssize_t &, scratch_space_t, forkunion_executor_t &,
cpu_specs_t const &) const noexcept;
extern template status_t
needleman_wunsch_score<char, error_costs_32x32_t, affine_gap_costs_t, sz_caps_sr_k>::operator()<dummy_executor_t>(
span<char const> const &, span<char const> const &, ssize_t &, scratch_space_t, dummy_executor_t &,
cpu_specs_t const &) const noexcept;
extern template status_t
needleman_wunsch_score<char, error_costs_32x32_t, affine_gap_costs_t, sz_caps_sr_k>::operator()<forkunion_executor_t>(
span<char const> const &, span<char const> const &, ssize_t &, scratch_space_t, forkunion_executor_t &,
cpu_specs_t const &) const noexcept;
extern template status_t smith_waterman_score<char, error_costs_32x32_t, linear_gap_costs_t, sz_caps_sr_k>::operator()<
dummy_executor_t>(span<char const> const &, span<char const> const &, ssize_t &, scratch_space_t,
dummy_executor_t &, cpu_specs_t const &) const noexcept;
extern template status_t smith_waterman_score<char, error_costs_32x32_t, linear_gap_costs_t, sz_caps_sr_k>::operator()<
forkunion_executor_t>(span<char const> const &, span<char const> const &, ssize_t &, scratch_space_t,
forkunion_executor_t &, cpu_specs_t const &) const noexcept;
extern template status_t smith_waterman_score<char, error_costs_32x32_t, affine_gap_costs_t, sz_caps_sr_k>::operator()<
dummy_executor_t>(span<char const> const &, span<char const> const &, ssize_t &, scratch_space_t,
dummy_executor_t &, cpu_specs_t const &) const noexcept;
extern template status_t smith_waterman_score<char, error_costs_32x32_t, affine_gap_costs_t, sz_caps_sr_k>::operator()<
forkunion_executor_t>(span<char const> const &, span<char const> const &, ssize_t &, scratch_space_t,
forkunion_executor_t &, cpu_specs_t const &) const noexcept;
#endif
} } #endif
#endif