summaryrefslogtreecommitdiff
path: root/lisp/emacs-lisp
diff options
context:
space:
mode:
Diffstat (limited to 'lisp/emacs-lisp')
-rw-r--r--lisp/emacs-lisp/ring.el16
1 files changed, 14 insertions, 2 deletions
diff --git a/lisp/emacs-lisp/ring.el b/lisp/emacs-lisp/ring.el
index 390aba93da1..ec9e88e47b6 100644
--- a/lisp/emacs-lisp/ring.el
+++ b/lisp/emacs-lisp/ring.el
@@ -51,6 +51,18 @@
"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)))
@@ -72,8 +84,8 @@
(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))