chiark
/
gitweb
/
~mdw
/
clg
/ commitdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
| commitdiff |
tree
raw
|
patch
|
inline
| side by side (parent:
7bab08b
)
Objects can now be cached with strong references
author
espen
<espen>
Thu, 2 Feb 2006 18:37:46 +0000
(18:37 +0000)
committer
espen
<espen>
Thu, 2 Feb 2006 18:37:46 +0000
(18:37 +0000)
glib/proxy.lisp
patch
|
blob
|
blame
|
history
diff --git
a/glib/proxy.lisp
b/glib/proxy.lisp
index 67c7e0b7c9a164422d6d3162e9d106bb697cbfa6..a96e24667fe74f3cbd5b13a257ec82e6fc973481 100644
(file)
--- a/
glib/proxy.lisp
+++ b/
glib/proxy.lisp
@@
-20,7
+20,7
@@
;; TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
;; SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
;; TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
;; SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
-;; $Id: proxy.lisp,v 1.2
1 2005/04/24 13:26:40
espen Exp $
+;; $Id: proxy.lisp,v 1.2
2 2006/02/02 18:37:46
espen Exp $
(in-package "GLIB")
(in-package "GLIB")
@@
-226,15
+226,19
@@
(defmethod validate-superclass
(internal *instance-cache*)
(defvar *instance-cache* (make-hash-table :test #'eql))
(internal *instance-cache*)
(defvar *instance-cache* (make-hash-table :test #'eql))
-(defun cache-instance (instance)
+(defun cache-instance (instance
&optional (weak-ref t)
)
(setf
(gethash (sap-int (proxy-location instance)) *instance-cache*)
(setf
(gethash (sap-int (proxy-location instance)) *instance-cache*)
- (make-weak-pointer instance)))
+ (if weak-ref
+ (make-weak-pointer instance)
+ instance)))
(defun find-cached-instance (location)
(let ((ref (gethash (sap-int location) *instance-cache*)))
(when ref
(defun find-cached-instance (location)
(let ((ref (gethash (sap-int location) *instance-cache*)))
(when ref
- (weak-pointer-value ref))))
+ (if (weak-pointer-p ref)
+ (weak-pointer-value ref)
+ ref))))
(defun instance-cached-p (location)
(gethash (sap-int location) *instance-cache*))
(defun instance-cached-p (location)
(gethash (sap-int location) *instance-cache*))
@@
-243,11
+247,11
@@
(defun remove-cached-instance (location)
(remhash (sap-int location) *instance-cache*))
;; For debuging
(remhash (sap-int location) *instance-cache*))
;; For debuging
-(defun cached-instances ()
+(defun
list-
cached-instances ()
(let ((instances ()))
(maphash #'(lambda (location ref)
(declare (ignore location))
(let ((instances ()))
(maphash #'(lambda (location ref)
(declare (ignore location))
- (push
(weak-pointer-value ref)
instances))
+ (push
ref
instances))
*instance-cache*)
instances))
*instance-cache*)
instances))
@@
-258,7
+262,6
@@
(defun cached-instances ()
(defclass proxy ()
((location :reader proxy-location :type system-area-pointer)))
(defclass proxy ()
((location :reader proxy-location :type system-area-pointer)))
-(defgeneric initialize-proxy (object &rest initargs))
(defgeneric instance-finalizer (object))
(defgeneric reference-foreign (class location))
(defgeneric unreference-foreign (class location))
(defgeneric instance-finalizer (object))
(defgeneric reference-foreign (class location))
(defgeneric unreference-foreign (class location))