output-item: Collapse the inheritance hierarchy into a single struct.
[pspp] / src / output / charts / plot-hist.h
index 1e5b59edb5d8458badf707b3f6c21a424afbc3c2..c1e0cddb0b4148e757fd72a3857055b5c0c2f8a4 100644 (file)
@@ -1,5 +1,5 @@
 /* PSPP - a program for statistical analysis.
-   Copyright (C) 2004, 2009 Free Software Foundation, Inc.
+   Copyright (C) 2004, 2009, 2011 Free Software Foundation, Inc.
 
    This program is free software: you can redistribute it and/or modify
    it under the terms of the GNU General Public License as published by
 #ifndef OUTPUT_PLOT_HIST_H
 #define OUTPUT_PLOT_HIST_H
 
+#include <gsl/gsl_histogram.h>
 #include <stdbool.h>
 
-struct chart;
-struct histogram;
+#include "output/chart.h"
+
+struct histogram_chart
+  {
+    struct chart chart;
+    gsl_histogram *gsl_hist;
+    double n;
+    double mean;
+    double stddev;
+    bool show_normal;
+  };
 
 /* Creates and returns a new chart that depicts a histogram of
    the data in HIST with the given LABEL.  Labels the histogram
    with each of N, MEAN, and STDDEV that is not SYSMIS.  If all
    three are not SYSMIS and SHOW_NORMAL is true, also draws a
    normal curve on the histogram. */
-struct chart *histogram_chart_create (const struct histogram *hist,
-                                      const char *label,
-                                      double n, double mean, double stddev,
+struct chart *histogram_chart_create (const gsl_histogram *,
+                                      const char *label, double n,
+                                      double mean, double stddev,
                                       bool show_normal);
+\f
+/* This boilerplate for histogram_chart, a subclass of chart, was
+   autogenerated by mk-class-boilerplate. */
+
+#include <assert.h>
+#include "libpspp/cast.h"
+
+extern const struct chart_class histogram_chart_class;
+
+/* Returns true if SUPER is a histogram_chart, otherwise false. */
+static inline bool
+is_histogram_chart (const struct chart *super)
+{
+  return super->class == &histogram_chart_class;
+}
+
+/* Returns SUPER converted to histogram_chart.  SUPER must be a histogram_chart, as
+   reported by is_histogram_chart. */
+static inline struct histogram_chart *
+to_histogram_chart (const struct chart *super)
+{
+  assert (is_histogram_chart (super));
+  return UP_CAST (super, struct histogram_chart, chart);
+}
+
+/* Returns INSTANCE converted to chart. */
+static inline struct chart *
+histogram_chart_super (const struct histogram_chart *instance)
+{
+  return CONST_CAST (struct chart *, &instance->chart);
+}
+
+/* Increments INSTANCE's reference count and returns INSTANCE. */
+static inline struct histogram_chart *
+histogram_chart_ref (const struct histogram_chart *instance)
+{
+  return to_histogram_chart (chart_ref (&instance->chart));
+}
+
+/* Decrements INSTANCE's reference count, then destroys INSTANCE if
+   the reference count is now zero. */
+static inline void
+histogram_chart_unref (struct histogram_chart *instance)
+{
+  chart_unref (&instance->chart);
+}
+
+/* Returns true if INSTANCE's reference count is greater than 1,
+   false otherwise. */
+static inline bool
+histogram_chart_is_shared (const struct histogram_chart *instance)
+{
+  return chart_is_shared (&instance->chart);
+}
 
+static inline void
+histogram_chart_submit (struct histogram_chart *instance)
+{
+  chart_submit (&instance->chart);
+}
+\f
 #endif /* output/plot-hist.h */