X-Git-Url: https://git.jsancho.org/?a=blobdiff_plain;f=irrlicht%2Fforeign.scm;h=96cec83bd0dd04c9dfca6a5c5c5757cf07992337;hb=7611ebfeeae5ed59751f108214ee7a00aea20b7b;hp=94aab7c8fe7c7c979c68877b00c24cef922d7e64;hpb=384a8fb56d8500dc3551085191a39c9da70e221c;p=guile-irrlicht.git diff --git a/irrlicht/foreign.scm b/irrlicht/foreign.scm index 94aab7c..96cec83 100644 --- a/irrlicht/foreign.scm +++ b/irrlicht/foreign.scm @@ -22,7 +22,9 @@ #:use-module (system foreign) #:use-module (irrlicht base) #:export (get-irrlicht-proc - null-pointer?)) + null-object? + remember-wrapped + mem-wrapped)) ;; We use a hash table to store foreign irrlicht methods related with their ;; classes @@ -43,5 +45,21 @@ (else proc)))) -(define (null-pointer? pointer) - (eq? pointer %null-pointer)) +(define (null-object? object) + (null-pointer? (irr-pointer object))) + +;; Table for storing foreign irrlicht wrapped objects by its pointer address +;; We can recover them later, when we have an address without knowing its type, like in +;; events case +(define wrapped-obj-table (make-hash-table)) + +(define (remember-wrapped object) + (or (hash-ref wrapped-obj-table + (pointer-address (irr-pointer object))) + object)) + +(define (mem-wrapped object) + (hash-set! wrapped-obj-table + (pointer-address (irr-pointer object)) + object) + object)