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)
struct ccase;
struct dictionary;
-struct case_map *case_map_create (void);
+struct case_map *case_map_clone (const struct case_map *);
void case_map_destroy (struct case_map *);
struct ccase *case_map_execute (const struct case_map *, struct ccase *);