X-Git-Url: https://pintos-os.org/cgi-bin/gitweb.cgi?a=blobdiff_plain;f=src%2Fdata%2Fvalue-labels.h;h=61a42cff23f973a17c7f3aa974da48dea894f65b;hb=1a26ffe4489b411bda630d9e5b87e2d2e4538fdb;hp=d6f65d43c334d3b8657993af922cc26673cfe4a6;hpb=d0b91eae59319ab2756d0d43b9cb15eb9cd3c234;p=pspp diff --git a/src/data/value-labels.h b/src/data/value-labels.h index d6f65d43c3..61a42cff23 100644 --- a/src/data/value-labels.h +++ b/src/data/value-labels.h @@ -1,5 +1,5 @@ /* PSPP - a program for statistical analysis. - Copyright (C) 1997-9, 2000, 2009 Free Software Foundation, Inc. + Copyright (C) 1997-9, 2000, 2009, 2011, 2012 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 @@ -27,8 +27,8 @@ #include #include -#include -#include +#include "data/value.h" +#include "libpspp/hmap.h" /* One value label. @@ -39,6 +39,7 @@ struct val_lab struct hmap_node node; /* Node in hash map. */ union value value; /* The value being labeled. */ const char *label; /* An interned string. */ + const char *escaped_label; /* An interned string. */ }; /* Returns the value in VL. The caller must not modify or free @@ -52,19 +53,33 @@ static inline const union value *val_lab_get_value (const struct val_lab *vl) return &vl->value; } -/* Returns the label in VL. The caller must not modify or free the returned - value. */ +/* Returns the label in VL as a UTF-8 encoded interned string, in a format + appropriate for use in output. The caller must not modify or free the + returned value. */ static inline const char * val_lab_get_label (const struct val_lab *vl) { return vl->label; } + +/* Returns the label in VL as a UTF-8 encoded interned string. Any new-line + characters in the label's usual output form are represented in the returned + string as the two-byte sequence "\\n". This form is used on the VALUE + LABELS command, in system and portable files, and passed to val_labs_add() + and val_labs_replace(). + + The caller must not modify or free the returned value. */ +static inline const char * +val_lab_get_escaped_label (const struct val_lab *vl) +{ + return vl->escaped_label; +} /* A set of value labels. */ struct val_labs { int width; /* 0=numeric, otherwise string width. */ - struct hmap labels; /* Hash table of `struct int_val_lab's. */ + struct hmap labels; /* Hash table of `struct val_lab's. */ }; /* Creating and destroying sets of value labels. */ @@ -77,7 +92,9 @@ size_t val_labs_count (const struct val_labs *); /* Looking up value labels. */ const char *val_labs_find (const struct val_labs *, const union value *); struct val_lab *val_labs_lookup (const struct val_labs *, - const union value *); + const union value *); +const union value *val_labs_find_value (const struct val_labs *, + const char *label); /* Basic properties. */ size_t val_labs_count (const struct val_labs *); @@ -96,4 +113,8 @@ const struct val_lab *val_labs_next (const struct val_labs *, const struct val_lab *); const struct val_lab **val_labs_sorted (const struct val_labs *); +/* Properties of entire sets. */ +unsigned int val_labs_hash (const struct val_labs *, unsigned int basis) WARN_UNUSED_RESULT; +bool val_labs_equal (const struct val_labs *, const struct val_labs *); + #endif /* data/value-labels.h */