From 6b9ce07bad5d1d0b826c620163f777d55a1f47b3 Mon Sep 17 00:00:00 2001 From: Ben Pfaff Date: Sat, 3 Mar 2012 10:34:24 -0800 Subject: [PATCH] range-set: New macro RANGE_SET_FOR_EACH to make iteration easier. --- src/data/datasheet.c | 5 ++--- src/libpspp/range-set.h | 5 +++++ src/libpspp/sparse-xarray.c | 14 +++++--------- tests/libpspp/range-set-test.c | 5 ++--- 4 files changed, 14 insertions(+), 15 deletions(-) diff --git a/src/data/datasheet.c b/src/data/datasheet.c index bee55f0f77..b64df14563 100644 --- a/src/data/datasheet.c +++ b/src/data/datasheet.c @@ -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); diff --git a/src/libpspp/range-set.h b/src/libpspp/range-set.h index 5b79f0e6dd..64d888f7f2 100644 --- a/src/libpspp/range-set.h +++ b/src/libpspp/range-set.h @@ -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 ( diff --git a/src/libpspp/sparse-xarray.c b/src/libpspp/sparse-xarray.c index 12509fdff5..0cc91c63cd 100644 --- a/src/libpspp/sparse-xarray.c +++ b/src/libpspp/sparse-xarray.c @@ -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); diff --git a/tests/libpspp/range-set-test.c b/tests/libpspp/range-set-test.c index c1fc708d50..c7a89176e6 100644 --- a/tests/libpspp/range-set-test.c +++ b/tests/libpspp/range-set-test.c @@ -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"); -- 2.30.2