[Top][All Lists]
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Emacs-diffs] Changes to emacs/lisp/emacs-lisp/ewoc.el
From: |
Thien-Thi Nguyen |
Subject: |
[Emacs-diffs] Changes to emacs/lisp/emacs-lisp/ewoc.el |
Date: |
Wed, 10 May 2006 08:00:33 +0000 |
Index: emacs/lisp/emacs-lisp/ewoc.el
diff -u emacs/lisp/emacs-lisp/ewoc.el:1.19 emacs/lisp/emacs-lisp/ewoc.el:1.20
--- emacs/lisp/emacs-lisp/ewoc.el:1.19 Mon May 8 08:00:38 2006
+++ emacs/lisp/emacs-lisp/ewoc.el Wed May 10 08:00:33 2006
@@ -144,13 +144,6 @@
\(fn NODE CHILD)")
-(defun ewoc--dll-create ()
- "Create an empty doubly linked list."
- (let ((dummy-node (ewoc--node-create 'DL-LIST 'DL-LIST)))
- (setf (ewoc--node-right dummy-node) dummy-node)
- (setf (ewoc--node-left dummy-node) dummy-node)
- dummy-node))
-
(defun ewoc--node-enter-before (node elemnode)
"Insert ELEMNODE before NODE in a DLL."
(assert (and (null (ewoc--node-left elemnode)) (null (ewoc--node-right
elemnode))))
@@ -159,14 +152,6 @@
(setf (ewoc--node-right (ewoc--node-left node)) elemnode)
(setf (ewoc--node-left node) elemnode))
-(defun ewoc--node-enter-first (dll node)
- "Add a free floating NODE first in DLL."
- (ewoc--node-enter-before (ewoc--node-right dll) node))
-
-(defun ewoc--node-enter-last (dll node)
- "Add a free floating NODE last in DLL."
- (ewoc--node-enter-before dll node))
-
(defun ewoc--node-next (dll node)
"Return the node after NODE, or nil if NODE is the last node."
(unless (eq (ewoc--node-right node) dll) (ewoc--node-right node)))
@@ -175,16 +160,6 @@
"Return the node before NODE, or nil if NODE is the first node."
(unless (eq (ewoc--node-left node) dll) (ewoc--node-left node)))
-(defun ewoc--node-delete (node)
- "Unbind NODE from its doubly linked list and return it."
- ;; This is a no-op when applied to the dummy node. This will return
- ;; nil if applied to the dummy node since it always contains nil.
- (setf (ewoc--node-right (ewoc--node-left node)) (ewoc--node-right node))
- (setf (ewoc--node-left (ewoc--node-right node)) (ewoc--node-left node))
- (setf (ewoc--node-left node) nil)
- (setf (ewoc--node-right node) nil)
- node)
-
(defun ewoc--node-nth (dll n)
"Return the Nth node from the doubly linked list DLL.
N counts from zero. If DLL is not that long, nil is returned.
@@ -257,26 +232,6 @@
(funcall pretty-printer data)
(ewoc--node-create (copy-marker pos) data))))
-
-(defun ewoc--delete-node-internal (ewoc node)
- "Delete a data string from EWOC.
-Can not be used on the footer. Return the wrapper that is deleted.
-The start-marker in the wrapper is set to nil, so that it doesn't
-consume any more resources."
- (let ((dll (ewoc--dll ewoc))
- (inhibit-read-only t))
- ;; If we are about to delete the node pointed at by last-node,
- ;; set last-node to nil.
- (if (eq (ewoc--last-node ewoc) node)
- (setf (ewoc--last-node ewoc) nil))
-
- (delete-region (ewoc--node-start-marker node)
- (ewoc--node-start-marker (ewoc--node-next dll node)))
- (set-marker (ewoc--node-start-marker node) nil)
- ;; Delete the node, and return the wrapper.
- (ewoc--node-delete node)))
-
-
(defun ewoc--refresh-node (pp node)
"Redisplay the element represented by NODE using the pretty-printer PP."
(let ((inhibit-read-only t))
@@ -309,10 +264,14 @@
present at the top of the ewoc. HEADER should end with a
newline. Optional third argument FOOTER is similar, and will
be inserted at the bottom of the ewoc."
- (let ((new-ewoc
- (ewoc--create (current-buffer)
- pretty-printer nil nil (ewoc--dll-create)))
- (pos (point)))
+ (let* ((dummy-node (ewoc--node-create 'DL-LIST 'DL-LIST))
+ (dll (progn (setf (ewoc--node-right dummy-node) dummy-node)
+ (setf (ewoc--node-left dummy-node) dummy-node)
+ dummy-node))
+ (new-ewoc
+ (ewoc--create (current-buffer)
+ pretty-printer nil nil dll))
+ (pos (point)))
(ewoc--set-buffer-bind-dll new-ewoc
;; Set default values
(unless header (setq header ""))
@@ -320,8 +279,8 @@
(setf (ewoc--node-start-marker dll) (copy-marker pos))
(let ((foot (ewoc--create-node footer 'insert pos))
(head (ewoc--create-node header 'insert pos)))
- (ewoc--node-enter-first dll head)
- (ewoc--node-enter-last dll foot)
+ (ewoc--node-enter-before (ewoc--node-right dll) head)
+ (ewoc--node-enter-before dll foot)
(setf (ewoc--header new-ewoc) head)
(setf (ewoc--footer new-ewoc) foot)))
;; Return the ewoc
@@ -417,11 +376,27 @@
(ewoc--set-buffer-bind-dll-let* ewoc
((node (ewoc--node-nth dll 1))
(footer (ewoc--footer ewoc))
- (next nil))
+ (next nil)
+ (L nil) (R nil)
+ (inhibit-read-only t))
(while (not (eq node footer))
(setq next (ewoc--node-next dll node))
(unless (apply predicate (ewoc--node-data node) args)
- (ewoc--delete-node-internal ewoc node))
+ ;; If we are about to delete the node pointed at by last-node,
+ ;; set last-node to nil.
+ (if (eq (ewoc--last-node ewoc) node)
+ (setf (ewoc--last-node ewoc) nil))
+ (delete-region (ewoc--node-start-marker node)
+ (ewoc--node-start-marker (ewoc--node-next dll node)))
+ (set-marker (ewoc--node-start-marker node) nil)
+ (setf L (ewoc--node-left node)
+ R (ewoc--node-right node)
+ ;; Link neighbors to each other.
+ (ewoc--node-right L) R
+ (ewoc--node-left R) L
+ ;; Forget neighbors.
+ (ewoc--node-left node) nil
+ (ewoc--node-right node) nil))
(setq node next))))
(defun ewoc-locate (ewoc &optional pos guess)
- [Emacs-diffs] Changes to emacs/lisp/emacs-lisp/ewoc.el, Thien-Thi Nguyen, 2006/05/05
- [Emacs-diffs] Changes to emacs/lisp/emacs-lisp/ewoc.el,
Thien-Thi Nguyen <=
- [Emacs-diffs] Changes to emacs/lisp/emacs-lisp/ewoc.el, Thien-Thi Nguyen, 2006/05/11
- [Emacs-diffs] Changes to emacs/lisp/emacs-lisp/ewoc.el, Thien-Thi Nguyen, 2006/05/12
- [Emacs-diffs] Changes to emacs/lisp/emacs-lisp/ewoc.el, Thien-Thi Nguyen, 2006/05/12
- [Emacs-diffs] Changes to emacs/lisp/emacs-lisp/ewoc.el, Thien-Thi Nguyen, 2006/05/17
- [Emacs-diffs] Changes to emacs/lisp/emacs-lisp/ewoc.el, Thien-Thi Nguyen, 2006/05/17
- [Emacs-diffs] Changes to emacs/lisp/emacs-lisp/ewoc.el, Thien-Thi Nguyen, 2006/05/18
- [Emacs-diffs] Changes to emacs/lisp/emacs-lisp/ewoc.el, Thien-Thi Nguyen, 2006/05/21
- [Emacs-diffs] Changes to emacs/lisp/emacs-lisp/ewoc.el, Thien-Thi Nguyen, 2006/05/22
- [Emacs-diffs] Changes to emacs/lisp/emacs-lisp/ewoc.el, Thien-Thi Nguyen, 2006/05/23
- [Emacs-diffs] Changes to emacs/lisp/emacs-lisp/ewoc.el, Thien-Thi Nguyen, 2006/05/26