Fixed the calculation of percentiles and added --syntax and --algorithm options
[pspp] / src / var.h
index bf2e4d5082c7c27af2151508e8d3553f68956366..faf2cd2bd55d5945b09a1f0ede395f5e47c7fe10 100644 (file)
--- a/src/var.h
+++ b/src/var.h
@@ -115,36 +115,6 @@ struct list_proc
     int vert;                  /* Whether to print the varname vertically. */
   };
 
-/* DESCRIPTIVES private data.  Note that the DESCRIPTIVES procedure also
-   has a transformation, descriptives_trns. */
-enum
-  {
-    /* As these are used as bit indexes, there must be 32 or fewer.
-       Be very careful in adjusting these, see the structure below
-       and the table in descriptives.q. */
-    dsc_mean = 0, dsc_semean, dsc_stddev, dsc_variance, dsc_kurt,
-    dsc_sekurt, dsc_skew, dsc_seskew, dsc_range, dsc_min,
-    dsc_max, dsc_sum, dsc_n_stats
-  };
-
-struct descriptives_proc
-  {
-    /* Miscellaneous. */
-    int dup;                   /* Finds duplicates in list of
-                                  variables. */
-    char zname[10];            /* Name for z-score variable. */
-
-    /* Counts. */
-    double valid, miss;                /* Valid, missing--general. */
-
-    /* Mean, moments about the mean. */
-    double X_bar, M2, M3, M4;
-    double min, max;
-
-    /* Statistics. */
-    double stats[dsc_n_stats]; /* Everything glommed together. */
-  };
-
 /* GET private data. */
 struct get_proc
   {
@@ -221,8 +191,6 @@ struct variable
     int index;                 /* Index into its dictionary's var[]. */
     int type;                   /* NUMERIC or ALPHA. */
 
-    /* Also important but parse_variables() doesn't need it.  Still,
-       check before reordering. */
     int width;                 /* Size of string variables in chars. */
     int fv, nv;                        /* Index into `value's, number of values. */
     unsigned init : 1;          /* 1=VFM must init and possibly reinit. */
@@ -246,7 +214,6 @@ struct variable
     union
       {
        struct crosstab_proc crs;
-       struct descriptives_proc dsc;
        struct frequencies_proc frq;
        struct list_proc lst;
        struct means_proc mns;
@@ -345,7 +312,10 @@ void dict_set_case_limit (struct dictionary *, int);
 
 int dict_get_next_value_idx (const struct dictionary *);
 size_t dict_get_case_size (const struct dictionary *);
+
 void dict_compact_values (struct dictionary *);
+size_t dict_get_compacted_value_cnt (const struct dictionary *);
+int *dict_get_compacted_idx_to_fv (const struct dictionary *);
 
 struct variable *const *dict_get_split_vars (const struct dictionary *);
 size_t dict_get_split_cnt (const struct dictionary *);
@@ -405,6 +375,7 @@ void cancel_temporary (void);
 /* Functions. */
 
 void dump_split_vars (const struct ccase *);
+typedef int (* is_missing_func )(const union value *, const struct variable *);
 
 int is_num_user_missing (double, const struct variable *);
 int is_str_user_missing (const unsigned char[], const struct variable *);
@@ -415,17 +386,16 @@ void copy_missing_values (struct variable *dest, const struct variable *src);
 \f
 /* Transformations. */
 
+struct trns_header;
+typedef int trns_proc_func (struct trns_header *, struct ccase *, int);
+typedef void trns_free_func (struct trns_header *);
+
 /* Header for all transformations. */
 struct trns_header
   {
-    /* Index into t_trns[]. */
-    int index;
-
-    /* Transformation proc. */
-    int (*proc) (struct trns_header *, struct ccase *);
-
-    /* Garbage collector proc. */
-    void (*free) (struct trns_header *);
+    int index;                  /* Index into t_trns[]. */
+    trns_proc_func *proc;       /* Transformation proc. */
+    trns_free_func *free;       /* Garbage collector proc. */
   };
 
 /* Array of transformations */
@@ -450,7 +420,6 @@ size_t var_set_get_cnt (struct var_set *vs);
 struct variable *var_set_get_var (struct var_set *vs, size_t idx);
 struct variable *var_set_lookup_var (struct var_set *vs, const char *name);
 void var_set_destroy (struct var_set *vs);
-
 \f
 /* Variable parsers. */
 
@@ -464,7 +433,7 @@ enum
     PV_NUMERIC = 0020,         /* Vars must be numeric. */
     PV_STRING = 0040,          /* Vars must be string. */
     PV_SAME_TYPE = 00100,      /* All vars must be the same type. */
-    PV_NO_SCRATCH = 00200,     /* Disallow scratch variables. */
+    PV_NO_SCRATCH = 00200      /* Disallow scratch variables. */
   };
 
 struct variable *parse_variable (void);