changeset 17212:de55dc47bae6

Many doc fixes. (ring-ref): Fix error message.
author Richard M. Stallman <rms@gnu.org>
date Sat, 22 Mar 1997 03:52:36 +0000
parents ecf78b4eb138
children d6eb07a26f03
files lisp/emacs-lisp/ring.el
diffstat 1 files changed, 16 insertions(+), 11 deletions(-) [+]
line wrap: on
line diff
--- a/lisp/emacs-lisp/ring.el	Sat Mar 22 03:51:36 1997 +0000
+++ b/lisp/emacs-lisp/ring.el	Sat Mar 22 03:52:36 1997 +0000
@@ -26,14 +26,18 @@
 
 ;; This code defines a ring data structure. A ring is a 
 ;;     (hd-index length . vector) 
-;; list. You can insert to, remove from, and rotate a ring. When the ring
+;; list.  You can insert to, remove from, and rotate a ring.  When the ring
 ;; fills up, insertions cause the oldest elts to be quietly dropped.
 ;;
 ;; In ring-ref, 0 is the index of the newest element.  Higher indexes
-;; correspond to older elements until they wrap.
+;; correspond to older elements; when the index equals the ring length,
+;; it wraps to the newest element again.
 ;;
-;; hd-index = index of the newest item on the ring.
-;; length = number of ring items.
+;; hd-index = vector index of the oldest ring item.
+;;         Newer items follow this item; at the end of the vector,
+;;	   they wrap around to the start of the vector.
+;; length = number of items currently in the ring.
+;;	   This never exceeds the length of the vector itself.
 ;;
 ;; These functions are used by the input history mechanism, but they can
 ;; be used for other purposes as well.
@@ -53,7 +57,7 @@
   (cons 0 (cons 0 (make-vector size nil))))
 
 (defun ring-insert-at-beginning (ring item)
-  "Add to RING the item ITEM.  Add it at the front (the early end)."
+  "Add to RING the item ITEM.  Add it at the front, as the oldest item."
   (let* ((vec (cdr (cdr ring))) 
 	 (veclen (length vec))
 	 (hd (car ring))
@@ -65,16 +69,16 @@
     (setcar (cdr ring) ln)))
 
 (defun ring-plus1 (index veclen)
-  "INDEX+1, with wraparound"
+  "INDEX+1, with wraparound."
   (let ((new-index (+ index 1)))
     (if (= new-index veclen) 0 new-index)))
 
 (defun ring-minus1 (index veclen)
-  "INDEX-1, with wraparound"
+  "INDEX-1, with wraparound."
   (- (if (= 0 index) veclen index) 1))
 
 (defun ring-length (ring)
-  "Number of elements in the ring."
+  "Number of elements in the ring RING."
   (car (cdr ring)))
 
 (defun ring-empty-p (ring)
@@ -122,11 +126,12 @@
 
 (defun ring-ref (ring index)
   "Returns RING's INDEX element.
+INDEX = 0 is the most recently inserted; higher indices
+correspond to older elements.
 INDEX need not be <= the ring length, the appropriate modulo operation
-will be performed.  Element 0 is the most recently inserted; higher indices
-correspond to older elements until they wrap."
+will be performed."
   (if (ring-empty-p ring)
-      (error "indexed empty ring")
+      (error "Accessing an empty ring")
     (let* ((hd (car ring))  (ln (car (cdr ring)))  (vec (cdr (cdr ring))))
       (aref vec (ring-index index hd ln (length vec))))))