From: Ben Pfaff Date: Sat, 3 Mar 2012 18:46:37 +0000 (-0800) Subject: value-labels: New function val_labs_find_value(). X-Git-Url: https://pintos-os.org/cgi-bin/gitweb.cgi?p=pspp;a=commitdiff_plain;h=409300edc12ed72186b67704e529584d87fd91ba value-labels: New function val_labs_find_value(). The new data sheet implementation (in an upcoming commit) will use this. --- diff --git a/src/data/value-labels.c b/src/data/value-labels.c index 746e20908f..0b2ae3f632 100644 --- a/src/data/value-labels.c +++ b/src/data/value-labels.c @@ -1,5 +1,5 @@ /* PSPP - a program for statistical analysis. - Copyright (C) 1997-9, 2000, 2009, 2010, 2011 Free Software Foundation, Inc. + Copyright (C) 1997-9, 2000, 2009, 2010, 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 @@ -256,6 +256,35 @@ val_labs_lookup (const struct val_labs *vls, const union value *value) return (vls == NULL ? NULL : val_labs_lookup__ (vls, value, value_hash (value, vls->width, 0))); } + +/* Searches VLS for a value label whose label is exactly LABEL. If successful, + returns the corresponding value. Otherwise, returns a null pointer. + + Returns a null pointer if VLS is null. + + This function is O(n) in the number of labels in VLS. */ +const union value * +val_labs_find_value (const struct val_labs *vls, const char *label_) +{ + const union value *value = NULL; + + if (vls != NULL) + { + const struct val_lab *vl; + const char *label; + + label = intern_new (label_); + HMAP_FOR_EACH (vl, struct val_lab, node, &vls->labels) + if (vl->label == label) + { + value = &vl->value; + break; + } + intern_unref (label); + } + + return value; +} /* Returns the first value label in VLS, in arbitrary order, or a null pointer if VLS is empty or if VLS is a null pointer. If diff --git a/src/data/value-labels.h b/src/data/value-labels.h index f0f7ce0126..af98d9f9b5 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, 2011 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 @@ -93,6 +93,8 @@ size_t val_labs_count (const struct val_labs *); 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 *val_labs_find_value (const struct val_labs *, + const char *label); /* Basic properties. */ size_t val_labs_count (const struct val_labs *);