annotate lisp/emacs-lisp/ring.el @ 30408:e3e2c9051c5f

Got rid of all byte-compiler warnings on Emacs. Add to the menu when the file is loaded, not in ada-mode-hook. Add -toolbar to the default ddd command Switches moved from ada-prj-default-comp-cmd and ada-prj-default-make-cmd to ada-prj-default-comp-opt (ada-add-ada-menu): Remove the map and name parameters Add the Ada Reference Manual to the menu (ada-check-current): rewritten as a call to ada-compile-current (ada-compile): Removed. (ada-compile-application, ada-compile-current, ada-check-current): Set the compilation-search-path so that compile.el automatically finds the sources in src_dir. Automatic scrollong of the compilation buffer. C-uC-cC-c asks for confirmation before compiling (ada-compile-current): New parameter, prj-field (ada-complete-identifier): Load the .ali file before doing processing (ada-find-ali-file-in-dir): prepend build_dir to obj_dir to conform to gnatmake's behavior. (ada-find-file-in-dir): New function (ada-find-references): Set the environment variables for gnatfind (ada-find-src-file-in-dir): New function. (ada-first-non-nil): Removed (ada-gdb-application): Add support for jdb, the java debugger. (ada-get-ada-file-name): Load the original-file first if not done yet. (ada-get-all-references): Handles the new ali syntax (parent types are found between <>). (ada-initialize-runtime-library): New function (ada-mode-hook): Always load a project file when a file is opened, so that the casing exceptions are correctly read. (ada-operator-re): Add all missing operators ("abs", "rem", "**"). (ada-parse-prj-file): Use find-file-noselect instead of find-file to open the project file, since the latter does not work with speedbar Get default values before loading the prj file, or the default executable file name is wrong. Use the absolute value of src_dir to initialize ada-search-directories and compilation-search-path,... Add the standard runtime library to the search path for find-file. (ada-prj-default-debugger): Was missing an opening '{' (ada-prj-default-bind-opt, ada-prj-default-link-opt): New variables. (ada-prj-default-gnatmake-opt): New variable (ada-prj-find-prj-file): Handles non-file buffers For non-Ada buffers, the project file is the default one Save the windows configuration before displaying the menu. (ada-prj-src-dir, ada-prj-obj-dir, ada-prj-comp-opt,...): Removed (ada-read-identifier): Fix xrefs on operators (for "mod", "and", ...) regexp-quote identifiers names to support operators +, -,... in regexps. (ada-remote): New function. (ada-run-application): Erase the output buffer before starting the run Support remote execution of the application. Use call-process, or the arguments are incorrectly parsed (ada-set-default-project-file): Reread the content of the active project file, not the one from the current buffer When a project file is set as the default project, all directories are automatically associated with it. (ada-set-environment): New function (ada-treat-cmd-string): New special variable ${current} (ada-treat-cmd-string): Revised. The substitution is now done for any ${...} substring (ada-xref-current): If no body was found, compiles the spec instead. Setup ADA_{SOURCE,OBJECTS}_PATH before running the compiler to get rid of command line length limitations. (ada-xref-get-project-field): New function (ada-xref-project-files): New variable (ada-xref-runtime-library-specs-path) (ada-xref-runtime-library-ali-path): New variables (ada-xref-set-default-prj-values): Default run command now does a cd to the build directory. New field: main_unit Provide a default file name even if the current buffer has no prj file.
author Gerd Moellmann <gerd@gnu.org>
date Mon, 24 Jul 2000 11:13:11 +0000
parents 661c97b907a8
children 000e2717e1a5 d7ddb3e565de
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
2424
dbdccee84df3 *** empty log message ***
Eric S. Raymond <esr@snark.thyrsus.com>
parents: 905
diff changeset
1 ;;; ring.el --- handle rings of items
658
7cbd4fcd8b0f *** empty log message ***
Eric S. Raymond <esr@snark.thyrsus.com>
parents: 245
diff changeset
2
846
20674ae6bf52 *** empty log message ***
Eric S. Raymond <esr@snark.thyrsus.com>
parents: 811
diff changeset
3 ;; Copyright (C) 1992 Free Software Foundation, Inc.
20674ae6bf52 *** empty log message ***
Eric S. Raymond <esr@snark.thyrsus.com>
parents: 811
diff changeset
4
811
e694e0879463 *** empty log message ***
Eric S. Raymond <esr@snark.thyrsus.com>
parents: 658
diff changeset
5 ;; Maintainer: FSF
e694e0879463 *** empty log message ***
Eric S. Raymond <esr@snark.thyrsus.com>
parents: 658
diff changeset
6 ;; Keywords: extensions
e694e0879463 *** empty log message ***
Eric S. Raymond <esr@snark.thyrsus.com>
parents: 658
diff changeset
7
658
7cbd4fcd8b0f *** empty log message ***
Eric S. Raymond <esr@snark.thyrsus.com>
parents: 245
diff changeset
8 ;; This file is part of GNU Emacs.
7cbd4fcd8b0f *** empty log message ***
Eric S. Raymond <esr@snark.thyrsus.com>
parents: 245
diff changeset
9
7cbd4fcd8b0f *** empty log message ***
Eric S. Raymond <esr@snark.thyrsus.com>
parents: 245
diff changeset
10 ;; GNU Emacs is free software; you can redistribute it and/or modify
7cbd4fcd8b0f *** empty log message ***
Eric S. Raymond <esr@snark.thyrsus.com>
parents: 245
diff changeset
11 ;; it under the terms of the GNU General Public License as published by
811
e694e0879463 *** empty log message ***
Eric S. Raymond <esr@snark.thyrsus.com>
parents: 658
diff changeset
12 ;; the Free Software Foundation; either version 2, or (at your option)
658
7cbd4fcd8b0f *** empty log message ***
Eric S. Raymond <esr@snark.thyrsus.com>
parents: 245
diff changeset
13 ;; any later version.
7cbd4fcd8b0f *** empty log message ***
Eric S. Raymond <esr@snark.thyrsus.com>
parents: 245
diff changeset
14
7cbd4fcd8b0f *** empty log message ***
Eric S. Raymond <esr@snark.thyrsus.com>
parents: 245
diff changeset
15 ;; GNU Emacs is distributed in the hope that it will be useful,
7cbd4fcd8b0f *** empty log message ***
Eric S. Raymond <esr@snark.thyrsus.com>
parents: 245
diff changeset
16 ;; but WITHOUT ANY WARRANTY; without even the implied warranty of
7cbd4fcd8b0f *** empty log message ***
Eric S. Raymond <esr@snark.thyrsus.com>
parents: 245
diff changeset
17 ;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
7cbd4fcd8b0f *** empty log message ***
Eric S. Raymond <esr@snark.thyrsus.com>
parents: 245
diff changeset
18 ;; GNU General Public License for more details.
7cbd4fcd8b0f *** empty log message ***
Eric S. Raymond <esr@snark.thyrsus.com>
parents: 245
diff changeset
19
7cbd4fcd8b0f *** empty log message ***
Eric S. Raymond <esr@snark.thyrsus.com>
parents: 245
diff changeset
20 ;; You should have received a copy of the GNU General Public License
14169
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 8031
diff changeset
21 ;; along with GNU Emacs; see the file COPYING. If not, write to the
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 8031
diff changeset
22 ;; Free Software Foundation, Inc., 59 Temple Place - Suite 330,
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 8031
diff changeset
23 ;; Boston, MA 02111-1307, USA.
658
7cbd4fcd8b0f *** empty log message ***
Eric S. Raymond <esr@snark.thyrsus.com>
parents: 245
diff changeset
24
811
e694e0879463 *** empty log message ***
Eric S. Raymond <esr@snark.thyrsus.com>
parents: 658
diff changeset
25 ;;; Commentary:
e694e0879463 *** empty log message ***
Eric S. Raymond <esr@snark.thyrsus.com>
parents: 658
diff changeset
26
25467
cf992000b9c6 Many doc fixes.
Richard M. Stallman <rms@gnu.org>
parents: 17212
diff changeset
27 ;; This code defines a ring data structure. A ring is a
cf992000b9c6 Many doc fixes.
Richard M. Stallman <rms@gnu.org>
parents: 17212
diff changeset
28 ;; (hd-index length . vector)
17212
de55dc47bae6 Many doc fixes.
Richard M. Stallman <rms@gnu.org>
parents: 14169
diff changeset
29 ;; list. You can insert to, remove from, and rotate a ring. When the ring
14169
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 8031
diff changeset
30 ;; fills up, insertions cause the oldest elts to be quietly dropped.
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 8031
diff changeset
31 ;;
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 8031
diff changeset
32 ;; In ring-ref, 0 is the index of the newest element. Higher indexes
17212
de55dc47bae6 Many doc fixes.
Richard M. Stallman <rms@gnu.org>
parents: 14169
diff changeset
33 ;; correspond to older elements; when the index equals the ring length,
de55dc47bae6 Many doc fixes.
Richard M. Stallman <rms@gnu.org>
parents: 14169
diff changeset
34 ;; it wraps to the newest element again.
14169
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 8031
diff changeset
35 ;;
17212
de55dc47bae6 Many doc fixes.
Richard M. Stallman <rms@gnu.org>
parents: 14169
diff changeset
36 ;; hd-index = vector index of the oldest ring item.
de55dc47bae6 Many doc fixes.
Richard M. Stallman <rms@gnu.org>
parents: 14169
diff changeset
37 ;; Newer items follow this item; at the end of the vector,
25467
cf992000b9c6 Many doc fixes.
Richard M. Stallman <rms@gnu.org>
parents: 17212
diff changeset
38 ;; they wrap around to the start of the vector.
17212
de55dc47bae6 Many doc fixes.
Richard M. Stallman <rms@gnu.org>
parents: 14169
diff changeset
39 ;; length = number of items currently in the ring.
25467
cf992000b9c6 Many doc fixes.
Richard M. Stallman <rms@gnu.org>
parents: 17212
diff changeset
40 ;; This never exceeds the length of the vector itself.
14169
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 8031
diff changeset
41 ;;
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 8031
diff changeset
42 ;; These functions are used by the input history mechanism, but they can
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 8031
diff changeset
43 ;; be used for other purposes as well.
124
27691d738b4f Initial revision
David Lawrence <tale@gnu.org>
parents:
diff changeset
44
811
e694e0879463 *** empty log message ***
Eric S. Raymond <esr@snark.thyrsus.com>
parents: 658
diff changeset
45 ;;; Code:
e694e0879463 *** empty log message ***
Eric S. Raymond <esr@snark.thyrsus.com>
parents: 658
diff changeset
46
25467
cf992000b9c6 Many doc fixes.
Richard M. Stallman <rms@gnu.org>
parents: 17212
diff changeset
47 ;;; User Functions:
cf992000b9c6 Many doc fixes.
Richard M. Stallman <rms@gnu.org>
parents: 17212
diff changeset
48
905
48e4034a2176 entered into RCS
Richard M. Stallman <rms@gnu.org>
parents: 846
diff changeset
49 ;;;###autoload
25467
cf992000b9c6 Many doc fixes.
Richard M. Stallman <rms@gnu.org>
parents: 17212
diff changeset
50 (defun ring-p (x)
2574
c782b69b60a4 Added and fixed documentation.
Eric S. Raymond <esr@snark.thyrsus.com>
parents: 2424
diff changeset
51 "Returns t if X is a ring; nil otherwise."
124
27691d738b4f Initial revision
David Lawrence <tale@gnu.org>
parents:
diff changeset
52 (and (consp x) (integerp (car x))
27691d738b4f Initial revision
David Lawrence <tale@gnu.org>
parents:
diff changeset
53 (consp (cdr x)) (integerp (car (cdr x)))
27691d738b4f Initial revision
David Lawrence <tale@gnu.org>
parents:
diff changeset
54 (vectorp (cdr (cdr x)))))
27691d738b4f Initial revision
David Lawrence <tale@gnu.org>
parents:
diff changeset
55
905
48e4034a2176 entered into RCS
Richard M. Stallman <rms@gnu.org>
parents: 846
diff changeset
56 ;;;###autoload
124
27691d738b4f Initial revision
David Lawrence <tale@gnu.org>
parents:
diff changeset
57 (defun make-ring (size)
2574
c782b69b60a4 Added and fixed documentation.
Eric S. Raymond <esr@snark.thyrsus.com>
parents: 2424
diff changeset
58 "Make a ring that can contain SIZE elements."
2582
e01048f32511 Rewritten. A poor choice of representation made the old code excessively
Eric S. Raymond <esr@snark.thyrsus.com>
parents: 2574
diff changeset
59 (cons 0 (cons 0 (make-vector size nil))))
124
27691d738b4f Initial revision
David Lawrence <tale@gnu.org>
parents:
diff changeset
60
8031
4b45aa6d5d76 (ring-insert-at-beginning): New function.
Richard M. Stallman <rms@gnu.org>
parents: 4516
diff changeset
61 (defun ring-insert-at-beginning (ring item)
17212
de55dc47bae6 Many doc fixes.
Richard M. Stallman <rms@gnu.org>
parents: 14169
diff changeset
62 "Add to RING the item ITEM. Add it at the front, as the oldest item."
25467
cf992000b9c6 Many doc fixes.
Richard M. Stallman <rms@gnu.org>
parents: 17212
diff changeset
63 (let* ((vec (cdr (cdr ring)))
cf992000b9c6 Many doc fixes.
Richard M. Stallman <rms@gnu.org>
parents: 17212
diff changeset
64 (veclen (length vec))
cf992000b9c6 Many doc fixes.
Richard M. Stallman <rms@gnu.org>
parents: 17212
diff changeset
65 (hd (car ring))
cf992000b9c6 Many doc fixes.
Richard M. Stallman <rms@gnu.org>
parents: 17212
diff changeset
66 (ln (car (cdr ring))))
8031
4b45aa6d5d76 (ring-insert-at-beginning): New function.
Richard M. Stallman <rms@gnu.org>
parents: 4516
diff changeset
67 (setq ln (min veclen (1+ ln))
25467
cf992000b9c6 Many doc fixes.
Richard M. Stallman <rms@gnu.org>
parents: 17212
diff changeset
68 hd (ring-minus1 hd veclen))
8031
4b45aa6d5d76 (ring-insert-at-beginning): New function.
Richard M. Stallman <rms@gnu.org>
parents: 4516
diff changeset
69 (aset vec hd item)
4b45aa6d5d76 (ring-insert-at-beginning): New function.
Richard M. Stallman <rms@gnu.org>
parents: 4516
diff changeset
70 (setcar ring hd)
4b45aa6d5d76 (ring-insert-at-beginning): New function.
Richard M. Stallman <rms@gnu.org>
parents: 4516
diff changeset
71 (setcar (cdr ring) ln)))
4b45aa6d5d76 (ring-insert-at-beginning): New function.
Richard M. Stallman <rms@gnu.org>
parents: 4516
diff changeset
72
124
27691d738b4f Initial revision
David Lawrence <tale@gnu.org>
parents:
diff changeset
73 (defun ring-plus1 (index veclen)
25467
cf992000b9c6 Many doc fixes.
Richard M. Stallman <rms@gnu.org>
parents: 17212
diff changeset
74 "Returns INDEX+1, with wraparound."
124
27691d738b4f Initial revision
David Lawrence <tale@gnu.org>
parents:
diff changeset
75 (let ((new-index (+ index 1)))
27691d738b4f Initial revision
David Lawrence <tale@gnu.org>
parents:
diff changeset
76 (if (= new-index veclen) 0 new-index)))
27691d738b4f Initial revision
David Lawrence <tale@gnu.org>
parents:
diff changeset
77
27691d738b4f Initial revision
David Lawrence <tale@gnu.org>
parents:
diff changeset
78 (defun ring-minus1 (index veclen)
25467
cf992000b9c6 Many doc fixes.
Richard M. Stallman <rms@gnu.org>
parents: 17212
diff changeset
79 "Returns INDEX-1, with wraparound."
124
27691d738b4f Initial revision
David Lawrence <tale@gnu.org>
parents:
diff changeset
80 (- (if (= 0 index) veclen index) 1))
27691d738b4f Initial revision
David Lawrence <tale@gnu.org>
parents:
diff changeset
81
27691d738b4f Initial revision
David Lawrence <tale@gnu.org>
parents:
diff changeset
82 (defun ring-length (ring)
25467
cf992000b9c6 Many doc fixes.
Richard M. Stallman <rms@gnu.org>
parents: 17212
diff changeset
83 "Returns the number of elements in the RING."
2582
e01048f32511 Rewritten. A poor choice of representation made the old code excessively
Eric S. Raymond <esr@snark.thyrsus.com>
parents: 2574
diff changeset
84 (car (cdr ring)))
124
27691d738b4f Initial revision
David Lawrence <tale@gnu.org>
parents:
diff changeset
85
2582
e01048f32511 Rewritten. A poor choice of representation made the old code excessively
Eric S. Raymond <esr@snark.thyrsus.com>
parents: 2574
diff changeset
86 (defun ring-index (index head ringlen veclen)
25467
cf992000b9c6 Many doc fixes.
Richard M. Stallman <rms@gnu.org>
parents: 17212
diff changeset
87 "Converts nominal ring index INDEX to an internal index.
cf992000b9c6 Many doc fixes.
Richard M. Stallman <rms@gnu.org>
parents: 17212
diff changeset
88 The internal index refers to the items ordered from newest to oldest.
cf992000b9c6 Many doc fixes.
Richard M. Stallman <rms@gnu.org>
parents: 17212
diff changeset
89 HEAD is the index of the oldest element in the ring.
cf992000b9c6 Many doc fixes.
Richard M. Stallman <rms@gnu.org>
parents: 17212
diff changeset
90 RINGLEN is the number of elements currently in the ring.
cf992000b9c6 Many doc fixes.
Richard M. Stallman <rms@gnu.org>
parents: 17212
diff changeset
91 VECLEN is the size of the vector in the ring."
4516
95b9760d19e3 (ring-mod): Remove, since floor and mod
Paul Eggert <eggert@twinsun.com>
parents: 2582
diff changeset
92 (setq index (mod index ringlen))
95b9760d19e3 (ring-mod): Remove, since floor and mod
Paul Eggert <eggert@twinsun.com>
parents: 2582
diff changeset
93 (mod (1- (+ head (- ringlen index))) veclen))
124
27691d738b4f Initial revision
David Lawrence <tale@gnu.org>
parents:
diff changeset
94
25467
cf992000b9c6 Many doc fixes.
Richard M. Stallman <rms@gnu.org>
parents: 17212
diff changeset
95 (defun ring-empty-p (ring)
cf992000b9c6 Many doc fixes.
Richard M. Stallman <rms@gnu.org>
parents: 17212
diff changeset
96 "Returns t if RING is empty; nil otherwise."
cf992000b9c6 Many doc fixes.
Richard M. Stallman <rms@gnu.org>
parents: 17212
diff changeset
97 (= 0 (car (cdr ring))))
cf992000b9c6 Many doc fixes.
Richard M. Stallman <rms@gnu.org>
parents: 17212
diff changeset
98
cf992000b9c6 Many doc fixes.
Richard M. Stallman <rms@gnu.org>
parents: 17212
diff changeset
99 (defun ring-size (ring)
cf992000b9c6 Many doc fixes.
Richard M. Stallman <rms@gnu.org>
parents: 17212
diff changeset
100 "Returns the size of RING, the maximum number of elements it can contain."
cf992000b9c6 Many doc fixes.
Richard M. Stallman <rms@gnu.org>
parents: 17212
diff changeset
101 (length (cdr (cdr ring))))
cf992000b9c6 Many doc fixes.
Richard M. Stallman <rms@gnu.org>
parents: 17212
diff changeset
102
cf992000b9c6 Many doc fixes.
Richard M. Stallman <rms@gnu.org>
parents: 17212
diff changeset
103 (defun ring-copy (ring)
cf992000b9c6 Many doc fixes.
Richard M. Stallman <rms@gnu.org>
parents: 17212
diff changeset
104 "Returns a copy of RING."
25468
637af9b4fdbb Fix previous change.
Richard M. Stallman <rms@gnu.org>
parents: 25467
diff changeset
105 (let* ((vec (cdr (cdr ring)))
637af9b4fdbb Fix previous change.
Richard M. Stallman <rms@gnu.org>
parents: 25467
diff changeset
106 (hd (car ring))
637af9b4fdbb Fix previous change.
Richard M. Stallman <rms@gnu.org>
parents: 25467
diff changeset
107 (ln (car (cdr ring))))
25467
cf992000b9c6 Many doc fixes.
Richard M. Stallman <rms@gnu.org>
parents: 17212
diff changeset
108 (cons hd (cons ln (copy-sequence vec)))))
cf992000b9c6 Many doc fixes.
Richard M. Stallman <rms@gnu.org>
parents: 17212
diff changeset
109
124
27691d738b4f Initial revision
David Lawrence <tale@gnu.org>
parents:
diff changeset
110 (defun ring-insert (ring item)
8031
4b45aa6d5d76 (ring-insert-at-beginning): New function.
Richard M. Stallman <rms@gnu.org>
parents: 4516
diff changeset
111 "Insert onto ring RING the item ITEM, as the newest (last) item.
25467
cf992000b9c6 Many doc fixes.
Richard M. Stallman <rms@gnu.org>
parents: 17212
diff changeset
112 If the ring is full, dump the oldest item to make room."
cf992000b9c6 Many doc fixes.
Richard M. Stallman <rms@gnu.org>
parents: 17212
diff changeset
113 (let* ((vec (cdr (cdr ring)))
cf992000b9c6 Many doc fixes.
Richard M. Stallman <rms@gnu.org>
parents: 17212
diff changeset
114 (veclen (length vec))
cf992000b9c6 Many doc fixes.
Richard M. Stallman <rms@gnu.org>
parents: 17212
diff changeset
115 (hd (car ring))
cf992000b9c6 Many doc fixes.
Richard M. Stallman <rms@gnu.org>
parents: 17212
diff changeset
116 (ln (car (cdr ring))))
2582
e01048f32511 Rewritten. A poor choice of representation made the old code excessively
Eric S. Raymond <esr@snark.thyrsus.com>
parents: 2574
diff changeset
117 (prog1
25467
cf992000b9c6 Many doc fixes.
Richard M. Stallman <rms@gnu.org>
parents: 17212
diff changeset
118 (aset vec (mod (+ hd ln) veclen) item)
2582
e01048f32511 Rewritten. A poor choice of representation made the old code excessively
Eric S. Raymond <esr@snark.thyrsus.com>
parents: 2574
diff changeset
119 (if (= ln veclen)
25467
cf992000b9c6 Many doc fixes.
Richard M. Stallman <rms@gnu.org>
parents: 17212
diff changeset
120 (setcar ring (ring-plus1 hd veclen))
cf992000b9c6 Many doc fixes.
Richard M. Stallman <rms@gnu.org>
parents: 17212
diff changeset
121 (setcar (cdr ring) (1+ ln))))))
124
27691d738b4f Initial revision
David Lawrence <tale@gnu.org>
parents:
diff changeset
122
2582
e01048f32511 Rewritten. A poor choice of representation made the old code excessively
Eric S. Raymond <esr@snark.thyrsus.com>
parents: 2574
diff changeset
123 (defun ring-remove (ring &optional index)
e01048f32511 Rewritten. A poor choice of representation made the old code excessively
Eric S. Raymond <esr@snark.thyrsus.com>
parents: 2574
diff changeset
124 "Remove an item from the RING. Return the removed item.
e01048f32511 Rewritten. A poor choice of representation made the old code excessively
Eric S. Raymond <esr@snark.thyrsus.com>
parents: 2574
diff changeset
125 If optional INDEX is nil, remove the oldest item. If it's
e01048f32511 Rewritten. A poor choice of representation made the old code excessively
Eric S. Raymond <esr@snark.thyrsus.com>
parents: 2574
diff changeset
126 numeric, remove the element indexed."
e01048f32511 Rewritten. A poor choice of representation made the old code excessively
Eric S. Raymond <esr@snark.thyrsus.com>
parents: 2574
diff changeset
127 (if (ring-empty-p ring)
e01048f32511 Rewritten. A poor choice of representation made the old code excessively
Eric S. Raymond <esr@snark.thyrsus.com>
parents: 2574
diff changeset
128 (error "Ring empty")
e01048f32511 Rewritten. A poor choice of representation made the old code excessively
Eric S. Raymond <esr@snark.thyrsus.com>
parents: 2574
diff changeset
129 (let* ((hd (car ring))
25467
cf992000b9c6 Many doc fixes.
Richard M. Stallman <rms@gnu.org>
parents: 17212
diff changeset
130 (ln (car (cdr ring)))
cf992000b9c6 Many doc fixes.
Richard M. Stallman <rms@gnu.org>
parents: 17212
diff changeset
131 (vec (cdr (cdr ring)))
cf992000b9c6 Many doc fixes.
Richard M. Stallman <rms@gnu.org>
parents: 17212
diff changeset
132 (veclen (length vec))
cf992000b9c6 Many doc fixes.
Richard M. Stallman <rms@gnu.org>
parents: 17212
diff changeset
133 (tl (mod (1- (+ hd ln)) veclen))
cf992000b9c6 Many doc fixes.
Richard M. Stallman <rms@gnu.org>
parents: 17212
diff changeset
134 oldelt)
2582
e01048f32511 Rewritten. A poor choice of representation made the old code excessively
Eric S. Raymond <esr@snark.thyrsus.com>
parents: 2574
diff changeset
135 (if (null index)
25467
cf992000b9c6 Many doc fixes.
Richard M. Stallman <rms@gnu.org>
parents: 17212
diff changeset
136 (setq index (1- ln)))
2582
e01048f32511 Rewritten. A poor choice of representation made the old code excessively
Eric S. Raymond <esr@snark.thyrsus.com>
parents: 2574
diff changeset
137 (setq index (ring-index index hd ln veclen))
e01048f32511 Rewritten. A poor choice of representation made the old code excessively
Eric S. Raymond <esr@snark.thyrsus.com>
parents: 2574
diff changeset
138 (setq oldelt (aref vec index))
e01048f32511 Rewritten. A poor choice of representation made the old code excessively
Eric S. Raymond <esr@snark.thyrsus.com>
parents: 2574
diff changeset
139 (while (/= index tl)
25467
cf992000b9c6 Many doc fixes.
Richard M. Stallman <rms@gnu.org>
parents: 17212
diff changeset
140 (aset vec index (aref vec (ring-plus1 index veclen)))
cf992000b9c6 Many doc fixes.
Richard M. Stallman <rms@gnu.org>
parents: 17212
diff changeset
141 (setq index (ring-plus1 index veclen)))
2582
e01048f32511 Rewritten. A poor choice of representation made the old code excessively
Eric S. Raymond <esr@snark.thyrsus.com>
parents: 2574
diff changeset
142 (aset vec tl nil)
e01048f32511 Rewritten. A poor choice of representation made the old code excessively
Eric S. Raymond <esr@snark.thyrsus.com>
parents: 2574
diff changeset
143 (setcar (cdr ring) (1- ln))
e01048f32511 Rewritten. A poor choice of representation made the old code excessively
Eric S. Raymond <esr@snark.thyrsus.com>
parents: 2574
diff changeset
144 oldelt)))
124
27691d738b4f Initial revision
David Lawrence <tale@gnu.org>
parents:
diff changeset
145
27691d738b4f Initial revision
David Lawrence <tale@gnu.org>
parents:
diff changeset
146 (defun ring-ref (ring index)
2574
c782b69b60a4 Added and fixed documentation.
Eric S. Raymond <esr@snark.thyrsus.com>
parents: 2424
diff changeset
147 "Returns RING's INDEX element.
17212
de55dc47bae6 Many doc fixes.
Richard M. Stallman <rms@gnu.org>
parents: 14169
diff changeset
148 INDEX = 0 is the most recently inserted; higher indices
de55dc47bae6 Many doc fixes.
Richard M. Stallman <rms@gnu.org>
parents: 14169
diff changeset
149 correspond to older elements.
25468
637af9b4fdbb Fix previous change.
Richard M. Stallman <rms@gnu.org>
parents: 25467
diff changeset
150 INDEX need not be <= the ring length; the appropriate modulo operation
17212
de55dc47bae6 Many doc fixes.
Richard M. Stallman <rms@gnu.org>
parents: 14169
diff changeset
151 will be performed."
2582
e01048f32511 Rewritten. A poor choice of representation made the old code excessively
Eric S. Raymond <esr@snark.thyrsus.com>
parents: 2574
diff changeset
152 (if (ring-empty-p ring)
17212
de55dc47bae6 Many doc fixes.
Richard M. Stallman <rms@gnu.org>
parents: 14169
diff changeset
153 (error "Accessing an empty ring")
2582
e01048f32511 Rewritten. A poor choice of representation made the old code excessively
Eric S. Raymond <esr@snark.thyrsus.com>
parents: 2574
diff changeset
154 (let* ((hd (car ring)) (ln (car (cdr ring))) (vec (cdr (cdr ring))))
e01048f32511 Rewritten. A poor choice of representation made the old code excessively
Eric S. Raymond <esr@snark.thyrsus.com>
parents: 2574
diff changeset
155 (aref vec (ring-index index hd ln (length vec))))))
658
7cbd4fcd8b0f *** empty log message ***
Eric S. Raymond <esr@snark.thyrsus.com>
parents: 245
diff changeset
156
29055
661c97b907a8 (ring-elements): New function.
Dave Love <fx@gnu.org>
parents: 25468
diff changeset
157 (defun ring-elements (ring)
661c97b907a8 (ring-elements): New function.
Dave Love <fx@gnu.org>
parents: 25468
diff changeset
158 "Return a list of the lements of RING."
661c97b907a8 (ring-elements): New function.
Dave Love <fx@gnu.org>
parents: 25468
diff changeset
159 (mapcar #'identity (cddr ring)))
661c97b907a8 (ring-elements): New function.
Dave Love <fx@gnu.org>
parents: 25468
diff changeset
160
25467
cf992000b9c6 Many doc fixes.
Richard M. Stallman <rms@gnu.org>
parents: 17212
diff changeset
161 ;;; provide ourself:
cf992000b9c6 Many doc fixes.
Richard M. Stallman <rms@gnu.org>
parents: 17212
diff changeset
162
2574
c782b69b60a4 Added and fixed documentation.
Eric S. Raymond <esr@snark.thyrsus.com>
parents: 2424
diff changeset
163 (provide 'ring)
c782b69b60a4 Added and fixed documentation.
Eric S. Raymond <esr@snark.thyrsus.com>
parents: 2424
diff changeset
164
658
7cbd4fcd8b0f *** empty log message ***
Eric S. Raymond <esr@snark.thyrsus.com>
parents: 245
diff changeset
165 ;;; ring.el ends here