X-Git-Url: https://git.jsancho.org/?a=blobdiff_plain;f=irrlicht%2Fforeign.scm;h=96cec83bd0dd04c9dfca6a5c5c5757cf07992337;hb=3bb58c2b45af12c0f9c9eac648e67ac6fa90e104;hp=f6e203622f55db18eae8907fce38f3c26533c4dd;hpb=b66897512cbe56969f0a9b2d4043fc8764c35e19;p=guile-irrlicht.git diff --git a/irrlicht/foreign.scm b/irrlicht/foreign.scm index f6e2036..96cec83 100644 --- a/irrlicht/foreign.scm +++ b/irrlicht/foreign.scm @@ -19,8 +19,12 @@ (define-module (irrlicht foreign) + #:use-module (system foreign) #:use-module (irrlicht base) - #:export (get-irrlicht-proc)) + #:export (get-irrlicht-proc + null-object? + remember-wrapped + mem-wrapped)) ;; We use a hash table to store foreign irrlicht methods related with their ;; classes @@ -40,3 +44,22 @@ new-proc)) (else proc)))) + +(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)