X-Git-Url: https://pintos-os.org/cgi-bin/gitweb.cgi?a=blobdiff_plain;f=src%2Fmath%2Finteraction.h;h=ec6f88b03b6dc06571a9413d73843b1bfbea97df;hb=259b5c32c06fd93964720f4a0e7844b5a24c55db;hp=bc1e63a42e92777e3d6f79e3a81a59996b1388c2;hpb=a1efcf97ca2f75f4be6a0389ff2372c03ed2d4e1;p=pspp diff --git a/src/math/interaction.h b/src/math/interaction.h index bc1e63a42e..ec6f88b03b 100644 --- a/src/math/interaction.h +++ b/src/math/interaction.h @@ -1,5 +1,5 @@ /* PSPP - a program for statistical analysis. - Copyright (C) 2009 Free Software Foundation, Inc. + Copyright (C) 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 @@ -14,15 +14,58 @@ You should have received a copy of the GNU General Public License along with this program. If not, see . */ -#ifndef INTERACTION_H -#define INTERACTION_H -struct interaction_variable; -struct interaction_value; -struct interaction_variable * interaction_variable_create (const struct variable **, int); -void interaction_variable_destroy (struct interaction_variable *); -struct interaction_value * interaction_value_create (const struct interaction_variable *, const union value **); -void interaction_value_destroy (struct interaction_value *); -size_t interaction_variable_get_n_vars (const struct interaction_variable *); +#ifndef _INTERACTION_H__ +#define _INTERACTION_H__ 1 + +#include +#include "data/missing-values.h" + +struct ccase; +struct interaction; +struct string; +struct variable; + +#include + +/* An interaction is a structure containing a "product" of other variables. + The variables can be either string or numeric. + + Interaction is commutative. That means, that from a mathematical point of + view, the order of the variables is irrelevant. However, for display + purposes, and for matching with an interaction's value the order is + pertinent. Therefore, when using these functions, make sure the orders of + variables and values match when appropriate. + + Some functions for interactions will not work properly for interactions that + contain a given variable more than once, so this should be regarded as an + invariant. The functions to modify interactions don't check for this + invariant. */ +struct interaction + { + const struct variable **vars; + size_t n_vars; + }; + +struct interaction *interaction_create (const struct variable *); +struct interaction *interaction_clone (const struct interaction *); +void interaction_destroy (struct interaction *); +void interaction_add_variable (struct interaction *, const struct variable *); +void interaction_dump (const struct interaction *); +void interaction_to_string (const struct interaction *, struct string *str); +bool interaction_is_proper_subset (const struct interaction *, + const struct interaction *); +bool interaction_is_subset (const struct interaction *, + const struct interaction *); + + +unsigned int interaction_case_hash (const struct interaction *, + const struct ccase *, unsigned int base); +bool interaction_case_equal (const struct interaction *, const struct ccase *, + const struct ccase *); +bool interaction_case_is_missing (const struct interaction *, + const struct ccase *, enum mv_class); +int interaction_case_cmp_3way (const struct interaction *, + const struct ccase *, const struct ccase *); #endif