[elephant-cvs] CVS update: elephant/src/collections.lisp

blee at common-lisp.net blee at common-lisp.net
Fri Aug 27 02:58:28 UTC 2004


Update of /project/elephant/cvsroot/elephant/src
In directory common-lisp.net:/tmp/cvs-serv23923/src

Modified Files:
	collections.lisp 
Log Message:
integrated with new serializer

Date: Thu Aug 26 19:58:28 2004
Author: blee

Index: elephant/src/collections.lisp
diff -u elephant/src/collections.lisp:1.1.1.1 elephant/src/collections.lisp:1.2
--- elephant/src/collections.lisp:1.1.1.1	Thu Aug 19 10:05:14 2004
+++ elephant/src/collections.lisp	Thu Aug 26 19:58:28 2004
@@ -3,93 +3,51 @@
 ;;; collection types
 ;;; abstract hash-like collections
 ;;; equal hashing (except probably for array, hashe, instance keys!)
-(defclass collection ()
-  ((%db :accessor db))
-  (:metaclass persistent-metaclass))
-
-(defmethod initialize-instance :before ((instance collection)
-					&rest initargs
-					&key store-controller
-					&allow-other-keys)
-  (declare (ignore initargs))
-  (setf (get-store-controller instance) store-controller))
-
-(defmethod initialize-instance :after ((instance collection)
-				       &rest initargs)
-  (declare (ignore initargs))
-  (register-collection (get-store-controller instance) instance))
+(defclass collection (persistent) ())
 
 (defgeneric get-value (key ht &rest args))
 (defgeneric remove-kv (key ht &rest args))
 
-;;; auto-serialize keys, values
-(defclass serial-hash-mixin () ())
-
-(defmethod get-value (key (ht serial-hash-mixin) &rest args)
-  (deserialize (apply #'db-get (db ht) (serialize key) args)
-	       (get-store-controller ht)))
-
-(defmethod (setf get-value) (value key (ht serial-hash-mixin) &rest args
-				   &key (transaction *transaction*)
-				   &allow-other-keys)
-  (apply #'%db-put (db ht) (serialize key) (serialize value)
-	   :transaction transaction args))
-
-(defmethod remove-kv (key (ht serial-hash-mixin) &rest args
-			  &key (transaction *transaction*) &allow-other-keys)
-  (apply #'%db-remove (db ht) (serialize key) :transaction transaction args))
-
-;;; string keys, values
-(defclass string-hash-mixin () ())
-
-(defmethod get-value (key (ht string-hash-mixin) &rest args)
-  (apply #'db-get (db ht) key args))
-
-(defmethod (setf get-value) (value key (ht string-hash-mixin) &rest args
-				   &key (transaction *transaction*)
-				   &allow-other-keys)
-  (apply #'%db-put (db ht) key value :transaction transaction args))
-
-(defmethod remove-kv (key (ht string-hash-mixin) &rest args
-			  &key (transaction *transaction*) &allow-other-keys)
-  (apply #'%db-remove (db ht) key :transaction transaction args))
-
 ;;; btree access
-(defclass %btree (collection) ()
-  (:metaclass persistent-metaclass))
-
-(defmethod initialize-instance :after ((instance %btree) &rest initargs)
-  (declare (ignore initargs))
-  (setf (db instance)
-	(create-table (get-store-controller instance)
-		      "p-btrees"
-		      (prin1-to-string (oid instance))
-		      :type :btree)))
-
-;;; persistent serialized object btrees
-(defclass p-btree (%btree serial-hash-mixin) ()
-  (:metaclass persistent-metaclass))
-
-;;; persistent string btree
-(defclass p-string-btree (%btree string-hash-mixin) ()
-  (:metaclass persistent-metaclass))
-
-;;; hash-table access
-(defclass %hash-table (collection) ()
-  (:metaclass persistent-metaclass))
-
-(defmethod initialize-instance :after ((instance %hash-table) &rest initargs)
-  (declare (ignore initargs))
-  (setf (db instance)
-	(create-table (get-store-controller instance)
-		      "p-hash-tables"
-		      (prin1-to-string (oid instance))
-		      :type :hash)))
-
-;;; persistent serialized object hash-tables
-(defclass p-hash-table (%hash-table serial-hash-mixin) ()
-  (:metaclass persistent-metaclass))
+(defclass btree (collection) ())
 
-;;; persistent string hash-tables
-(defclass p-string-hash-table (%hash-table string-hash-mixin) ()
-  (:metaclass persistent-metaclass))
+(defmethod get-value (key (ht btree) &rest args)
+  (declare (ignore args))
+  (buffer-write-int (oid ht) *key-buf*)
+  (let ((key-length (serialize key *key-buf*)))
+    (handler-case 
+	(values
+	 (deserialize (db-get-key-buffered (db *store-controller*) 
+					   (buffer-stream-buffer *key-buf*)
+					   key-length))
+	 t)
+      (db-error (err)
+	(if (= (db-error-errno err) DB_NOTFOUND)
+	    (values nil nil)
+	    (error err))))))
+
+(defmethod (setf get-value) (value key (ht btree) &rest args
+			     &key (transaction *current-transaction*)
+			     (auto-commit *auto-commit*)
+			     &allow-other-keys)
+  (declare (ignore args))
+  (buffer-write-int (oid ht) *key-buf*)
+  (let ((key-length (serialize key *key-buf*))
+	(val-length (serialize value *out-buf*)))
+    (db-put-buffered (db *store-controller*) 
+		     (buffer-stream-buffer *key-buf*) key-length
+		     (buffer-stream-buffer *out-buf*) val-length
+		     :transaction transaction
+		     :auto-commit auto-commit)))
+
+(defmethod remove-kv (key (ht btree) &rest args
+		      &key (transaction *current-transaction*) 
+		      (auto-commit *auto-commit*)
+		      &allow-other-keys)
+  (declare (ignore args))
+  (buffer-write-int (oid ht) *key-buf*)
+  (let ((key-length (serialize key *key-buf*)))
+    (db-delete-buffered (db *store-controller*) 
+			(buffer-stream-buffer *key-buf*) key-length
+			:transaction transaction
+			:auto-commit auto-commit)))





More information about the Elephant-cvs mailing list