13#define _BLI_CONCAT_AUX(MACRO_ARG1, MACRO_ARG2) MACRO_ARG1##MACRO_ARG2
14#define _BLI_CONCAT(MACRO_ARG1, MACRO_ARG2) _BLI_CONCAT_AUX(MACRO_ARG1, MACRO_ARG2)
15#define BLI_kdtree_nd_(id) _BLI_CONCAT(KDTREE_PREFIX_ID, _##id)
63 int (*filter_cb)(
void *user_data,
int index,
const float co[
KD_DIMS],
float dist_sq),
79 bool (*search_cb)(
void *user_data,
int index,
const float co[
KD_DIMS],
float dist_sq),
102 bool use_index_order,
127 int (*deduplicate_cb)(
void *user_data,
148 uint nearest_len_capacity,
151 const void *user_data),
165 const void *user_data),
178 [](
void *user_data,
const int index,
const float *co,
const float dist_sq) {
179 const Fn &fn = *
static_cast<const Fn *
>(user_data);
180 return fn(index, co, dist_sq);
182 const_cast<Fn *
>(&fn));
194 [](
void *user_data,
const int index,
const float *co,
const float dist_sq) {
195 Fn &fn = *
static_cast<Fn *
>(user_data);
196 return fn(index, co, dist_sq);
206 const bool has_self_index,
214 [](
void *user_data,
const int *cluster,
int cluster_num) ->
int {
215 const Fn &fn = *
static_cast<const Fn *
>(user_data);
216 return fn(cluster, cluster_num);
218 const_cast<Fn *
>(&fn));
221#undef _BLI_CONCAT_AUX
#define ATTR_WARN_UNUSED_RESULT
#define ATTR_NONNULL(...)
void BLI_kdtree_nd_ range_search_cb_cpp(const KDTree *tree, const float co[KD_DIMS], const float distance, const Fn &fn)
void BLI_kdtree_nd_ int BLI_kdtree_nd_ int BLI_kdtree_nd_ find_nearest_n(const KDTree *tree, const float co[KD_DIMS], KDTreeNearest *r_nearest, uint nearest_len_capacity) ATTR_NONNULL(1
void BLI_kdtree_nd_ free(KDTree *tree)
int BLI_kdtree_nd_ calc_duplicates_fast(const KDTree *tree, float range, bool use_index_order, int *duplicates)
void BLI_kdtree_nd_ range_search_cb(const KDTree *tree, const float co[KD_DIMS], float range, bool(*search_cb)(void *user_data, int index, const float co[KD_DIMS], float dist_sq), void *user_data)
void BLI_kdtree_nd_ int BLI_kdtree_nd_ find_nearest(const KDTree *tree, const float co[KD_DIMS], KDTreeNearest *r_nearest) ATTR_NONNULL(1
int BLI_kdtree_nd_ find_nearest_cb(const KDTree *tree, const float co[KD_DIMS], int(*filter_cb)(void *user_data, int index, const float co[KD_DIMS], float dist_sq), void *user_data, KDTreeNearest *r_nearest)
int BLI_kdtree_nd_ calc_duplicates_cb_cpp(const KDTree *tree, const float distance, int *duplicates, const bool has_self_index, const Fn &fn)
int BLI_kdtree_nd_ calc_duplicates_cb(const KDTree *tree, const float range, int *duplicates, bool has_self_index, int(*deduplicate_cb)(void *user_data, const int *cluster, int cluster_num), void *user_data)
int BLI_kdtree_nd_ find_nearest_n_with_len_squared_cb(const KDTree *tree, const float co[KD_DIMS], KDTreeNearest *r_nearest, uint nearest_len_capacity, float(*len_sq_fn)(const float co_search[KD_DIMS], const float co_test[KD_DIMS], const void *user_data), const void *user_data) ATTR_NONNULL(1
int BLI_kdtree_nd_ deduplicate(KDTree *tree)
int BLI_kdtree_nd_ find_nearest_cb_cpp(const KDTree *tree, const float co[KD_DIMS], KDTreeNearest *r_nearest, Fn &&fn)
void BLI_kdtree_nd_ int BLI_kdtree_nd_ int BLI_kdtree_nd_ int BLI_kdtree_nd_ range_search(const KDTree *tree, const float co[KD_DIMS], KDTreeNearest **r_nearest, float range) ATTR_NONNULL(1
void BLI_kdtree_nd_ balance(KDTree *tree) ATTR_NONNULL(1)
int BLI_kdtree_nd_ int BLI_kdtree_nd_ range_search_with_len_squared_cb(const KDTree *tree, const float co[KD_DIMS], KDTreeNearest **r_nearest, float range, float(*len_sq_fn)(const float co_search[KD_DIMS], const float co_test[KD_DIMS], const void *user_data), const void *user_data) ATTR_NONNULL(1
#define BLI_kdtree_nd_(id)
void BLI_kdtree_nd_ insert(KDTree *tree, int index, const float co[KD_DIMS]) ATTR_NONNULL(1
float distance(VecOp< float, D >, VecOp< float, D >) RET