X-Git-Url: https://pintos-os.org/cgi-bin/gitweb.cgi?a=blobdiff_plain;f=src%2Foutput%2Fcharts%2Fboxplot.h;h=bd5a7a32379b3b029babb89718b53908851f13eb;hb=006e4c8eef534aa82d28869a34c49a382076371d;hp=1e9d00706f88da4613e7b65aa727e23b832b861e;hpb=7c08a6e1009cf60847e770a77a73c650e9326379;p=pspp-builds.git diff --git a/src/output/charts/boxplot.h b/src/output/charts/boxplot.h index 1e9d0070..bd5a7a32 100644 --- a/src/output/charts/boxplot.h +++ b/src/output/charts/boxplot.h @@ -17,11 +17,92 @@ #ifndef OUTPUT_CHARTS_BOXPLOT_H #define OUTPUT_CHARTS_BOXPLOT_H 1 -struct box_whisker; +#include +#include + +/* Box-whiskers plot. */ +struct boxplot + { + struct chart_item chart_item; + + /* Data. */ + struct boxplot_box *boxes; + size_t n_boxes, boxes_allocated; + + /* Derived from data and convenient for plotting. */ + double y_min; /* Minimum Y coordinate of extremum. */ + double y_max; /* Maximum Y coordinate of extremum. */ + }; + +/* One box within a box-whiskers plot. */ +struct boxplot_box + { + struct box_whisker *bw; + char *label; /* Variable name or factor label. */ + }; struct boxplot *boxplot_create (double y_min, double y_max, const char *title); void boxplot_add_box (struct boxplot *, struct box_whisker *, const char *label); -struct chart *boxplot_get_chart (struct boxplot *); + +/* This boilerplate for boxplot, a subclass of chart_item, was + autogenerated by mk-class-boilerplate. */ + +#include +#include + +extern const struct chart_item_class boxplot_class; + +/* Returns true if SUPER is a boxplot, otherwise false. */ +static inline bool +is_boxplot (const struct chart_item *super) +{ + return super->class == &boxplot_class; +} + +/* Returns SUPER converted to boxplot. SUPER must be a boxplot, as + reported by is_boxplot. */ +static inline struct boxplot * +to_boxplot (const struct chart_item *super) +{ + assert (is_boxplot (super)); + return UP_CAST (super, struct boxplot, chart_item); +} + +/* Returns INSTANCE converted to chart_item. */ +static inline struct chart_item * +boxplot_super (const struct boxplot *instance) +{ + return CONST_CAST (struct chart_item *, &instance->chart_item); +} + +/* Increments INSTANCE's reference count and returns INSTANCE. */ +static inline struct boxplot * +boxplot_ref (const struct boxplot *instance) +{ + return to_boxplot (chart_item_ref (&instance->chart_item)); +} + +/* Decrements INSTANCE's reference count, then destroys INSTANCE if + the reference count is now zero. */ +static inline void +boxplot_unref (struct boxplot *instance) +{ + chart_item_unref (&instance->chart_item); +} + +/* Returns true if INSTANCE's reference count is greater than 1, + false otherwise. */ +static inline bool +boxplot_is_shared (const struct boxplot *instance) +{ + return chart_item_is_shared (&instance->chart_item); +} +static inline void +boxplot_submit (struct boxplot *instance) +{ + chart_item_submit (&instance->chart_item); +} + #endif /* output/charts/boxplot.h */