#include <stdlib.h>
+#include <data/data-out.h>
#include <data/variable.h>
#include <libpspp/alloc.h>
#include <libpspp/compiler.h>
}
/* If VLS does not already contain a value label for VALUE, adds
- LABEL for it and returns nonzero. Otherwise, returns zero.
+ LABEL for it and returns true. Otherwise, returns false.
Behavior is undefined if VLS's width is greater than
MAX_SHORT_STRING. */
-int
+bool
val_labs_add (struct val_labs *vls, union value value, const char *label)
{
struct int_val_lab *ivl;
if (*vlpp == NULL)
{
*vlpp = ivl;
- return 1;
- }
- else
- {
- free_int_val_lab (ivl, vls);
- return 0;
+ return true;
}
+ free_int_val_lab (ivl, vls);
+ return false;
}
-/* Sets LABEL as the value label for VALUE in VLS. Returns zero
- if there wasn't already a value label for VALUE, or nonzero if
+/* Sets LABEL as the value label for VALUE in VLS. Returns false
+ if there wasn't already a value label for VALUE, or true if
there was. Behavior is undefined if VLS's width is greater
than MAX_SHORT_STRING. */
-int
+bool
val_labs_replace (struct val_labs *vls, union value value, const char *label)
{
struct int_val_lab *ivl;
if (vls->labels == NULL)
{
val_labs_add (vls, value, label);
- return 0;
+ return false;
}
ivl = hsh_replace (vls->labels, create_int_val_lab (vls, value, label));
if (ivl == NULL)
- return 0;
+ return false;
else
{
free_int_val_lab (ivl, vls);
- return 1;
+ return true;
}
}
-/* Removes any value label for VALUE within VLS. Returns nonzero
+/* Removes any value label for VALUE within VLS. Returns true
if a value label was removed. Behavior is undefined if VLS's
width is greater than MAX_SHORT_STRING. */
-int
+bool
val_labs_remove (struct val_labs *vls, union value value)
{
assert (vls != NULL);
return deleted;
}
else
- return 0;
+ return false;
}
/* Searches VLS for a value label for VALUE. If successful,
\f
/* Compares two value labels and returns a strcmp()-type result. */
int
-compare_int_val_lab (const void *a_, const void *b_, void *vls_)
+compare_int_val_lab (const void *a_, const void *b_, const void *vls_)
{
const struct int_val_lab *a = a_;
const struct int_val_lab *b = b_;
/* Hash a value label. */
unsigned
-hash_int_val_lab (const void *vl_, void *vls_)
+hash_int_val_lab (const void *vl_, const void *vls_)
{
const struct int_val_lab *vl = vl_;
const struct val_labs *vls = vls_;
/* Free a value label. */
void
-free_int_val_lab (void *vl_, void *vls_ UNUSED)
+free_int_val_lab (void *vl_, const void *vls_ UNUSED)
{
struct int_val_lab *vl = vl_;
/* A hsh_compare_func that compares A and B. */
static int
-compare_atoms (const void *a_, const void *b_, void *aux UNUSED)
+compare_atoms (const void *a_, const void *b_, const void *aux UNUSED)
{
const struct atom *a = a_;
const struct atom *b = b_;
/* A hsh_hash_func that hashes ATOM. */
static unsigned
-hash_atom (const void *atom_, void *aux UNUSED)
+hash_atom (const void *atom_, const void *aux UNUSED)
{
const struct atom *atom = atom_;
/* A hsh_free_func that destroys ATOM. */
static void
-free_atom (void *atom_, void *aux UNUSED)
+free_atom (void *atom_, const void *aux UNUSED)
{
struct atom *atom = atom_;
if (s == NULL)
{
static char buf[MAX_STRING + 1];
- data_out (buf, &var->print, val);
- buf[var->print.w] = '\0';
+ const struct fmt_spec *print = var_get_print_format (var);
+ data_out (val, print, buf);
+ buf[print->w] = '\0';
s = buf;
}