[cl-prevalence-cvs] CVS update: cl-prevalence/src/managed-prevalence.lisp

Sven Van Caekenberghe scaekenberghe at common-lisp.net
Tue Oct 5 11:44:36 UTC 2004


Update of /project/cl-prevalence/cvsroot/cl-prevalence/src
In directory common-lisp.net:/tmp/cvs-serv1797/src

Modified Files:
	managed-prevalence.lisp 
Log Message:
added a fallback for find-object-with-slot in case there are no indexes

Date: Tue Oct  5 13:44:36 2004
Author: scaekenberghe

Index: cl-prevalence/src/managed-prevalence.lisp
diff -u cl-prevalence/src/managed-prevalence.lisp:1.2 cl-prevalence/src/managed-prevalence.lisp:1.3
--- cl-prevalence/src/managed-prevalence.lisp:1.2	Tue Oct  5 13:35:28 2004
+++ cl-prevalence/src/managed-prevalence.lisp	Tue Oct  5 13:44:36 2004
@@ -1,6 +1,6 @@
 ;;;; -*- mode: lisp -*-
 ;;;;
-;;;; $Id: managed-prevalence.lisp,v 1.2 2004/10/05 11:35:28 scaekenberghe Exp $
+;;;; $Id: managed-prevalence.lisp,v 1.3 2004/10/05 11:44:36 scaekenberghe Exp $
 ;;;;
 ;;;; The code in this file adds another layer above plain object prevalence.
 ;;;; We manage objects with ids in an organized fashion, adding an id counter and preferences.
@@ -58,18 +58,19 @@
     (when index
       (gethash id index))))
 
-(defgeneric find-object-with-slot (system class slot value)
-  (:documentation "Find and return the object in system of class with slot, null if not found"))
+(defgeneric find-object-with-slot (system class slot value &optional (test #'equalp))
+  (:documentation "Find and return the object in system of class with slot equal to value, null if not found"))
 
-(defmethod find-object-with-slot ((system prevalence-system) class slot value)
-  "Find and return the object in system of class with slot, null if not found.
-   This constitutes some duplicated effort with FIND-OBJECT-WITH-ID."
+(defmethod find-object-with-slot ((system prevalence-system) class slot value &optional (test #'equalp))
+  "Find and return the object in system of class with slot equal to value, null if not found"
   (let* ((index-name (get-objects-slot-index-name class slot))
 	 (index (get-root-object system index-name)))
-    (when index
-      (find-object-with-id system class (gethash value index)))))
+    (if index
+        (find-object-with-id system class (gethash value index))
+      (find value (find-all-objects system class) 
+            :key #'(lambda (object) (slot-value object slot)) :test test))))
 
-(defun tx-create-objects-slot-index (system class slot &optional (test 'equalp))
+(defun tx-create-objects-slot-index (system class slot &optional (test #'equalp))
   "Create an index for this object on this slot, with an optional test for the hash table (add existing objects)"
   (let ((index-name (get-objects-slot-index-name class slot)))
     (unless (get-root-object system index-name)





More information about the Cl-prevalence-cvs mailing list