Added pjb-hash-tablel.el

Pascal J. Bourguignon [2017-01-25 10:59]
Added pjb-hash-tablel.el
Filename
pjb-hash-table.el
diff --git a/pjb-hash-table.el b/pjb-hash-table.el
new file mode 100644
index 0000000..1b557e4
--- /dev/null
+++ b/pjb-hash-table.el
@@ -0,0 +1,56 @@
+;;;; -*- mode:emacs-lisp;coding:utf-8 -*-
+;;;;**************************************************************************
+;;;;FILE:               pjb-hash-table.el
+;;;;LANGUAGE:           emacs lisp
+;;;;SYSTEM:             POSIX
+;;;;USER-INTERFACE:     NONE
+;;;;DESCRIPTION
+;;;;
+;;;;    Implements hash table functions.
+;;;;
+;;;;AUTHORS
+;;;;    <PJB> Pascal J. Bourguignon <pjb@informatimago.com>
+;;;;MODIFICATIONS
+;;;;    2017-01-25 <PJB> Added this header.
+;;;;BUGS
+;;;;LEGAL
+;;;;    AGPL3
+;;;;
+;;;;    Copyright Pascal J. Bourguignon 2017 - 2017
+;;;;
+;;;;    This program is free software: you can redistribute it and/or modify
+;;;;    it under the terms of the GNU Affero General Public License as published by
+;;;;    the Free Software Foundation, either version 3 of the License, or
+;;;;    (at your option) any later version.
+;;;;
+;;;;    This program 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 Affero General Public License for more details.
+;;;;
+;;;;    You should have received a copy of the GNU Affero General Public License
+;;;;    along with this program.  If not, see <http://www.gnu.org/licenses/>.
+;;;;**************************************************************************
+(require 'cl)
+
+(defun* hashtable (&key (test (function eql))
+                        (size nil sizep)
+                        (rehash-size nil rehash-size-p)
+                        (rehash-threshold nil rehash-threshold-p)
+                        elements)
+  "Creates a new hash-table, filled with the given ELEMENTS.
+ELEMENTS must be a list of lists of two items, the key and the value.
+Note: we use the name HASHTABLE to avoid name collision."
+  (let ((table (apply (function make-hash-table)
+                      :test test
+                      (append (when sizep
+                                (list :size size))
+                              (when rehash-size-p
+                                (list :rehash-size rehash-size))
+                              (when rehash-threshold-p
+                                (list :rehash-threshold rehash-threshold))))))
+    (dolist (item elements table)
+      (setf (gethash (first item) table) (second item)))))
+
+
+(provide 'pjb-hash-tabl)
ViewGit