annotate lisp/pcl-cvs/elib-node.el @ 123:c77884c6318d

Added tag r20-1b14 for changeset d2f30a177268
author cvs
date Mon, 13 Aug 2007 09:26:04 +0200
parents 131b0175ea99
children
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
70
131b0175ea99 Import from CVS: tag r20-0b30
cvs
parents: 0
diff changeset
1 ;;;; $Id: elib-node.el,v 1.1.1.1 1996/12/18 22:42:58 steve Exp $
0
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
2 ;;;; Nodes used in binary trees and doubly linked lists.
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
3
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
4 ;; Copyright (C) 1991-1995 Free Software Foundation
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
5
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
6 ;; Author: Per Cederqvist <ceder@lysator.liu.se>
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
7 ;; Inge Wallin <inge@lysator.liu.se>
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
8 ;; Maintainer: elib-maintainers@lysator.liu.se
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
9 ;; Created: 20 May 1991
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
10 ;; Keywords: extensions, lisp
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
11
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
12 ;;;; This file is part of the GNU Emacs lisp library, Elib.
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
13 ;;;;
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
14 ;;;; GNU Elib is free software; you can redistribute it and/or modify
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
15 ;;;; it under the terms of the GNU General Public License as published by
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
16 ;;;; the Free Software Foundation; either version 2, or (at your option)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
17 ;;;; any later version.
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
18 ;;;;
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
19 ;;;; GNU Elib is distributed in the hope that it will be useful,
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
20 ;;;; but WITHOUT ANY WARRANTY; without even the implied warranty of
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
21 ;;;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
22 ;;;; GNU General Public License for more details.
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
23 ;;;;
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
24 ;;;; You should have received a copy of the GNU General Public License
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
25 ;;;; along with GNU Elib; see the file COPYING. If not, write to
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
26 ;;;; the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
27 ;;;; Boston, MA 02111-1307, USA
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
28 ;;;;
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
29 ;;;; Author: Inge Wallin
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
30 ;;;;
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
31
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
32 ;;; Commentary:
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
33
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
34 ;;; A node is implemented as an array with three elements, using
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
35 ;;; (elt node 0) as the left pointer
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
36 ;;; (elt node 1) as the right pointer
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
37 ;;; (elt node 2) as the data
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
38 ;;;
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
39 ;;; Some types of trees, e.g. AVL trees, need bigger nodes, but
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
40 ;;; as long as the first three parts are the left pointer, the
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
41 ;;; right pointer and the data field, these macros can be used.
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
42 ;;;
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
43
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
44 ;;; Code:
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
45
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
46 (provide 'elib-node)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
47
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
48
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
49 (defmacro elib-node-create (left right data)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
50
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
51 ;; Create a tree node from LEFT, RIGHT and DATA.
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
52 (` (vector (, left) (, right) (, data))))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
53
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
54
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
55 (defmacro elib-node-left (node)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
56
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
57 ;; Return the left pointer of NODE.
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
58 (` (aref (, node) 0)))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
59
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
60
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
61 (defmacro elib-node-right (node)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
62
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
63 ;; Return the right pointer of NODE.
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
64 (` (aref (, node) 1)))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
65
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
66
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
67 (defmacro elib-node-data (node)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
68
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
69 ;; Return the data of NODE.
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
70 (` (aref (, node) 2)))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
71
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
72
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
73 (defmacro elib-node-set-left (node newleft)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
74
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
75 ;; Set the left pointer of NODE to NEWLEFT.
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
76 (` (aset (, node) 0 (, newleft))))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
77
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
78
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
79 (defmacro elib-node-set-right (node newright)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
80
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
81 ;; Set the right pointer of NODE to NEWRIGHT.
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
82 (` (aset (, node) 1 (, newright))))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
83
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
84
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
85 (defmacro elib-node-set-data (node newdata)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
86 ;; Set the data of NODE to NEWDATA.
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
87 (` (aset (, node) 2 (, newdata))))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
88
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
89
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
90
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
91 (defmacro elib-node-branch (node branch)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
92
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
93 ;; Get value of a branch of a node.
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
94 ;;
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
95 ;; NODE is the node, and BRANCH is the branch.
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
96 ;; 0 for left pointer, 1 for right pointer and 2 for the data."
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
97 (` (aref (, node) (, branch))))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
98
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
99
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
100 (defmacro elib-node-set-branch (node branch newval)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
101
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
102 ;; Set value of a branch of a node.
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
103 ;;
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
104 ;; NODE is the node, and BRANCH is the branch.
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
105 ;; 0 for left pointer, 1 for the right pointer and 2 for the data.
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
106 ;; NEWVAL is new value of the branch."
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
107 (` (aset (, node) (, branch) (, newval))))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
108
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
109 ;;; elib-node.el ends here.