From: Javier Sancho Date: Thu, 16 Apr 2020 11:26:39 +0000 (+0200) Subject: reference counted refactor X-Git-Url: https://git.jsancho.org/?a=commitdiff_plain;h=bc651faafe0ae75fd7f09c5318cf21bc0bc3b5a5;p=guile-irrlicht.git reference counted refactor --- diff --git a/src/reference-counted.cpp b/src/reference-counted.cpp index 1060df4..b13cbb0 100644 --- a/src/reference-counted.cpp +++ b/src/reference-counted.cpp @@ -29,30 +29,39 @@ 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); } + 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) { - bool result = 0; - if (device_p (wrapped_obj)) - { - result = unwrap_device (wrapped_obj)->drop (); - } - else if (scene_node_animator_p (wrapped_obj)) + if (is_reference_counted_object (wrapped_obj)) { - result = unwrap_scene_node_animator (wrapped_obj)->drop (); + 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)); } - return scm_from_bool (result); } } diff --git a/src/reference-counted.h b/src/reference-counted.h index f2a2613..a4ccfa7 100644 --- a/src/reference-counted.h +++ b/src/reference-counted.h @@ -27,9 +27,15 @@ extern "C" { + DECLARE_WRAPPED_TYPE (irr::IReferenceCounted*, init_reference_counted_type, + reference_counted_p, wrap_reference_counted, unwrap_reference_counted); + void init_reference_counted (void); + bool + is_reference_counted_object (SCM wrapped_obj); + SCM irr_drop (SCM wrapped_obj);