add isl_set_scan
authorSven Verdoolaege <skimo@kotnet.org>
Sat, 8 May 2010 17:08:10 +0000 (19:08 +0200)
committerSven Verdoolaege <skimo@kotnet.org>
Thu, 13 May 2010 16:53:54 +0000 (18:53 +0200)
isl_scan.c
isl_scan.h

index e708923..a687316 100644 (file)
@@ -210,37 +210,49 @@ error:
        return -1;
 }
 
-int isl_set_count(__isl_keep isl_set *set, isl_int *count)
+int isl_set_scan(__isl_take isl_set *set, struct isl_scan_callback *callback)
 {
        int i;
-       struct isl_counter cnt = { { &increment_counter } };
-
-       if (!set)
-               return -1;
 
-       isl_int_init(cnt.count);
+       if (!set || !callback)
+               goto error;
 
-       set = isl_set_copy(set);
        set = isl_set_cow(set);
        set = isl_set_make_disjoint(set);
        set = isl_set_compute_divs(set);
        if (!set)
                goto error;
 
-       isl_int_set_si(cnt.count, 0);
        for (i = 0; i < set->n; ++i)
                if (isl_basic_set_scan(isl_basic_set_copy(set->p[i]),
-                                       &cnt.callback) < 0)
+                                       callback) < 0)
                        goto error;
 
-       isl_int_set(*count, cnt.count);
-
        isl_set_free(set);
+       return 0;
+error:
+       isl_set_free(set);
+       return -1;
+}
+
+int isl_set_count(__isl_keep isl_set *set, isl_int *count)
+{
+       struct isl_counter cnt = { { &increment_counter } };
+
+       if (!set)
+               return -1;
+
+       isl_int_init(cnt.count);
+
+       isl_int_set_si(cnt.count, 0);
+       if (isl_set_scan(isl_set_copy(set), &cnt.callback) < 0)
+               goto error;
+
+       isl_int_set(*count, cnt.count);
        isl_int_clear(cnt.count);
 
        return 0;
 error:
-       isl_set_free(set);
        isl_int_clear(cnt.count);
        return -1;
 }
index 0097112..21a2499 100644 (file)
@@ -19,5 +19,6 @@ struct isl_scan_callback {
 
 int isl_basic_set_scan(struct isl_basic_set *bset,
        struct isl_scan_callback *callback);
+int isl_set_scan(__isl_take isl_set *set, struct isl_scan_callback *callback);
 
 #endif