#include #include "util.h" #include "km.h" // fill buffer with N random floats bool km_rand_fill( km_rand_t * const rs, const size_t num_floats, float * const floats ) { return rs->cbs->fill(rs, num_floats, floats); } // fill buffer with N random size_ts bool km_rand_fill_sizes( km_rand_t * const rs, const size_t num_sizes, size_t * const sizes ) { return rs->cbs->fill_sizes(rs, num_sizes, sizes); } // finalize random source void km_rand_fini( km_rand_t * const rs ) { if (rs->cbs->fini) { rs->cbs->fini(rs); } } // fill callback for system random source static bool system_on_fill( km_rand_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; } // fill sizes callback for system random source static bool system_on_fill_sizes( km_rand_t * const rs, const size_t num_sizes, size_t * const sizes ) { UNUSED(rs); // generate random size_ts for (size_t i = 0; i < num_sizes; i++) { sizes[i] = rand(); } // return success return true; } // system random source callbacks static const km_rand_cbs_t SYSTEM_CBS = { .fill = system_on_fill, .fill_sizes = system_on_fill_sizes, .fini = NULL, }; // init system random source (uses system rand()) void km_rand_init_system( km_rand_t * const rs ) { rs->cbs = &SYSTEM_CBS; rs->data = NULL; }