changelog shortlog graph tags branches changeset files file revisions raw help

Mercurial > core / annotate lisp/std/hash-table.lisp

changeset 698: 96958d3eb5b0
parent: a0dfde3cb3c4
author: Richard Westhaver <ellis@rwest.io>
date: Fri, 04 Oct 2024 22:04:59 -0400
permissions: -rw-r--r--
description: fixes
291
a0dfde3cb3c4 begin :STD refactor
Richard Westhaver <ellis@rwest.io>
parents:
diff changeset
1
 ;;; std/hash-table.lisp --- Standard Hash Tables
a0dfde3cb3c4 begin :STD refactor
Richard Westhaver <ellis@rwest.io>
parents:
diff changeset
2
 
a0dfde3cb3c4 begin :STD refactor
Richard Westhaver <ellis@rwest.io>
parents:
diff changeset
3
 ;;
a0dfde3cb3c4 begin :STD refactor
Richard Westhaver <ellis@rwest.io>
parents:
diff changeset
4
 
a0dfde3cb3c4 begin :STD refactor
Richard Westhaver <ellis@rwest.io>
parents:
diff changeset
5
 ;;; Code:
a0dfde3cb3c4 begin :STD refactor
Richard Westhaver <ellis@rwest.io>
parents:
diff changeset
6
 (in-package :std/hash-table)
a0dfde3cb3c4 begin :STD refactor
Richard Westhaver <ellis@rwest.io>
parents:
diff changeset
7
 
a0dfde3cb3c4 begin :STD refactor
Richard Westhaver <ellis@rwest.io>
parents:
diff changeset
8
 (declaim (inline maphash-keys))
a0dfde3cb3c4 begin :STD refactor
Richard Westhaver <ellis@rwest.io>
parents:
diff changeset
9
 (defun maphash-keys (function table)
a0dfde3cb3c4 begin :STD refactor
Richard Westhaver <ellis@rwest.io>
parents:
diff changeset
10
   "Like MAPHASH, but calls FUNCTION with each key in the hash table TABLE."
a0dfde3cb3c4 begin :STD refactor
Richard Westhaver <ellis@rwest.io>
parents:
diff changeset
11
   (maphash (lambda (k v)
a0dfde3cb3c4 begin :STD refactor
Richard Westhaver <ellis@rwest.io>
parents:
diff changeset
12
              (declare (ignore v))
a0dfde3cb3c4 begin :STD refactor
Richard Westhaver <ellis@rwest.io>
parents:
diff changeset
13
              (funcall function k))
a0dfde3cb3c4 begin :STD refactor
Richard Westhaver <ellis@rwest.io>
parents:
diff changeset
14
            table))
a0dfde3cb3c4 begin :STD refactor
Richard Westhaver <ellis@rwest.io>
parents:
diff changeset
15
 
a0dfde3cb3c4 begin :STD refactor
Richard Westhaver <ellis@rwest.io>
parents:
diff changeset
16
 (declaim (inline maphash-values))
a0dfde3cb3c4 begin :STD refactor
Richard Westhaver <ellis@rwest.io>
parents:
diff changeset
17
 (defun maphash-values (function table)
a0dfde3cb3c4 begin :STD refactor
Richard Westhaver <ellis@rwest.io>
parents:
diff changeset
18
   "Like MAPHASH, but calls FUNCTION with each value in the hash table TABLE."
a0dfde3cb3c4 begin :STD refactor
Richard Westhaver <ellis@rwest.io>
parents:
diff changeset
19
   (maphash (lambda (k v)
a0dfde3cb3c4 begin :STD refactor
Richard Westhaver <ellis@rwest.io>
parents:
diff changeset
20
              (declare (ignore k))
a0dfde3cb3c4 begin :STD refactor
Richard Westhaver <ellis@rwest.io>
parents:
diff changeset
21
              (funcall function v))
a0dfde3cb3c4 begin :STD refactor
Richard Westhaver <ellis@rwest.io>
parents:
diff changeset
22
            table))
a0dfde3cb3c4 begin :STD refactor
Richard Westhaver <ellis@rwest.io>
parents:
diff changeset
23
 
a0dfde3cb3c4 begin :STD refactor
Richard Westhaver <ellis@rwest.io>
parents:
diff changeset
24
 (defun hash-table-keys (table)
a0dfde3cb3c4 begin :STD refactor
Richard Westhaver <ellis@rwest.io>
parents:
diff changeset
25
   "Returns a list containing the keys of hash table TABLE."
a0dfde3cb3c4 begin :STD refactor
Richard Westhaver <ellis@rwest.io>
parents:
diff changeset
26
   (let ((keys nil))
a0dfde3cb3c4 begin :STD refactor
Richard Westhaver <ellis@rwest.io>
parents:
diff changeset
27
     (maphash-keys (lambda (k)
a0dfde3cb3c4 begin :STD refactor
Richard Westhaver <ellis@rwest.io>
parents:
diff changeset
28
                     (push k keys))
a0dfde3cb3c4 begin :STD refactor
Richard Westhaver <ellis@rwest.io>
parents:
diff changeset
29
                   table)
a0dfde3cb3c4 begin :STD refactor
Richard Westhaver <ellis@rwest.io>
parents:
diff changeset
30
     keys))
a0dfde3cb3c4 begin :STD refactor
Richard Westhaver <ellis@rwest.io>
parents:
diff changeset
31
 
a0dfde3cb3c4 begin :STD refactor
Richard Westhaver <ellis@rwest.io>
parents:
diff changeset
32
 (defun hash-table-values (table)
a0dfde3cb3c4 begin :STD refactor
Richard Westhaver <ellis@rwest.io>
parents:
diff changeset
33
   "Returns a list containing the values of hash table TABLE."
a0dfde3cb3c4 begin :STD refactor
Richard Westhaver <ellis@rwest.io>
parents:
diff changeset
34
   (let ((values nil))
a0dfde3cb3c4 begin :STD refactor
Richard Westhaver <ellis@rwest.io>
parents:
diff changeset
35
     (maphash-values (lambda (v)
a0dfde3cb3c4 begin :STD refactor
Richard Westhaver <ellis@rwest.io>
parents:
diff changeset
36
                       (push v values))
a0dfde3cb3c4 begin :STD refactor
Richard Westhaver <ellis@rwest.io>
parents:
diff changeset
37
                     table)
a0dfde3cb3c4 begin :STD refactor
Richard Westhaver <ellis@rwest.io>
parents:
diff changeset
38
     values))
a0dfde3cb3c4 begin :STD refactor
Richard Westhaver <ellis@rwest.io>
parents:
diff changeset
39
 
a0dfde3cb3c4 begin :STD refactor
Richard Westhaver <ellis@rwest.io>
parents:
diff changeset
40
 (defun hash-table-alist (table)
a0dfde3cb3c4 begin :STD refactor
Richard Westhaver <ellis@rwest.io>
parents:
diff changeset
41
   "Returns an association list containing the keys and values of hash table
a0dfde3cb3c4 begin :STD refactor
Richard Westhaver <ellis@rwest.io>
parents:
diff changeset
42
 TABLE."
a0dfde3cb3c4 begin :STD refactor
Richard Westhaver <ellis@rwest.io>
parents:
diff changeset
43
   (let ((alist nil))
a0dfde3cb3c4 begin :STD refactor
Richard Westhaver <ellis@rwest.io>
parents:
diff changeset
44
     (maphash (lambda (k v)
a0dfde3cb3c4 begin :STD refactor
Richard Westhaver <ellis@rwest.io>
parents:
diff changeset
45
                (push (cons k v) alist))
a0dfde3cb3c4 begin :STD refactor
Richard Westhaver <ellis@rwest.io>
parents:
diff changeset
46
              table)
a0dfde3cb3c4 begin :STD refactor
Richard Westhaver <ellis@rwest.io>
parents:
diff changeset
47
     alist))