range-set: New macro RANGE_SET_FOR_EACH to make iteration easier.
authorBen Pfaff <blp@cs.stanford.edu>
Sat, 3 Mar 2012 18:34:24 +0000 (10:34 -0800)
committerBen Pfaff <blp@cs.stanford.edu>
Sat, 21 Apr 2012 04:39:52 +0000 (21:39 -0700)
src/data/datasheet.c
src/libpspp/range-set.h
src/libpspp/sparse-xarray.c
tests/libpspp/range-set-test.c

index bee55f0f77ff5ae1d8ddd2cc5908be0cea217435..b64df14563865875b7d60374f515007d87353b28 100644 (file)
@@ -1,5 +1,5 @@
 /* PSPP - a program for statistical analysis.
-   Copyright (C) 2007, 2009, 2010, 2011 Free Software Foundation, Inc.
+   Copyright (C) 2007, 2009, 2010, 2011, 2012 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
@@ -926,8 +926,7 @@ axis_hash (const struct axis *axis, struct md4_ctx *ctx)
       md4_process_bytes (&size, sizeof size, ctx);
     }
 
-  for (rsn = range_set_first (axis->available); rsn != NULL;
-       rsn = range_set_next (axis->available, rsn))
+  RANGE_SET_FOR_EACH (rsn, axis->available)
     {
       unsigned long int start = range_set_node_get_start (rsn);
       unsigned long int end = range_set_node_get_end (rsn);
index 5b79f0e6ddf213e26087dc20d1ee83dcb2d1f14b..64d888f7f2cc316b2259062369b3793b5c624137 100644 (file)
@@ -67,6 +67,11 @@ unsigned long int range_set_scan (const struct range_set *,
 
 static inline bool range_set_is_empty (const struct range_set *);
 
+#define RANGE_SET_FOR_EACH(NODE, RANGE_SET)             \
+        for ((NODE) = range_set_first (RANGE_SET);      \
+             (NODE) != NULL;                            \
+             (NODE) = range_set_next (RANGE_SET, NODE))
+
 static inline const struct range_set_node *range_set_first (
   const struct range_set *);
 static inline const struct range_set_node *range_set_next (
index 12509fdff529cc0600318f4d1048342374140516..0cc91c63cd1fa9ab7d34b36e5d50b2b44d7573b5 100644 (file)
@@ -1,5 +1,5 @@
 /* PSPP - a program for statistical analysis.
-   Copyright (C) 2007, 2009, 2010, 2011 Free Software Foundation, Inc.
+   Copyright (C) 2007, 2009, 2010, 2011, 2012 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
@@ -105,8 +105,7 @@ sparse_xarray_clone (const struct sparse_xarray *old)
 
       new->disk = ext_array_create ();
       new->disk_rows = range_set_clone (old->disk_rows, NULL);
-      for (node = range_set_first (old->disk_rows); node != NULL;
-           node = range_set_next (old->disk_rows, node))
+      RANGE_SET_FOR_EACH (node, old->disk_rows)
         {
           unsigned long int start = range_set_node_get_start (node);
           unsigned long int end = range_set_node_get_end (node);
@@ -336,8 +335,7 @@ sparse_xarray_write_columns (struct sparse_xarray *sx, size_t start,
     {
       const struct range_set_node *node;
 
-      for (node = range_set_first (sx->disk_rows); node != NULL;
-           node = range_set_next (sx->disk_rows, node))
+      RANGE_SET_FOR_EACH (node, sx->disk_rows)
         {
           unsigned long int start_row = range_set_node_get_start (node);
           unsigned long int end_row = range_set_node_get_end (node);
@@ -446,8 +444,7 @@ sparse_xarray_copy (const struct sparse_xarray *sx, struct sparse_xarray *dx,
           const struct range_set_node *node;
           void *tmp = xmalloc (sx->n_bytes);
 
-          for (node = range_set_first (sx->disk_rows); node != NULL;
-               node = range_set_next (sx->disk_rows, node))
+          RANGE_SET_FOR_EACH (node, sx->disk_rows)
             {
               unsigned long int start = range_set_node_get_start (node);
               unsigned long int end = range_set_node_get_end (node);
@@ -587,8 +584,7 @@ sparse_xarray_model_checker_hash (const struct sparse_xarray *sx,
       void *tmp = xmalloc (sx->n_bytes);
 
       md4_process_bytes ("d", 1, &ctx);
-      for (node = range_set_first (sx->disk_rows); node != NULL;
-           node = range_set_next (sx->disk_rows, node))
+      RANGE_SET_FOR_EACH (node, sx->disk_rows)
         {
           unsigned long int start = range_set_node_get_start (node);
           unsigned long int end = range_set_node_get_end (node);
index c1fc708d503dc0e80d29b16c672e951f85b4ed76..c7a89176e68e996dfe34110d785f7da5e2ebd112 100644 (file)
@@ -1,5 +1,5 @@
 /* PSPP - a program for statistical analysis.
-   Copyright (C) 2007, 2009, 2010, 2011 Free Software Foundation, Inc.
+   Copyright (C) 2007, 2009, 2010, 2011, 2012 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
@@ -163,8 +163,7 @@ print_regions (const struct range_set *rs)
   const struct range_set_node *node;
 
   printf ("result:");
-  for (node = range_set_first (rs); node != NULL;
-       node = range_set_next (rs, node))
+  RANGE_SET_FOR_EACH (node, rs)
     printf (" (%lu,%lu)",
             range_set_node_get_start (node), range_set_node_get_end (node));
   printf ("\n");