From 1e3dc2401263a436a32377e207352ffbe6984e8f Mon Sep 17 00:00:00 2001 From: Paul Duncan Date: Sun, 3 Feb 2019 04:54:10 -0500 Subject: add outstanding changes --- km-rand-src.c | 57 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 57 insertions(+) create mode 100644 km-rand-src.c (limited to 'km-rand-src.c') diff --git a/km-rand-src.c b/km-rand-src.c new file mode 100644 index 0000000..0ddc1bb --- /dev/null +++ b/km-rand-src.c @@ -0,0 +1,57 @@ +#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; +} -- cgit v1.2.3