* range-set.c (range_set_clone): New function.
authorBen Pfaff <blp@gnu.org>
Mon, 4 Jun 2007 01:22:47 +0000 (01:22 +0000)
committerBen Pfaff <blp@gnu.org>
Mon, 4 Jun 2007 01:22:47 +0000 (01:22 +0000)
* tests/range-set-test.c: Also test the range_set_clone function.

src/libpspp/ChangeLog
src/libpspp/range-set.c
src/libpspp/range-set.h
tests/ChangeLog
tests/libpspp/range-set-test.c

index acdad2318dfdf039f12228ca52782f4f0530293e..c125ac413bf7661bfd7edd384c3fa083e4b258e5 100644 (file)
@@ -1,5 +1,7 @@
 2007-06-03  Ben Pfaff  <blp@gnu.org>
 
+       * range-set.c (range_set_clone): New function.
+
        * array.c (insert_range): New function.
        (insert_element): New function.
        (move_range): New function.
index 4e7d6d2fc890c4b434acfb54f93d793106d57c5a..dc123d9b39bb58c04b8b701238677c7076da05e3 100644 (file)
@@ -100,6 +100,20 @@ range_set_create_pool (struct pool *pool)
   return rs;
 }
 
+/* Creates and returns a clone of OLD range set in the given POOL
+   (which may be null). */
+struct range_set *
+range_set_clone (const struct range_set *old, struct pool *pool)
+{
+  struct range_set *new;
+  struct range_set_node *node;
+
+  new = range_set_create_pool (pool);
+  for (node = first_node (old); node != NULL; node = next_node (old, node)) 
+    insert_node (new, node->start, node->end);
+  return new;
+}
+
 /* Destroys range set RS. */
 void
 range_set_destroy (struct range_set *rs) 
index b6b60a4490aaf7215aa2f9fe9dd0f2a4e5331f4a..1b9fea50ea428d4d521d9983bb52d1aae744fd1c 100644 (file)
@@ -32,6 +32,7 @@ struct pool;
 
 struct range_set *range_set_create (void);
 struct range_set *range_set_create_pool (struct pool *);
+struct range_set *range_set_clone (const struct range_set *, struct pool *);
 void range_set_destroy (struct range_set *);
 
 void range_set_insert (struct range_set *,
index 2801b7b2343d78703d0631d796539f86f7928934..5c89d0da36055f539ab32c91fa71da4e35e55f6d 100644 (file)
@@ -1,3 +1,7 @@
+2007-06-03  Ben Pfaff  <blp@gnu.org>
+
+       * tests/range-set-test.c: Also test the range_set_clone function.
+
 2007-05-06  Ben Pfaff  <blp@gnu.org>
 
        Abstract the documents within a dictionary a little better.
index b1c7451ecc5b5010cc8ef4b0d34eeead23cab509..1aa87760083e56706133b74aceb2ed449c723ec4 100644 (file)
@@ -202,14 +202,17 @@ test_insert (void)
     for (i = 0; i < positions + 1; i++)
       for (j = i; j <= positions + 1; j++)
         {
-          struct range_set *rs;
+          struct range_set *rs, *rs2;
           unsigned int final_pat;
 
           rs = make_pattern (init_pat);
           range_set_insert (rs, i, j - i);
           final_pat = init_pat | bit_range (i, j - i);
           check_pattern (rs, final_pat);
+          rs2 = range_set_clone (rs, NULL);
+          check_pattern (rs2, final_pat);
           range_set_destroy (rs);
+          range_set_destroy (rs2);
         }
 }