diff options
Diffstat (limited to 'lisp/emacs-lisp/ring.el')
-rw-r--r-- | lisp/emacs-lisp/ring.el | 16 |
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)) |