[elephant-cvs] CVS elephant/src/elephant

Update of /project/elephant/cvsroot/elephant/src/elephant In directory clnet:/tmp/cvs-serv21893/src/elephant Modified Files: package.lisp serializer2.lisp Added Files: pset.lisp Log Message: Trial pset abstraction; fix for debug serialize of complex and more documentation edits --- /project/elephant/cvsroot/elephant/src/elephant/package.lisp 2007/04/01 20:56:19 1.28 +++ /project/elephant/cvsroot/elephant/src/elephant/package.lisp 2007/04/06 02:51:48 1.29 @@ -206,6 +206,8 @@ #:persistent #:persistent-object #:persistent-metaclass #:defpclass #:persistent-collection #:drop-pobject + #:pset #:make-pset #:insert-item #:remove-item #:map-pset #:find-item #:pset-list + #:btree #:make-btree #:get-value #:remove-kv #:existsp #:indexed-btree #:make-indexed-btree --- /project/elephant/cvsroot/elephant/src/elephant/serializer2.lisp 2007/04/04 15:28:29 1.36 +++ /project/elephant/cvsroot/elephant/src/elephant/serializer2.lisp 2007/04/06 02:51:48 1.37 @@ -368,7 +368,8 @@ (,+object+ . "standard object") (,+array+ . "array") (,+struct+ . "struct") - (,+class+ . "class"))) + (,+class+ . "class") + (,+complex+ . "complex"))) (defun enable-deserializer-tracing () (setf *trace-deserializer* t)) --- /project/elephant/cvsroot/elephant/src/elephant/pset.lisp 2007/04/06 02:51:48 NONE +++ /project/elephant/cvsroot/elephant/src/elephant/pset.lisp 2007/04/06 02:51:48 1.1 (in-package :elephant) ;; ;; Simple implementation of persistent sets ;; ;; ;; Public API ;; (defclass pset (persistent-collection) () (:documentation "An unordered persistent collection of unique elements according to serializer equal comparison")) (defgeneric insert-item (item pset) (:documentation "Insert a new item into the pset")) (defgeneric remove-item (item pset) (:documentation "Remove specified item from pset")) (defgeneric map-pset (fn pset) (:documentation "Map operator for psets")) (defgeneric find-item (item pset &key key test) (:documentation "Find a an item in the pset using key and test")) (defgeneric pset-list (pset) (:documentation "Convert items of pset into a list for processing")) (defgeneric build-pset (sc) (:documentation "Construct an empty default pset or backend specific pset. This is an internal function used by make-pset")) ;; NOTE: Other operators? ;; - Efficient union, intersection and difference fn's exploiting an underlying ;; sorted order? ;; - map delete operator? ;; ;; Default implementation based on btrees ;; (defclass default-pset (pset) ((btree :accessor pset-btree :initarg :btree))) (defmethod build-pset ((sc store-controller)) "Default pset method; override if backend has better policy" (let ((btree (make-btree sc))) (make-instance 'default-pset :btree btree :sc sc :from-oid (oid btree)))) (defun make-pset (&key items pset (sc *store-controller*)) (let ((new-pset (build-pset sc))) (when (and items pset) (error "Can only initialize a new pset with item list or pset to copy, not both")) (when items (mapc (lambda (item) (insert-item item new-pset)) items)) (when pset (map-pset (lambda (item) (insert-item item new-pset)) pset)) new-pset)) (defmethod insert-item (item (pset default-pset)) (setf (get-value item (pset-btree pset)) t) item) (defmethod remove-item (item (pset default-pset)) (remove-kv item (pset-btree pset)) item) (defmethod find-item (item (pset default-pset) &key key (test #'equal)) (if (not (or key test)) (get-value item (pset-btree pset)) (map-btree (lambda (elt dc) (declare (ignore dc)) (let ((cmpval (if key (funcall key elt) elt))) (if (funcall test item cmpval) (return-from find-item elt)))) (pset-btree pset)))) (defmethod map-pset (fn (pset default-pset)) (map-btree fn (pset-btree pset)) pset) (defmethod pset-list ((pset default-pset)) (let ((list nil)) (flet ((collect (item) (push item list))) (declare (dynamic-extent collect)) (map-btree (lambda (item dc) (declare (ignore dc)) (push item list)) (pset-btree pset))) list))
participants (1)
-
ieslick