#include #include "util.h" #include "km.h" // fill buffer with N random floats bool km_rand_src_fill( km_rand_src_t * const rs, const size_t num_floats, float * const floats ) { return rs->cbs->fill(rs, num_floats, floats); } // finalize random source void km_rand_src_fini( km_rand_src_t * const rs ) { if (rs->cbs->fini) { rs->cbs->fini(rs); } } // fill callback for system random source static bool rand_src_system_on_fill( km_rand_src_t * const rs, const size_t num_floats, float * const floats ) { UNUSED(rs); // generate random cluster centers for (size_t i = 0; i < num_floats; i++) { floats[i] = 1.0 * rand() / RAND_MAX; } // return success return true; } // system random source callbacks static const km_rand_src_cbs_t RAND_SRC_SYSTEM_CBS = { .fill = rand_src_system_on_fill, .fini = NULL, }; // init system random source (uses system rand()) void km_rand_src_system_init( km_rand_src_t * const rs ) { rs->cbs = &RAND_SRC_SYSTEM_CBS; rs->data = NULL; }