[elephant-cvs] CVS elephant/src/elephant

ieslick ieslick at common-lisp.net
Thu Mar 22 19:46:17 UTC 2007


Update of /project/elephant/cvsroot/elephant/src/elephant
In directory clnet:/tmp/cvs-serv2395

Modified Files:
	collections.lisp 
Log Message:
Henrik's re-fix to map-index for get-instances-by-value

--- /project/elephant/cvsroot/elephant/src/elephant/collections.lisp	2007/03/21 14:29:30	1.15
+++ /project/elephant/cvsroot/elephant/src/elephant/collections.lisp	2007/03/22 19:46:17	1.16
@@ -343,12 +343,18 @@
 	   (funcall fn k v))))))
 
 (defun lisp-compare<= (a b)
+  (assert (eq (type-of a) (type-of b)))
   (etypecase a
     (number (<= a b))
     (string (string<= a b))
     (persistent (<= (oid a) (oid b)))))
 
-(defmethod map-index (fn (index btree-index) &rest args &key (start nil start-supplied-p) (end nil end-supplied-p))
+(defun lisp-compare-eq (a b)
+  (assert (eq (type-of a) (type-of b)))
+  (assert (member (type-of a) '(number string persistent null) :test #'subtypep))
+  (eq a b))
+
+(defmethod map-index (fn (index btree-index) &rest args &key start end)
   "Like map-btree, but takes a function of three arguments key, value and primary key
    if you want to get at the primary key value, otherwise use map-btree"
   (declare (dynamic-extent args)
@@ -359,8 +365,7 @@
 	(labels ((next-range ()
 		   (multiple-value-bind (exists? skey val pkey) (cursor-pnext-nodup cur)
 		     (if (and exists? 
-			      (or (not end-supplied-p)
-				  (null end)
+			      (or (null end)
 				  (lisp-compare<= skey end)))
 		       (progn
 			 (funcall fn skey val pkey)
@@ -377,12 +382,13 @@
 			   (next-range))))))
 	  (declare (dynamic-extent next-range next-in-range))
 	  (multiple-value-bind (exists? skey val pkey)
-	      (if (and start-supplied-p (not (null start)))
-		  (cursor-pset-range cur start)
-		  (cursor-pfirst cur))
+	      (cond ((lisp-compare-eq start end)
+		     (cursor-pset cur start))
+		    ((null start)
+		     (cursor-pfirst cur))
+		    (t (cursor-pset-range cur start)))
 	    (if (and exists? 
-		     (or (not end-supplied-p)
-			 (null end)
+		     (or (null end)
 			 (lisp-compare<= skey end)))
 		(progn
 		  (funcall fn skey val pkey)




More information about the Elephant-cvs mailing list