Update of /project/elephant/cvsroot/elephant/src/elephant In directory clnet:/tmp/cvs-serv9316/src/elephant
Modified Files: migrate.lisp serializer2.lisp Added Files: gc.lisp Log Message: Added support for complex serialization (no sorting), latest doc changes and a preliminary GC wrapper
--- /project/elephant/cvsroot/elephant/src/elephant/migrate.lisp 2007/03/24 10:49:59 1.13 +++ /project/elephant/cvsroot/elephant/src/elephant/migrate.lisp 2007/04/04 15:28:29 1.14 @@ -42,8 +42,9 @@ ;; - Migrate keeps a memory-resident hash of all persistent objects; ;; this is not as bad as it sounds as an object is only an oid reference ;; and a pointer to the store controller it belongs to. However, you -;; may eventually run out of heap space for very large DB's. We can use -;; the old DB to store the mappings if this becomes a problem. +;; may eventually run out of heap space for very large DB's. You can use +;; a third store controller to get around this by setting set-oid-spec to +;; a valid, uncreated store specification. ;; ;; - Each top-level call to migration will be good about keeping track ;; of already copied persistent objects. However the hash is not --- /project/elephant/cvsroot/elephant/src/elephant/serializer2.lisp 2007/03/30 23:36:53 1.35 +++ /project/elephant/cvsroot/elephant/src/elephant/serializer2.lisp 2007/04/04 15:28:29 1.36 @@ -80,6 +80,7 @@ (defconstant +array+ 19) (defconstant +struct+ 20) (defconstant +class+ 21) +(defconstant +complex+ 22)
;; Lispworks support (defconstant +short-float+ 30) @@ -251,6 +252,10 @@ (let ((pstring (namestring frob))) (buffer-write-byte +pathname+ bs) (serialize-string pstring bs))) + (complex + (buffer-write-byte +complex+ bs) + (%serialize (realpart frob)) + (%serialize (imagpart frob))) (hash-table (buffer-write-byte +hash-table+ bs) (let ((idp (gethash frob circularity-hash))) @@ -459,6 +464,10 @@ (setf (car c) (%deserialize bs)) (setf (cdr c) (%deserialize bs)) c)))) + ((= tag +complex+) + (let ((rpart (%deserialize bs)) + (ipart (%deserialize bs))) + (complex rpart ipart))) ((= tag +hash-table+) (let* ((id (buffer-read-fixnum bs)) (maybe-hash (lookup-id id)))
--- /project/elephant/cvsroot/elephant/src/elephant/gc.lisp 2007/04/04 15:28:29 NONE +++ /project/elephant/cvsroot/elephant/src/elephant/gc.lisp 2007/04/04 15:28:29 1.1 (in-package :elephant)
(defgeneric stop-and-copy-gc (sc &key &allow-other-keys) (:documentation "Wrap all the migrate machinery in a simple top-level gc call. This will copy all the data in the source store to the target store"))
(defmethod stop-and-copy-gc ((src store-controller) &key target mapspec replace-source delete-source) (when map-spec (set-oid-spec mapspec)) (let ((target (gc-open-target sc target-spec)) (src-spec (controller-spec src))) (migrate target src) (when map-spec (set-oid-spec nil) (delete-spec mapspec)) (when (or replace-source delete-source) (close-store src) (delete-spec src)) (when replace-source (copy-spec source target))))
(defun delete-spec (spec) "Delete the storage associated with spec" )
(defun copy-spec (src targ) "Copy files associated with spec from src to targ" )