6#include <rapidfuzz/details/Range.hpp>
7#include <rapidfuzz/details/SplittedSentenceView.hpp>
8#include <rapidfuzz/details/intrinsics.hpp>
9#include <rapidfuzz/details/type_traits.hpp>
10#include <rapidfuzz/details/types.hpp>
12#if defined(__APPLE__) && !defined(_LIBCPP_HAS_C11_FEATURES)
13# include <mm_malloc.h>
19template <
typename InputIt1,
typename InputIt2,
typename InputIt3>
21 SplittedSentenceView<InputIt1> difference_ab;
22 SplittedSentenceView<InputIt2> difference_ba;
23 SplittedSentenceView<InputIt3> intersection;
24 DecomposedSet(SplittedSentenceView<InputIt1> diff_ab, SplittedSentenceView<InputIt2> diff_ba,
25 SplittedSentenceView<InputIt3> intersect)
26 : difference_ab(std::move(diff_ab)),
27 difference_ba(std::move(diff_ba)),
28 intersection(std::move(intersect))
32static inline size_t abs_diff(
size_t a,
size_t b)
34 return a > b ? a - b : b - a;
37template <
typename TO,
typename FROM>
38TO opt_static_cast(
const FROM& value)
41 return static_cast<TO
>(value);
44static inline double NormSim_to_NormDist(
double score_cutoff,
double imprecision = 0.00001)
46 return std::min(1.0, 1.0 - score_cutoff + imprecision);
49template <
typename InputIt1,
typename InputIt2>
50DecomposedSet<InputIt1, InputIt2, InputIt1> set_decomposition(SplittedSentenceView<InputIt1> a,
51 SplittedSentenceView<InputIt2> b);
53template <
typename InputIt1,
typename InputIt2>
54StringAffix remove_common_affix(Range<InputIt1>& s1, Range<InputIt2>& s2);
56template <
typename InputIt1,
typename InputIt2>
57size_t remove_common_prefix(Range<InputIt1>& s1, Range<InputIt2>& s2);
59template <
typename InputIt1,
typename InputIt2>
60size_t remove_common_suffix(Range<InputIt1>& s1, Range<InputIt2>& s2);
62template <
typename InputIt,
typename CharT = iter_value_t<InputIt>>
63SplittedSentenceView<InputIt> sorted_split(InputIt first, InputIt last);
65static inline void* rf_aligned_alloc(
size_t alignment,
size_t size)
68 return _aligned_malloc(size, alignment);
69#elif defined(__APPLE__) && !defined(_LIBCPP_HAS_C11_FEATURES)
70 return _mm_malloc(size, alignment);
71#elif defined(__ANDROID__) && __ANDROID_API__ > 16
73 return posix_memalign(&ptr, alignment, size) ? nullptr : ptr;
75 return aligned_alloc(alignment, size);
79static inline void rf_aligned_free(
void* ptr)
83#elif defined(__APPLE__) && !defined(_LIBCPP_HAS_C11_FEATURES)
93#include <rapidfuzz/details/common_impl.hpp>