X-Git-Url: https://git.jsancho.org/?a=blobdiff_plain;f=src%2Freference-counted.cpp;h=1bdc8daf8737de65dc5791d363a18a6f68d29262;hb=41a6ad96e81a8d8153c54877c4c12f61100677a9;hp=b13cbb02f799c656c7c65a652147209d90a4837e;hpb=bc651faafe0ae75fd7f09c5318cf21bc0bc3b5a5;p=guile-irrlicht.git diff --git a/src/reference-counted.cpp b/src/reference-counted.cpp index b13cbb0..1bdc8da 100644 --- a/src/reference-counted.cpp +++ b/src/reference-counted.cpp @@ -21,47 +21,20 @@ #include #include - -#include "device.h" #include "gsubr.h" #include "reference-counted.h" -#include "scene-node-animator.h" - -extern "C" { - - DEFINE_WRAPPED_TYPE (irr::IReferenceCounted*, "reference-counted", - init_reference_counted_type, reference_counted_p, - wrap_reference_counted, unwrap_reference_counted); - void - init_reference_counted (void) - { - init_reference_counted_type (); - DEFINE_GSUBR ("drop!", 1, 0, 0, irr_drop); - } +using namespace irr; - bool - is_reference_counted_object (SCM wrapped_obj) - { - return - device_p (wrapped_obj) || - reference_counted_p (wrapped_obj) || - scene_node_animator_p (wrapped_obj); - } - - SCM - irr_drop (SCM wrapped_obj) - { - if (is_reference_counted_object (wrapped_obj)) - { - irr::IReferenceCounted* obj = unwrap_reference_counted (wrapped_obj, false); - return scm_from_bool (obj->drop ()); - } - else - { - scm_error (scm_arg_type_key, NULL, "Object cannot be dropped: ~S", - scm_list_1 (wrapped_obj), scm_list_1 (wrapped_obj)); - } - } +template +SCM +IReferenceCounted_drop (SCM obj) +{ + return scm_from_bool (((T) scm_to_pointer (obj))->drop ()); +} +void +init_reference_counted (void) +{ + DEFINE_GSUBR ("IrrlichtDevice_drop", 1, 0, 0, IReferenceCounted_drop); }