Rewrite expression code.
[pspp-builds.git] / src / vars-atr.c
index 3ce08b05ce753c69eb841c53482d5dc90f8dde68..9f2baf0ea1e6f4593decbfb9dd2da769de2b5873 100644 (file)
@@ -25,7 +25,7 @@
 #include "command.h"
 #include "dictionary.h"
 #include "do-ifP.h"
-#include "expr.h"
+#include "expressions/public.h"
 #include "file-handle.h"
 #include "hash.h"
 #include "misc.h"
@@ -81,7 +81,7 @@ compare_values (const union value *a, const union value *b, int width)
   if (width == 0) 
     return a->f < b->f ? -1 : a->f > b->f;
   else
-    return memcmp (a->s, b->s, width);
+    return memcmp (a->s, b->s, min(MAX_SHORT_STRING, width));
 }
 
 /* Create a hash of v */
@@ -93,7 +93,7 @@ hash_value(const union value  *v, int width)
   if ( 0 == width ) 
     id_hash = hsh_hash_double (v->f);
   else
-    id_hash = hsh_hash_bytes (v->s, width);
+    id_hash = hsh_hash_bytes (v->s, min(MAX_SHORT_STRING, width));
 
   return id_hash;
 }
@@ -233,7 +233,7 @@ is_user_missing (const union value *val, const struct variable *v)
 /* A hsh_compare_func that orders variables A and B by their
    names. */
 int
-compare_variables (const void *a_, const void *b_, void *foo UNUSED) 
+compare_var_names (const void *a_, const void *b_, void *foo UNUSED) 
 {
   const struct variable *a = a_;
   const struct variable *b = b_;
@@ -243,9 +243,30 @@ compare_variables (const void *a_, const void *b_, void *foo UNUSED)
 
 /* A hsh_hash_func that hashes variable V based on its name. */
 unsigned
-hash_variable (const void *v_, void *foo UNUSED) 
+hash_var_name (const void *v_, void *foo UNUSED) 
 {
   const struct variable *v = v_;
 
   return hsh_hash_string (v->name);
 }
+
+/* A hsh_compare_func that orders pointers to variables A and B
+   by their names. */
+int
+compare_var_ptr_names (const void *a_, const void *b_, void *foo UNUSED) 
+{
+  struct variable *const *a = a_;
+  struct variable *const *b = b_;
+
+  return strcmp ((*a)->name, (*b)->name);
+}
+
+/* A hsh_hash_func that hashes pointer to variable V based on its
+   name. */
+unsigned
+hash_var_ptr_name (const void *v_, void *foo UNUSED) 
+{
+  struct variable *const *v = v_;
+
+  return hsh_hash_string ((*v)->name);
+}