(debug-convert-byte-code): Convert the doc info to a string.
[bpt/emacs.git] / lisp / emacs-lisp / ring.el
index 28f568d..ec9e88e 100644 (file)
   "Make a ring that can contain SIZE elements."
   (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)."
+  (let* ((vec (cdr (cdr ring))) 
+        (veclen (length vec))
+        (hd (car ring))
+        (ln (car (cdr ring))))
+    (setq ln (min veclen (1+ ln))
+         hd (ring-minus1 hd veclen))
+    (aset vec hd item)
+    (setcar ring hd)
+    (setcar (cdr ring) ln)))
+
 (defun ring-plus1 (index veclen)
   "INDEX+1, with wraparound"
   (let ((new-index (+ index 1)))
   (= 0 (car (cdr ring))))
 
 (defun ring-index (index head ringlen veclen)
-  (setq index (ring-mod index ringlen))
-  (ring-mod (1- (+ head (- ringlen index))) veclen))
+  (setq index (mod index ringlen))
+  (mod (1- (+ head (- ringlen index))) veclen))
 
 (defun ring-insert (ring item)
-  "Insert a new item onto the ring. If the ring is full, dump the oldest
-item to make room."       
+  "Insert onto ring RING the item ITEM, as the newest (last) item.
+If the ring is full, dump the oldest item to make room."       
   (let* ((vec (cdr (cdr ring))) 
         (veclen (length vec))
         (hd (car ring))
         (ln (car (cdr ring))))
     (prog1
-       (aset vec (ring-mod (+ hd ln) veclen) item)
+       (aset vec (mod (+ hd ln) veclen) item)
       (if (= ln veclen)
          (setcar ring (ring-plus1 hd veclen))
        (setcar (cdr ring) (1+ ln))))))
@@ -94,7 +106,7 @@ numeric, remove the element indexed."
          (ln (car (cdr ring)))
          (vec (cdr (cdr ring)))
          (veclen (length vec))
-         (tl (ring-mod (1- (+ hd ln)) veclen))
+         (tl (mod (1- (+ hd ln)) veclen))
          oldelt)
       (if (null index)
          (setq index (1- ln)))
@@ -107,14 +119,6 @@ numeric, remove the element indexed."
       (setcar (cdr ring) (1- ln))
       oldelt)))
 
-(defun ring-mod (n m)
-  "Returns N mod M.  M is positive.
-Answer is guaranteed to be non-negative, and less than m."
-  (let ((n (% n m)))
-    (if (>= n 0) n
-       (+ n
-          (if (>= m 0) m (- m)))))) ; (abs m)
-
 (defun ring-ref (ring index)
   "Returns RING's INDEX element.
 INDEX need not be <= the ring length, the appropriate modulo operation