Update of /project/eclipse/cvsroot/eclipse In directory cl-net:/tmp/cvs-serv20089
Modified Files: misc.lisp Log Message: Add: wrapper functions around hash table to get window as key.
--- /project/eclipse/cvsroot/eclipse/misc.lisp 2009/11/04 19:24:59 1.45 +++ /project/eclipse/cvsroot/eclipse/misc.lisp 2009/11/17 17:30:00 1.46 @@ -1,5 +1,5 @@ ;;; -*- Mode: Lisp; Package: ECLIPSE-INTERNALS -*- -;;; $Id: misc.lisp,v 1.45 2009/11/04 19:24:59 ihatchondo Exp $ +;;; $Id: misc.lisp,v 1.46 2009/11/17 17:30:00 ihatchondo Exp $ ;;; ;;; This file is part of Eclipse. ;;; Copyright (C) 2002 Iban HATCHONDO @@ -71,6 +71,29 @@ (make-error-handler (error :return t)) (make-error-handler (end-of-file :throw end))
+;;;; Window hashtable +;; Wrapper functions over hashtable using xlib:window as hash keys. +;; Since we can't pass a custom predicate to make-hash-table, those +;; wrappers are there to deal with it using window-id and null window. + +(defun getwinhash (window hashtable &optional default) + (declare (type (or null xlib:window) window)) + (declare (type hash-table hashtable)) + (declare (optimize (speed 3) (safety 0))) + (gethash (and window (xlib:window-id window)) hashtable default)) + +(defun remwinhash (window hashtable) + (declare (type (or null xlib:window) window)) + (declare (type hash-table hashtable)) + (declare (optimize (speed 3) (safety 0))) + (remhash (and window (xlib:window-id window)) hashtable)) + +(defsetf getwinhash (window hashtable &optional default) (value) + (let ((key (gensym))) + `(let ((,key ,window)) + (setf (gethash (and ,key (xlib:window-id ,key)) ,hashtable ,default) + ,value)))) + ;;;; Property readers. ;; They are not defined in the clx-ext package, because we customize them ;; to allow a single manipulation for all properties that appears in the