From: Ben Pfaff Date: Wed, 14 Jan 2009 04:41:54 +0000 (-0800) Subject: Put unique dictionary indexes into internal variables X-Git-Tag: v0.7.1~7 X-Git-Url: https://pintos-os.org/cgi-bin/gitweb.cgi?p=pspp-builds.git;a=commitdiff_plain;h=486e95574d796cd1ce703aff4bc5b8f9f3021333 Put unique dictionary indexes into internal variables Code that Jason is working on creates some internal variables, using var_create_internal(), and wants to hash those variables based on their dictionary indexes, along with some other variables that are actually in a dictionary. Thus, the internal variables need to have unique dictionary indexes. --- diff --git a/src/data/variable.c b/src/data/variable.c index ccbe65dc..30cf03b1 100644 --- a/src/data/variable.c +++ b/src/data/variable.c @@ -1,5 +1,5 @@ /* PSPP - a program for statistical analysis. - Copyright (C) 1997-9, 2000, 2006 Free Software Foundation, Inc. + Copyright (C) 1997-9, 2000, 2006, 2009 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 @@ -148,17 +148,21 @@ var_clone (const struct variable *old_var) return new_var; } -/* Create a variable to be used for internal calculations only */ +/* Create a variable to be used for internal calculations only. + The variable is assigned a unique dictionary index and a case + index of CASE_IDX. */ struct variable * var_create_internal (int case_idx) { struct variable *v = var_create ("$internal", 0); - struct vardict_info vdi; + static int counter = INT_MAX / 2; vdi.dict = NULL; - vdi.dict_index = 0; vdi.case_index = case_idx; + vdi.dict_index = counter++; + if (counter == INT_MAX) + counter = INT_MAX / 2; var_set_vardict (v, &vdi);