X-Git-Url: https://pintos-os.org/cgi-bin/gitweb.cgi?a=blobdiff_plain;f=src%2Fdata%2Fcase-map.c;h=b47d38e1dd1346df17454ed4c20f4dff432da806;hb=df1d194af32e35739355981252785e768f21ebb0;hp=2e1507edca750d0cc650d922168c8f1902e301b4;hpb=5610084f0ead4b6a7d53af239f4789ba60fda024;p=pspp diff --git a/src/data/case-map.c b/src/data/case-map.c index 2e1507edca..b47d38e1dd 100644 --- a/src/data/case-map.c +++ b/src/data/case-map.c @@ -72,6 +72,22 @@ insert_mapping (struct case_map *map, size_t from, size_t to) map->map[to] = from; } +/* Returns a copy of OLD, if OLD is nonnull, and otherwise returns NULL. */ +struct case_map * +case_map_clone (const struct case_map *old) +{ + if (!old) + return NULL; + + size_t n_values = caseproto_get_n_widths (old->proto); + struct case_map *new = xmalloc (sizeof *new); + *new = (struct case_map) { + .proto = caseproto_ref (old->proto), + .map = xmemdup (old->proto, n_values * sizeof *new->map), + }; + return new; +} + /* Destroys case map MAP. */ void case_map_destroy (struct case_map *map) @@ -134,9 +150,9 @@ case_map_create_input_translator (struct case_map *map, static const struct casereader_translator_class class = { translate_case, destroy_case_map, }; - return casereader_create_translator (subreader, - case_map_get_proto (map), - &class, map); + return casereader_translate_stateless (subreader, + case_map_get_proto (map), + &class, map); } /* Creates and returns a new casewriter. Cases written to the