You should have received a copy of the GNU General Public License
along with this program; if not, write to the Free Software
- Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA
- 02111-1307, USA. */
+ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301, USA. */
#include <config.h>
#include "value-labels.h"
-#include <assert.h>
+#include "error.h"
#include <stdlib.h>
-#include <string.h>
#include "alloc.h"
#include "hash.h"
+#include "str.h"
static hsh_compare_func compare_int_val_lab;
static hsh_hash_func hash_int_val_lab;
/* Returns the number of value labels in VLS. */
size_t
-val_labs_count (struct val_labs *vls)
+val_labs_count (const struct val_labs *vls)
{
assert (vls != NULL);
if (vls->labels != NULL)
{
struct int_val_lab *ivl = create_int_val_lab (vls, value, "");
- int deleted = hsh_delete (vls->labels, &ivl);
+ int deleted = hsh_delete (vls->labels, ivl);
free (ivl);
return deleted;
}
free (atom->string);
free (atom);
}
+
+
+/* Get a string representing the value.
+ That is, if it has a label, then return that label,
+ otherwise, if the value is alpha, then return the string for it,
+ else format it and return the formatted string
+*/
+const char *
+value_to_string (const union value *val, const struct variable *var)
+{
+ char *s;
+
+ assert (val != NULL);
+ assert (var != NULL);
+
+ s = val_labs_find (var->val_labs, *val);
+ if (s == NULL)
+ {
+ static char buf[256];
+ if (var->width != 0)
+ str_copy_buf_trunc (buf, sizeof buf, val->s, var->width);
+ else
+ snprintf(buf, 100, "%g", val->f);
+ s = buf;
+ }
+
+ return s;
+}