[elephant-cvs] CVS update: elephant/src/metaclasses.lisp
blee at common-lisp.net
blee at common-lisp.net
Thu Sep 16 04:19:13 UTC 2004
Update of /project/elephant/cvsroot/elephant/src
In directory common-lisp.net:/tmp/cvs-serv25836/src
Modified Files:
metaclasses.lisp
Log Message:
docstrings
changeover to buffer-streams
Date: Thu Sep 16 06:19:12 2004
Author: blee
Index: elephant/src/metaclasses.lisp
diff -u elephant/src/metaclasses.lisp:1.4 elephant/src/metaclasses.lisp:1.5
--- elephant/src/metaclasses.lisp:1.4 Thu Sep 2 09:15:48 2004
+++ elephant/src/metaclasses.lisp Thu Sep 16 06:19:12 2004
@@ -49,7 +49,8 @@
to user-defined classes and collections.)"))
(defclass persistent-metaclass (standard-class)
- ())
+ ()
+ (:documentation "Metaclass for persistent classes."))
(defclass persistent-slot-definition (standard-slot-definition)
())
@@ -81,6 +82,8 @@
:class)
(defmethod direct-slot-definition-class ((class persistent-metaclass) &rest initargs)
+ "Checks for the transient tag (and the allocation type)
+and chooses persistent or transient slot definitions."
(let ((allocation-key (getf initargs :allocation))
(transient-p (getf initargs :transient)))
(when (consp transient-p) (setq transient-p (car transient-p)))
@@ -94,9 +97,11 @@
(find-class 'persistent-direct-slot-definition)))))
(defmethod validate-superclass ((class persistent-metaclass) (super standard-class))
+ "Persistent classes may inherit from ordinary classes."
t)
(defmethod validate-superclass ((class standard-class) (super persistent-metaclass))
+ "Ordinary classes may NOT inherit from persistent classes."
nil)
(defgeneric persistent-p (class))
@@ -111,6 +116,8 @@
t)
(defmethod effective-slot-definition-class ((class persistent-metaclass) &rest initargs)
+ "Chooses the persistent or transient effective slot
+definition class depending on the keyword."
(let ((transient-p (getf initargs :transient)))
(when (consp transient-p) (setq transient-p (car transient-p)))
(cond (transient-p
@@ -193,17 +200,17 @@
(defmacro persistent-slot-reader (instance name)
`(progn
- (buffer-write-int (oid ,instance) *key-buf*)
- (let* ((key-length (serialize ,name *key-buf*))
- (buf (db-get-key-buffered
- (controller-db *store-controller*)
- (buffer-stream-buffer *key-buf*)
- key-length)))
- (if buf (deserialize buf)
- #+cmu
- (error 'unbound-slot :instance ,instance :slot ,name)
- #-cmu
- (error 'unbound-slot :instance ,instance :name ,name)))))
+ (with-buffer-streams (key-buf value-buf)
+ (buffer-write-int (oid ,instance) key-buf)
+ (serialize ,name key-buf)
+ (let ((buf (db-get-key-buffered
+ (controller-db *store-controller*)
+ key-buf value-buf)))
+ (if buf (deserialize buf)
+ #+cmu
+ (error 'unbound-slot :instance ,instance :slot ,name)
+ #-cmu
+ (error 'unbound-slot :instance ,instance :name ,name))))))
#+(or cmu sbcl)
(defun make-persistent-reader (name)
@@ -214,14 +221,14 @@
(defmacro persistent-slot-writer (new-value instance name)
`(progn
- (buffer-write-int (oid ,instance) *key-buf*)
- (let ((key-length (serialize ,name *key-buf*))
- (val-length (serialize ,new-value *out-buf*)))
+ (with-buffer-streams (key-buf value-buf)
+ (buffer-write-int (oid ,instance) key-buf)
+ (serialize ,name key-buf)
+ (serialize ,new-value value-buf)
(db-put-buffered (controller-db *store-controller*)
- (buffer-stream-buffer *key-buf*) key-length
- (buffer-stream-buffer *out-buf*) val-length
- :transaction *current-transaction*
- :auto-commit *auto-commit*)
+ key-buf value-buf
+ :transaction *current-transaction*
+ :auto-commit *auto-commit*)
,new-value)))
#+(or cmu sbcl)
@@ -233,13 +240,13 @@
(defmacro persistent-slot-boundp (instance name)
`(progn
- (buffer-write-int (oid ,instance) *key-buf*)
- (let* ((key-length (serialize ,name *key-buf*))
- (buf (db-get-key-buffered
- (controller-db *store-controller*)
- (buffer-stream-buffer *key-buf*)
- key-length)))
- (if buf T nil))))
+ (with-buffer-streams (key-buf value-buf)
+ (buffer-write-int (oid ,instance) key-buf)
+ (serialize ,name key-buf)
+ (let ((buf (db-get-key-buffered
+ (controller-db *store-controller*)
+ key-buf value-buf)))
+ (if buf T nil)))))
#+(or cmu sbcl)
(defun make-persistent-slot-boundp (name)
More information about the Elephant-cvs
mailing list