25 lines
618 B
Common 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))))
|