Change "union value" to dynamically allocate long strings.
[pspp-builds.git] / src / data / category.c
index 7190418c266f2d31083f12bb3717f4a61b370155..968dd4c52da8369e629fb2797faa056db4b67227 100644 (file)
@@ -1,5 +1,5 @@
 /* PSPP - a program for statistical analysis.
-   Copyright (C) 2005 Free Software Foundation, Inc.
+   Copyright (C) 2005, 2009 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
 #include <config.h>
 
 #include <assert.h>
+#include <data/category.h>
+#include <data/value.h>
+#include <data/variable.h>
+#include <gl/xalloc.h>
+#include <libpspp/message.h>
 #include <stdlib.h>
 #include <string.h>
 
-#include <libpspp/message.h>
-#include "category.h"
-#include "value.h"
-#include "variable.h"
-
-#include "xalloc.h"
-
 #define CAT_VALUE_NOT_FOUND -1
 
 #define N_INITIAL_CATEGORIES 1
@@ -108,7 +106,7 @@ cat_value_find (const struct variable *v, const union value *val)
     {
       candidate = obs_vals->vals + i;
       assert (candidate != NULL);
-      if (!compare_values (candidate, val, v))
+      if (value_equal (candidate, val, var_get_width (v)))
        {
          return i;
        }
@@ -182,3 +180,20 @@ cat_get_n_categories (const struct variable *v)
   return var_get_obs_vals (v)->n_categories;
 }
 
+/*
+  If VAR is categorical with d categories, its first category should
+  correspond to the origin in d-dimensional Euclidean space.
+ */
+bool
+cat_is_origin (const struct variable *var, const union value *val)
+{
+  if (var_is_numeric (var))
+    {
+      return false;
+    }
+  if (cat_value_find (var, val) == 0)
+    {
+      return true;
+    }
+  return false;
+}