r23022 - gnucash/trunk/src/report/report-system - Reports: Add collector-into-list function.. turns the idea of adding stuff to a

Geert Janssens gjanssens at code.gnucash.org
Sun Jun 2 06:31:39 EDT 2013


Author: gjanssens
Date: 2013-06-02 06:31:39 -0400 (Sun, 02 Jun 2013)
New Revision: 23022
Trac: http://svn.gnucash.org/trac/changeset/23022

Modified:
   gnucash/trunk/src/report/report-system/collectors.scm
   gnucash/trunk/src/report/report-system/test/test-collectors.scm
Log:
Reports: Add collector-into-list function.. turns the idea of adding stuff to a
list into a collector.

Author:    Peter Broadbery <p.broadbery at gmail.com>

Modified: gnucash/trunk/src/report/report-system/collectors.scm
===================================================================
--- gnucash/trunk/src/report/report-system/collectors.scm	2013-06-02 10:31:26 UTC (rev 23021)
+++ gnucash/trunk/src/report/report-system/collectors.scm	2013-06-02 10:31:39 UTC (rev 23022)
@@ -11,6 +11,7 @@
 (export make-collector)
 (export collector-accumulate-from)
 (export collector-count-from)
+(export collector-into-list)
 (export collector-per-property)
 (export collector-filtered-list)
 (export collector-split)
@@ -174,6 +175,12 @@
   (make-collector (lambda (x) (collector-count-from (+ total 1)))
 		  (lambda () total)))
 
+(define (collector-into-list)
+  (define (collect-into l)
+    (make-collector (lambda (x) (collect-into (cons x l)))
+		    (lambda () (reverse! l))))
+  (collect-into '()))
+
 (define (collector-per-property items make-property-filter make-per-property-collector)
   (let ((collectors (map (lambda (item)
 			   (cons (make-property-filter item)

Modified: gnucash/trunk/src/report/report-system/test/test-collectors.scm
===================================================================
--- gnucash/trunk/src/report/report-system/test/test-collectors.scm	2013-06-02 10:31:26 UTC (rev 23021)
+++ gnucash/trunk/src/report/report-system/test/test-collectors.scm	2013-06-02 10:31:39 UTC (rev 23022)
@@ -15,6 +15,7 @@
        (test test-slotset)
        (test test-collector-from-slotset)
        (test test-binary-search-lt)
+       (test test-collector-into-list)
        #t))
 
 
@@ -94,6 +95,15 @@
     (and (equal? '(10 4) (collector-add-all (make-list-collector (list c1 c2)) '(1 2 3 4))))))
 
 
+(define (test-collector-into-list)
+  (define (check l)
+    (equal? l (collector-add-all (collector-into-list) l)))
+  (logging-and (check '())
+       (check '(1))
+       (check '(1 2))
+       (check '(1 2 3))
+       (check '(1 2 3 4))))
+
 (define (test-collector-from-slotset)
   ;;(define (add-trace name collector)
   ;;   (collector-print #t name collector))



More information about the gnucash-changes mailing list