diff options
| -rw-r--r-- | km-set.c | 44 | ||||
| -rw-r--r-- | km.h | 3 | 
2 files changed, 47 insertions, 0 deletions
@@ -180,6 +180,50 @@ km_set_push(  }  bool +km_set_copy( +  km_set_t * const dst, +  const km_set_t * const src +) { +  if (src->state != KM_SET_STATE_INIT || src->state != KM_SET_STATE_NORMALIZED) { +    // return failure +    return false; +  } + +  // init dst set +  if (!km_set_init(dst, &(src->shape), src->num_rows)) { +    // return failure +    return false; +  } + +  // copy floats +  const size_t num_floats = src->shape.num_floats; +  if (num_floats > 0) { +    const size_t stride = sizeof(float) * num_floats; + +    // copy floats +    memcpy(dst->floats, src->floats, stride * src->num_rows); + +    // copy bounds +    memcpy(dst->bounds, src->bounds, 2 * stride); +  } + +  // copy ints +  const size_t num_ints = src->shape.num_ints; +  if (num_ints > 0) { +    const size_t stride = sizeof(int) * num_ints; + +    // copy ints +    memcpy(dst->ints, src->ints, stride * src->num_rows); +  } + +  // increment row count +  dst->num_rows = src->num_rows; + +  // return success +  return true; +} + +bool  km_set_normalize(    km_set_t * const set  ) { @@ -64,6 +64,9 @@ void km_set_fini(km_set_t * const);  // append rows to data set, growing set if necessary  _Bool km_set_push(km_set_t *, const size_t, const float *, const int *); +// deep copy data set +_Bool km_set_copy(km_set_t * const, const km_set_t * const); +  // normalize data set  _Bool km_set_normalize(km_set_t * const);  | 
