X-Git-Url: https://git.jsancho.org/?p=guile-irrlicht.git;a=blobdiff_plain;f=irrlicht%2Fforeign.scm;fp=irrlicht%2Fforeign.scm;h=96cec83bd0dd04c9dfca6a5c5c5757cf07992337;hp=9b55633accaf17ad17cdd39077f3cf93896032e9;hb=32d4067d4c588913bbd5ec4450f2f859af789942;hpb=79e12d94cc21232477796a4e76fc2ddb5d88f9dc diff --git a/irrlicht/foreign.scm b/irrlicht/foreign.scm index 9b55633..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-object?)) + null-object? + remember-wrapped + mem-wrapped)) ;; We use a hash table to store foreign irrlicht methods related with their ;; classes @@ -44,4 +46,20 @@ proc)))) (define (null-object? object) - (eq? (irr-pointer object) %null-pointer)) + (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)