Skip to content

Utility functions

library_version function

inline static const char *library_version()

Returns string representation of the KFR version (including target architecture)

Source code
inline static const char* library_version() { return KFR_VERSION_FULL; }

https://github.com/kfrlib/kfr/blob//include/kfr/version.hpp#L34

sort function

template <typename T, size_t N>
vec<T, N> sort(const vec<T, N> &x)

Sort the elements in the vector in ascending order
x input vector @return sorted vector

CHECK(sort(make_vector(1000, 1, 2, -10)) == make_vector(-10, 1, 2, 1000));

Source code
template <typename T, size_t N>
KFR_INTRINSIC vec<T, N> sort(const vec<T, N>& x)
{
    constexpr size_t Nhalf = N / 2;
    vec<T, Nhalf> e        = low(x);
    vec<T, Nhalf> o        = high(x);
    constexpr auto blend0  = cconcat(csizes<1>, csizeseq<Nhalf - 1, 0, 0>);
    for (size_t i = 0; i < Nhalf; i++)
    {
        vec<T, Nhalf> t;
        t = min(e, o);
        o = max(e, o);
        o = rotateright<1>(o);
        e = t;
        t = max(e, o);
        o = min(e, o);
        e = t;
        t = blend(e, o, blend0);
        o = blend(o, e, blend0);
        o = rotateleft<1>(o);
        e = t;
    }
    return interleavehalfs(concat(e, o));
}

https://github.com/kfrlib/kfr/blob//include/kfr/base/sort.hpp#L46

sortdesc function

template <typename T, size_t N>
vec<T, N> sortdesc(const vec<T, N> &x)

Sort the elements in the vector in descending order
x input vector @return sorted vector

CHECK(sort(make_vector(1000, 1, 2, -10)) == make_vector(1000, 2, 1, -10));

Source code
template <typename T, size_t N>
KFR_INTRINSIC vec<T, N> sortdesc(const vec<T, N>& x)
{
    constexpr size_t Nhalf = N / 2;
    vec<T, Nhalf> e        = low(x);
    vec<T, Nhalf> o        = high(x);
    constexpr auto blend0  = cconcat(csizes<1>, csizeseq<Nhalf - 1, 0, 0>);
    for (size_t i = 0; i < Nhalf; i++)
    {
        vec<T, Nhalf> t;
        t = max(e, o);
        o = min(e, o);
        o = rotateright<1>(o);
        e = t;
        t = min(e, o);
        o = max(e, o);
        e = t;
        t = blend(e, o, blend0);
        o = blend(o, e, blend0);
        o = rotateleft<1>(o);
        e = t;
    }
    return interleavehalfs(concat(e, o));
}

https://github.com/kfrlib/kfr/blob//include/kfr/base/sort.hpp#L79


Auto-generated from sources, Revision , https://github.com/kfrlib/kfr/blob//include/kfr/