namespace mrpt::math::detail

namespace detail {

// structs

template <int R, int C>
struct MatOrVecResizer;

template <int R>
struct MatOrVecResizer<R, 1>;

template <int C>
struct MatOrVecResizer<1, C>;

template <>
struct MatOrVecResizer<1, 1>;

template <typename MAT, int TypeSizeAtCompileTime>
struct TAuxResizer;

template <typename MAT>
struct TAuxResizer<MAT, -1>;

// classes

template <typename A, typename T>
class AccessorIterator;

template <typename U>
class MatrixWrapper<U, true>;

template <typename U>
class MatrixWrapper<U, false>;

template <typename U, bool B>
class MatrixWrapper;

template <typename A, typename T>
class ReverseAccessorIterator;

// global functions

template <typename T, typename U, bool UIsObject, typename FunctionType>
void applyFunction(
    CBinaryRelation<T, U, UIsObject>& o,
    FunctionType fun,
    size_t e1,
    size_t e2,
    const T& T1,
    const T& T2
    );

template <typename T, typename U, bool UIsObject>
void applyFunction(
    CBinaryRelation<T, U, UIsObject>& o,
    typename CBinaryRelation<T, U, UIsObject>::FunctionByReferencePass fun,
    size_t e1,
    size_t e2,
    const T& T1,
    const T& T2
    );

template <typename SCALAR>
double internal_kmeans(
    const bool use_kmeansplusplus_method,
    const size_t nPoints,
    const size_t k,
    const size_t dims,
    const SCALAR* points,
    const size_t attempts,
    SCALAR* out_center,
    int* out_assignments
    );

template <class LIST_OF_VECTORS1, class LIST_OF_VECTORS2>
double stub_kmeans(
    ] const bool use_kmeansplusplus_method,
    const size_t k,
    const LIST_OF_VECTORS1& points,
    std::vector<int>& assignments,
    LIST_OF_VECTORS2* out_centers,
    const size_t attempts
    );

double internal_kmeans< double >(
    ] const bool use_kmeansplusplus_method,
    const size_t nPoints,
    const size_t k,
    const size_t dims,
    const double* points,
    const size_t attempts,
    double* out_center,
    int* out_assignments
    );

double internal_kmeans< float >(
    ] const bool use_kmeansplusplus_method,
    const size_t nPoints,
    const size_t k,
    const size_t dims,
    const float* points,
    const size_t attempts,
    float* out_center,
    int* out_assignments
    );

template <typename Scalar, typename VEC1, typename MATRIX1, typename MATRIX2>
void sortEigResults(
    const VEC1& eVals,
    const MATRIX1& eVecs,
    std::vector<Scalar>& sorted_eVals,
    MATRIX2& sorted_eVecs
    );

} // namespace detail

Global Functions

template <typename T, typename U, bool UIsObject>
void applyFunction(
    CBinaryRelation<T, U, UIsObject>& o,
    typename CBinaryRelation<T, U, UIsObject>::FunctionByReferencePass fun,
    size_t e1,
    size_t e2,
    const T& T1,
    const T& T2
    )

Template specialization by reference type.