From 8720caa4a3a361abfa6e4cad8128cb89c364ac81 Mon Sep 17 00:00:00 2001 From: "Kevin M. Rosenberg" Date: Wed, 29 Oct 2003 07:23:51 +0000 Subject: [PATCH] r8075: add def-cached-instance --- macros.lisp | 18 ++++++++++++++++++ package.lisp | 1 + 2 files changed, 19 insertions(+) diff --git a/macros.lisp b/macros.lisp index 5b72865..46894ba 100644 --- a/macros.lisp +++ b/macros.lisp @@ -215,3 +215,21 @@ ,element-type) ,table-name) (cons buffer buffers)))))))) +(defmacro def-cached-instance (name) + (let* ((new-name (concat-symbol "new-" name "-instance")) + (release-name (concat-symbol "release-" name "-instance")) + (cache-name (concat-symbol "*cached-" name "-instance-table*")) + (lock-name (concat-symbol "*cached-" name "-instance-lock*"))) + `(eval-when (:compile-toplevel :load-toplevel :execute) + (defvar ,cache-name nil) + (defvar ,lock-name (kmrcl::make-lock ',name)) + + (defun ,new-name () + (kmrcl::with-lock-held (,lock-name) + (if ,cache-name + (pop ,cache-name) + (make-instance ',name)))) + + (defun ,release-name (instance) + (kmrcl::with-lock-held (,lock-name) + (push instance ,cache-name)))))) diff --git a/package.lisp b/package.lisp index dd95e3c..eeaf204 100644 --- a/package.lisp +++ b/package.lisp @@ -132,6 +132,7 @@ #:mv-bind #:deflex #:def-cached-vector + #:def-cached-instance ;; files.lisp #:print-file-contents -- 2.34.1