
Update of /project/elephant/cvsroot/elephant/src/contrib/eslick/db-lisp In directory clnet:/tmp/cvs-serv2282/contrib/eslick/db-lisp Modified Files: btree.lisp package.lisp pages.lisp Log Message: Removing vestigial directory --- /project/elephant/cvsroot/elephant/src/contrib/eslick/db-lisp/btree.lisp 2007/02/08 15:57:19 1.2 +++ /project/elephant/cvsroot/elephant/src/contrib/eslick/db-lisp/btree.lisp 2007/02/08 23:05:46 1.3 @@ -7,7 +7,8 @@ '((0 . :unknown) (1 . :index) (2 . :leaf) - (3 . :blob))) + (3 . :overflow) + (#xFF . :root))) (defun get-type (byte) (assert (<= byte (car (last *type-table*)))) @@ -41,9 +42,27 @@ ;; Indexes: ;; +type = root +endian-tag = 0xDAF00F00 (32-bit) +db_version = 0-6-1 (48 bit) +free-data-block = page-ptr (32-bits) +num-keys - int32 + +type = index +num-keys - int32 +serialized-key - buffer-stream +page-pointer (int32-page) +serialized-key - buffer-stream +page-pointer (int32-page) +... +type - leaf +num-elts - ;; User Operations: +;; btree-open +(defun open-btree-file (path &key page-size (create t)) + ;; btree-create ;; btree-search --- /project/elephant/cvsroot/elephant/src/contrib/eslick/db-lisp/package.lisp 2007/02/08 15:57:19 1.2 +++ /project/elephant/cvsroot/elephant/src/contrib/eslick/db-lisp/package.lisp 2007/02/08 23:05:46 1.3 @@ -3,9 +3,3 @@ (defpackage :db-lisp (:use :cl :elephant :elephant-backend :elephant-memutil)) -;; file - open/close binary files -;; octet-stream - read/write binary buffers -;; binary-fields - macro package for reading/writing lisp arrays -;; pages - binary pages read/written to and from stream; simple metadata -;; includes a simple LRU page-caching scheme using linked-lists -;; btree - btrees implemented on top of pages --- /project/elephant/cvsroot/elephant/src/contrib/eslick/db-lisp/pages.lisp 2007/02/08 15:57:19 1.1 +++ /project/elephant/cvsroot/elephant/src/contrib/eslick/db-lisp/pages.lisp 2007/02/08 23:05:46 1.2 @@ -1,6 +1,31 @@ (in-package :db-lisp) ;; +;; Utilities +;; + +(defun copy-slots (obj1 obj2 slotnames) + (loop for slotname in slotnames do + (setf (slot-value obj2 slotname) (slot-value obj1 slotname)))) + +(defun write-integer-to-array (integer array offset &optional (bytes 4)) + (declare (type fixnum offset bytes) + (type integer integer) + (type (array (unsigned-byte 8)) array)) + (loop for i fixnum from 0 below bytes do + (setf (aref array (+ offset i)) + (ldb (byte 8 (* i 8)) integer)))) + +(defun read-integer-from-array (array offset &optional (bytes 4)) + (declare (type fixnum offset bytes) + (type (array (unsigned-byte 8)) array)) + (let ((value 0)) + (loop for i fixnum from 0 below bytes do + (setf value (dpb (aref array (+ i offset)) (byte 8 (* i 8)) value))) + value)) + + +;; ;; Mixins ;; @@ -53,14 +78,15 @@ ;; Primitive read-write of buffer-pages ;; -;; ;; Read/Write fixnums -;; -(defun write-fixnum (page offset fix &optional (bytes 4)) - (loop for i from 0 below bytes do - (setf (aref (page-buffer page) (+ offset i)) - (ldb (byte 8 (* i 8)) fix)))) +(defmethod write-integer (fixnum page offset &optional (bytes 4)) + (declare (type fixnum fixnum offset bytes)) + (write-fixnum-to-array fixnum (page-buffer page) offset bytes)) + +(defmethod read-integer (page offset &optional (bytes 4)) + (declare (type fixnum offset bytes)) + (read-integer-from-array (page-buffer page) offset bytes)) ;; NOTE: Redo memutil/serializer primitives here? @@ -182,9 +208,11 @@ (defmethod cache-page ((pool buffer-pool) page) (push page (gethash (page-position page) (pool-hash pool)))) +;; ------------------------------------------------------------------------ ;; ;; User cache operations ;; +;; ------------------------------------------------------------------------ (defmethod get-page ((pool buffer-pool) stream position) (touch-page