about summary refs log tree commit diff
path: root/configs/shared/emacs/.emacs.d/elpa/queue-0.2/queue.el
diff options
context:
space:
mode:
Diffstat (limited to 'configs/shared/emacs/.emacs.d/elpa/queue-0.2/queue.el')
-rw-r--r--configs/shared/emacs/.emacs.d/elpa/queue-0.2/queue.el192
1 files changed, 192 insertions, 0 deletions
diff --git a/configs/shared/emacs/.emacs.d/elpa/queue-0.2/queue.el b/configs/shared/emacs/.emacs.d/elpa/queue-0.2/queue.el
new file mode 100644
index 0000000000..5c9a88bd7a
--- /dev/null
+++ b/configs/shared/emacs/.emacs.d/elpa/queue-0.2/queue.el
@@ -0,0 +1,192 @@
+;;; queue.el --- Queue data structure  -*- lexical-binding: t; -*-
+
+;; Copyright (C) 1991-1995, 2008-2009, 2012, 2017  Free Software Foundation, Inc
+
+;; Author: Inge Wallin <inge@lysator.liu.se>
+;;         Toby Cubitt <toby-predictive@dr-qubit.org>
+;; Maintainer: Toby Cubitt <toby-predictive@dr-qubit.org>
+;; Version: 0.2
+;; Keywords: extensions, data structures, queue
+;; URL: http://www.dr-qubit.org/emacs.php
+;; Repository: http://www.dr-qubit.org/git/predictive.git
+
+;; This file is part of Emacs.
+;;
+;; GNU Emacs is free software: you can redistribute it and/or modify it under
+;; the terms of the GNU General Public License as published by the Free
+;; Software Foundation, either version 3 of the License, or (at your option)
+;; any later version.
+;;
+;; GNU Emacs is distributed in the hope that it will be useful, but WITHOUT
+;; ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+;; FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License for
+;; more details.
+;;
+;; You should have received a copy of the GNU General Public License along
+;; with GNU Emacs.  If not, see <http://www.gnu.org/licenses/>.
+
+
+;;; Commentary:
+;;
+;; These queues can be used both as a first-in last-out (FILO) and as a
+;; first-in first-out (FIFO) stack, i.e. elements can be added to the front or
+;; back of the queue, and can be removed from the front. (This type of data
+;; structure is sometimes called an "output-restricted deque".)
+;;
+;; You create a queue using `make-queue', add an element to the end of the
+;; queue using `queue-enqueue', and push an element onto the front of the
+;; queue using `queue-prepend'. To remove the first element from a queue, use
+;; `queue-dequeue'. A number of other queue convenience functions are also
+;; provided, all starting with the prefix `queue-'.  Functions with prefix
+;; `queue--' are for internal use only, and should never be used outside this
+;; package.
+
+
+;;; Code:
+
+(eval-when-compile (require 'cl))
+
+(defmacro queue--when-generators (then)
+  "Evaluate THEN if `generator' library is available."
+  (declare (debug t))
+  (if (require 'generator nil 'noerror) then))
+
+
+(defstruct (queue
+            ;; A tagged list is the pre-defstruct representation.
+            ;; (:type list)
+	    :named
+	    (:constructor nil)
+	    (:constructor queue-create ())
+	    (:copier nil))
+  head tail)
+
+
+;;;###autoload
+(defalias 'make-queue 'queue-create
+  "Create an empty queue data structure.")
+
+
+(defun queue-enqueue (queue element)
+  "Append an ELEMENT to the end of the QUEUE."
+  (if (queue-head queue)
+      (setcdr (queue-tail queue)
+	      (setf (queue-tail queue) (cons element nil)))
+    (setf (queue-head queue)
+	  (setf (queue-tail queue) (cons element nil)))))
+
+(defalias 'queue-append 'queue-enqueue)
+
+
+(defun queue-prepend (queue element)
+  "Prepend an ELEMENT to the front of the QUEUE."
+  (if (queue-head queue)
+      (push element (queue-head queue))
+    (setf (queue-head queue)
+	  (setf (queue-tail queue) (cons element nil)))))
+
+
+(defun queue-dequeue (queue)
+  "Remove the first element of QUEUE and return it.
+Returns nil if the queue is empty."
+  (unless (cdr (queue-head queue)) (setf (queue-tail queue) nil))
+  (pop (queue-head queue)))
+
+
+(defun queue-empty (queue)
+  "Return t if QUEUE is empty, otherwise return nil."
+  (null (queue-head queue)))
+
+
+(defun queue-first (queue)
+  "Return the first element of QUEUE or nil if it is empty,
+without removing it from the QUEUE."
+  (car (queue-head queue)))
+
+
+(defun queue-nth (queue n)
+  "Return the nth element of a queue, without removing it.
+If the length of the queue is less than N, return nil. The first
+element in the queue has index 0."
+  (nth n (queue-head queue)))
+
+
+(defun queue-last (queue)
+  "Return the last element of QUEUE, without removing it.
+Returns nil if the QUEUE is empty."
+  (car (queue-tail queue)))
+
+
+(defun queue-all (queue)
+  "Return a list of all elements of QUEUE or nil if it is empty.
+The oldest element in the queue is the first in the list."
+  (queue-head queue))
+
+
+(defun queue-copy (queue)
+  "Return a copy of QUEUE.
+The new queue contains the elements of QUEUE in the same
+order. The elements themselves are *not* copied."
+  (let ((q (queue-create))
+	(list (queue-head queue)))
+    (when (queue-head queue)
+      (setf (queue-head q) (cons (car (queue-head queue)) nil)
+	    (queue-tail q) (queue-head q))
+      (while (setq list (cdr list))
+	(setf (queue-tail q)
+	      (setcdr (queue-tail q) (cons (car list) nil)))))
+    q))
+
+
+(defun queue-length (queue)
+  "Return the number of elements in QUEUE."
+  (length (queue-head queue)))
+
+
+(defun queue-clear (queue)
+  "Remove all elements from QUEUE."
+  (setf (queue-head queue) nil
+	(queue-tail queue) nil))
+
+
+(queue--when-generators
+ (iter-defun queue-iter (queue)
+   "Return a queue iterator object.
+
+Calling `iter-next' on this object will retrieve the next element
+from the queue. The queue itself is not modified."
+   (let ((list (queue-head queue)))
+     (while list (iter-yield (pop list))))))
+
+;;;; ChangeLog:
+
+;; 2017-08-16  Toby S. Cubitt  <tsc25@cantab.net>
+;; 
+;; 	Upgrade data structure packages to latest versions.
+;; 
+;; 2014-05-15  Toby S. Cubitt  <tsc25@cantab.net>
+;; 
+;; 	queue.el: fix buggy queue-first and queue-empty definitions.
+;; 
+;; 2012-04-30  Toby S. Cubitt  <tsc25@cantab.net>
+;; 
+;; 	Minor fixes to commentaries, package headers, and whitespace
+;; 
+;; 	* queue.el: fix description of data structure in Commentary; add
+;; 	Maintainer
+;; 	 header.
+;; 
+;; 	* queue.el, heap.el, tNFA.el, trie.el, dict-tree.el: trivial whitespace
+;; 	fixes.
+;; 
+;; 2012-04-29  Toby S. Cubitt  <tsc25@cantab.net>
+;; 
+;; 	Add queue.el
+;; 
+
+
+
+(provide 'queue)
+
+
+;;; queue.el ends here