+ These functions may be used on an object only after calling
+ categoricals_done().
+*/
+double categoricals_get_weight_by_subscript (const struct categoricals *,
+ int subscript);
+const struct interaction *categoricals_get_interaction_by_subscript (
+ const struct categoricals *, int subscript);
+double categoricals_get_sum_by_subscript (const struct categoricals *,
+ int subscript);
+double categoricals_get_dummy_code_for_case (const struct categoricals *,
+ int subscript,
+ const struct ccase *);
+double categoricals_get_effects_code_for_case (const struct categoricals *,
+ int subscript,
+ const struct ccase *);
+
+
+/* "Long map".
+
+ These look up an interaction within a categoricals object on the basis of a
+ "category index". Interaction 0 in CAT with CAT_0 categories has indexes
+ [0, CAT_0 - 1], interaction 1 with CAT_1 categories has indexes [CAT_0,
+ CAT_0 + CAT_1 - 1], and so on. The indexes passed in must be in the range
+ [0, CAT_TOTAL - 1] where CAT_TOTAL is the total number of categories for the
+ object, as returned by categoricals_n_total().
+
+ These functions are useful for descriptive statistics.
+
+ These functions may be used on an object only after calling
+ categoricals_done().
+*/
+const struct ccase *categoricals_get_case_by_category_real (
+ const struct categoricals *, int iact, int n);
+void *categoricals_get_user_data_by_category_real (
+ const struct categoricals *, int iact, int n);
+
+int categoricals_get_value_index_by_category_real (
+ const struct categoricals *, int iact_idx, int cat_idx, int var_idx);
+
+void *categoricals_get_user_data_by_category (const struct categoricals *,
+ int category);
+const struct ccase *categoricals_get_case_by_category (
+ const struct categoricals *cat, int subscript);
+
+struct payload
+ {
+ void *(*create) (const void *aux1, void *aux2);
+ void (*update) (const void *aux1, void *aux2, void *user_data,
+ const struct ccase *, double weight);
+ void (*calculate) (const void *aux1, void *aux2, void *user_data);
+ void (*destroy) (const void *aux1, void *aux2, void *user_data);
+ };
+
+void categoricals_set_payload (struct categoricals *, const struct payload *,
+ const void *aux1, void *aux2);
+bool categoricals_isbalanced (const struct categoricals *);