kdata_array_add,
    kdata_array_fill,
    kdata_array_fill_ydoubles,
    kdata_array_fill_ysizes,
    kdata_array_set — modify
    array data source
#include <cairo.h>
  
  #include <kplot.h>
int
  
  kdata_array_add(struct kdata
    *data, size_t pos, double
    y);
int
  
  kdata_array_fill(struct kdata
    *data, void *arg, void
    (*fp)(size_t, struct kpair *, void *));
int
  
  kdata_array_fill_ydoubles(struct kdata
    *data, const double *ys);
int
  
  kdata_array_fill_ysizes(struct kdata
    *data, const size_t *ys);
int
  
  kdata_array_set(struct kdata
    *data, size_t pos, double
    x, double y);
The kdata_array_add,
    kdata_array_fill,
    kdata_array_fill_ydoubles,
    kdata_array_fill_ysizes, and
    kdata_array_set functions modify the buffers of a
    data source created by
    kdata_array_alloc(3).
    kdata_array_fill invokes the
    fp function with each bucket provided by
    kdata_array_alloc,
    while kdata_array_add and
    kdata_array_fill directly modify the buckets at
    position pos. The
    kdata_array_fill_ydoubles and
    kdata_array_fill_ysizes set values to the
    corresponding array indices, which are assumed to be the same length as the
    data source (else the behaviour is undefined).
kdata_array_fill,
    kdata_array_fill_ydoubles,
    kdata_array_fill_ysizes, and
    kdata_array_set return 0 if they have any dependants
    whose update fails, the positions fall outside of the allocated boundaries,
    or the data source was not created with
    kdata_array_alloc(3);
    otherwise they return 1.