Skip to content

Commit

Permalink
remove 処理を見直し。
Browse files Browse the repository at this point in the history
  • Loading branch information
quek committed Oct 9, 2010
1 parent 505d038 commit 6a29b39
Showing 1 changed file with 11 additions and 16 deletions.
27 changes: 11 additions & 16 deletions skip-list/skip-list-db.lisp
Expand Up @@ -124,7 +124,7 @@
(return (values nil prevs))))
(t
(setf (aref prevs level) node-1)
(return (values node prevs)))))
(return (values node prevs level node-1)))))
else
do (setf (aref prevs level) node-1)
(when (= -1 (decf level))
Expand Down Expand Up @@ -189,36 +189,31 @@
(save-node-value node)
(free heap old))))

(defun %skip-list-remove (skip-list-db node prevs)
(defun %skip-list-remove (skip-list-db node level prev)
(with-slots (heap max-level) skip-list-db
(loop for level from 0
for prev across prevs
if prev
do (print (list node prevs level prev))
(loop for i from level downto 0
do (print (list i prev))
(loop until (= (node-offset node) (node-offset (next-node prev i)))
do (print prev)
(setf prev (next-node prev i))
finally (setf (ref-64 *sap* (+ (node-next-start prev) (* 8 i)))
(ref-64 *sap* (+ (node-next-start node) (* 8 i))))))
(return node))
(loop for i from level downto 0
do (print (list i prev))
(loop until (= (node-offset node) (node-offset (next-node prev i)))
do (print prev)
(setf prev (next-node prev i))
finally (setf (ref-64 *sap* (+ (node-next-start prev) (* 8 i)))
(ref-64 *sap* (+ (node-next-start node) (* 8 i))))))
(free heap (node-offset node))))

(defmethod accept ((db skip-list-db) kbuf ksiz writable full empty)
(with-slots (head stream) db
(with-sap (stream)
(if writable
;; 更新系
(multiple-value-bind (node prevs) (%skip-list-search db kbuf ksiz)
(multiple-value-bind (node prevs level prev) (%skip-list-search db kbuf ksiz)
(if node
;; 該当あり
(multiple-value-bind (vbuf vsiz) (funcall full kbuf ksiz
node 0)
(case vbuf
(:remove
;; 削除
(%skip-list-remove db node prevs))
(%skip-list-remove db node level prev))
(:nop t)
(t
;; 置き換え(+nop+ ではない場合)
Expand Down

0 comments on commit 6a29b39

Please sign in to comment.