value: New function value_clone_pool().
authorBen Pfaff <blp@cs.stanford.edu>
Fri, 2 Apr 2010 23:47:14 +0000 (16:47 -0700)
committerBen Pfaff <blp@cs.stanford.edu>
Mon, 12 Apr 2010 04:52:25 +0000 (21:52 -0700)
src/data/value.c
src/data/value.h

index 6dbecb11abfca8137bc8fdc763ffc1c0a8568bc2..422639b17819375f9f3619cdb8490e377468e730 100644 (file)
@@ -1,5 +1,5 @@
 /* PSPP - a program for statistical analysis.
-   Copyright (C) 1997-9, 2000, 2009 Free Software Foundation, Inc.
+   Copyright (C) 1997-9, 2000, 2009, 2010 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
@@ -211,6 +211,22 @@ value_init_pool (struct pool *pool, union value *value, int width)
     value->long_string = pool_alloc_unaligned (pool, width);
 }
 
+/* Same as value_clone(), except that memory for VALUE (if necessary) is
+   allocated from POOL and will be freed automatically when POOL is destroyed.
+
+   VALUE must not be freed manually by calling value_destroy().  If it needs to
+   be resized, it must be done using value_resize_pool() instead of
+   value_resize(). */
+void
+value_clone_pool (struct pool *pool,
+                  union value *value, const union value *src, int width)
+{
+  if (width > MAX_SHORT_STRING)
+    value->long_string = pool_clone_unaligned (pool, src->long_string, width);
+  else
+    *value = *src;
+}
+
 /* Same as value_resize, except that VALUE must have been
    allocated from POOL using value_init_pool.
 
index 61df087754b1e78327f2fbb02453ddf8ab8f9e9f..9205bc1a031feec0bee4d6858ca5af3b2e3d0b2e 100644 (file)
@@ -81,6 +81,8 @@ static inline void value_swap (union value *, union value *);
 
 struct pool;
 void value_init_pool (struct pool *, union value *, int width);
+void value_clone_pool (struct pool *, union value *, const union value *,
+                       int width);
 void value_resize_pool (struct pool *, union value *,
                         int old_width, int new_width);
 \f