cl-scopes/util/index.lisp

25 lines
618 B
Common Lisp

;;;; cl-scopes/util/index
;;;; smart string-based indexes e.g. for queryable registries
(defpackage :scopes/util/index
(:use :common-lisp)
(:export #:create #:put #:query))
(in-package :scopes/util/index)
(defclass index ()
((data :reader data :initform (make-hash-table :test #'equal))))
(defun create ()
(make-instance 'index))
(defgeneric put (idx key value)
(:method ((idx index) key value)
(let* ((data (data idx))
(cur (gethash key data)))
(setf (gethash key data) (cons value cur)))))
(defgeneric query (idx key)
(:method ((idx index) key)
(gethash key (data idx))))