[rucksack-cvs] CVS rucksack

alemmens alemmens at common-lisp.net
Thu Nov 30 10:45:35 UTC 2006


Update of /project/rucksack/cvsroot/rucksack
In directory clnet:/tmp/cvs-serv9772

Modified Files:
	done.txt index.lisp rucksack.lisp 
Log Message:
FLET MAP-INDEX should be LABELS MAP-INDEXES (thanks Cyrus Harmon).

The :EQUAL parameter for MAP-INDEX-DATA wasn't handled correctly
for indexes with non-unique keys (reported by Cyrus Harmon).


--- /project/rucksack/cvsroot/rucksack/done.txt	2006/09/04 12:34:34	1.5
+++ /project/rucksack/cvsroot/rucksack/done.txt	2006/11/30 10:45:34	1.6
@@ -1,3 +1,11 @@
+* 2006-11-30
+
+- FLET MAP-INDEXES should be LABELS MAP-INDEXES (thanks to Cyrus Harmon)
+
+- The :EQUAL parameter for MAP-INDEX-DATA wasn't handled correctly
+  for indexes with non-unique keys (reported by Cyrus Harmon).
+
+
 * 2006-09-04
 
 - Take care of some differences between the MOP implementations of Lispworks
--- /project/rucksack/cvsroot/rucksack/index.lisp	2006/08/31 15:47:58	1.7
+++ /project/rucksack/cvsroot/rucksack/index.lisp	2006/11/30 10:45:34	1.8
@@ -1,4 +1,4 @@
-;; $Id: index.lisp,v 1.7 2006/08/31 15:47:58 alemmens Exp $
+;; $Id: index.lisp,v 1.8 2006/11/30 10:45:34 alemmens Exp $
 
 (in-package :rucksack)
 
@@ -99,7 +99,13 @@
   (if equal-supplied
       (let ((value (btree-search index equal :errorp nil :default-value index)))
         (unless (p-eql value index)
-          (funcall function equal value)))
+          (if (btree-unique-keys-p index)
+              ;; We have a single value: call FUNCTION directly.
+              (funcall function equal value)
+            ;; We have a persistent list of values: call FUNCTION for
+            ;; each element of that list.
+            (p-mapc (lambda (elt) (funcall function equal elt))
+                    value))))
     (apply #'map-btree index function :order order args)))
 
 
--- /project/rucksack/cvsroot/rucksack/rucksack.lisp	2006/08/31 20:09:18	1.16
+++ /project/rucksack/cvsroot/rucksack/rucksack.lisp	2006/11/30 10:45:34	1.17
@@ -1,4 +1,4 @@
-;; $Id: rucksack.lisp,v 1.16 2006/08/31 20:09:18 alemmens Exp $
+;; $Id: rucksack.lisp,v 1.17 2006/11/30 10:45:34 alemmens Exp $
 
 (in-package :rucksack)
 
@@ -826,21 +826,21 @@
                               (lambda (slot slot-index)
                                 (funcall function class slot slot-index)))))
     (let ((visited-p (make-hash-table)))
-      (flet ((map-indexes (class)
-               (unless (gethash class visited-p)
-                 (let ((slot-index-table (btree-search (slot-index-tables rucksack)
-                                                       (class-name class)
-                                                       :errorp nil)))
-                   (when slot-index-table
-                     (map-btree slot-index-table
-                                (lambda (slot slot-index)
-                                  (funcall function (class-name class)
-                                           slot
-                                           slot-index)))))
-                 (setf (gethash class visited-p) t)
-                 (when include-subclasses
-                   (mapc #'map-indexes
-                         (class-direct-subclasses class))))))
+      (labels ((map-indexes (class)
+                 (unless (gethash class visited-p)
+                   (let ((slot-index-table (btree-search (slot-index-tables rucksack)
+                                                         (class-name class)
+                                                         :errorp nil)))
+                     (when slot-index-table
+                       (map-btree slot-index-table
+                                  (lambda (slot slot-index)
+                                    (funcall function (class-name class)
+                                             slot
+                                             slot-index)))))
+                   (setf (gethash class visited-p) t)
+                   (when include-subclasses
+                     (mapc #'map-indexes
+                           (class-direct-subclasses class))))))
         (map-indexes (if (symbolp class) (find-class class) class))))))
 
 




More information about the rucksack-cvs mailing list